我想使用Python来访问一个wav文件并以一种允许我分析它的形式编写它的内容(比方说数组).
我在numpy(1.4.0)上安装了一个较新的版本.但后来我遇到了一组新的错误:
回溯(最近通话最后一个):文件"test.py",7号线,在进口scikits.audiolab文件"/usr/lib/python2.5/site-packages/scikits/audiolab/ 初始化 py"为25行,从pysndfile进口formatinfo,sndfile文件"/usr/lib/python2.5/site-packages/scikits/audiolab/pysndfile/ 初始化的.py",1号线,从_sndfile进口sndfile,格式,available_file_formats,available_encodings文件"numpy的.pxd",第30行,在scikits.audiolab.pysndfile._sndfile中(scikits/audiolab/pysndfile/_sndfile.c:9632)ValueError:numpy.dtype似乎不是正确的类型对象
我放弃使用audiolab并认为我可以使用"wave"包来读取wav文件.我问了一个关于这个的问题,但人们建议改用scipy.好吧,我决定专注于scipy(我有0.6.0版本).
但是,当我尝试执行以下操作时:
来自scipy.io import wavfile
x = wavfile.read('/ usr/share/sounds/purple/receive.wav')
我得到以下内容:
Traceback (most recent call last):
File "test3.py", line 4, in <module>
from scipy.io import wavfile
File "/usr/lib/python2.5/site-packages/scipy/io/__init__.py", line 23, in <module>
from numpy.testing import NumpyTest
ImportError: cannot import name NumpyTest
Run Code Online (Sandbox Code Playgroud)
所以我问标题中的所有内容:
我有一个波形文件(由输入音频的PyAudio编写),我想将其转换为与声级(振幅)相对应的浮点数据,以进行一些傅立叶变换等...
任何人都有想法将WAVE数据转换为浮点数?
是否可以在 Python 中播放 .wav 文件的特定部分?
我想要一个功能,可以从几秒钟play(file, start, length)
开始播放音频文件,并在几秒钟后停止播放。这可能吗?如果可以,我需要什么库?file
start
length
如何使用PyDub从wave文件的开头和结尾删除静音?
我想我应该逐段访问并检查它是否静音(但我无法做到):/
例如,我在开头,结尾或两者都有一个静音的波形文件(如下所示),我想删除文件开头和结尾处的静音:
例如,我想导入它
sound = AudioSegment.from_wav(inputfile)
Run Code Online (Sandbox Code Playgroud)
为每个声音样本循环以检查它是否静音并标记自波开始后的最后一个静音样本(marker1),然后到达波结束之前的最后一个样本(marker2)并且我可以从两个声音中导出新的声音文件标记
newsound = sound[marker1:marker2]
newsound.export(outputfile, format="wav")
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pydub,但是当我使用 AudioSegment 将它导入 python 时,它会给我一个错误,说它无法识别它。我尝试使用 pip install 并在线搜索。任何帮助?我正在使用 python 2.7
from pydub import AudioSegment
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我需要一些方法比较2个声音,如果它们匹配与否,我知道Voice Recognizer是一种方法,但是因为(我认为)它需要首先将声音转换为字符串,它除了语音识别器支持的语言之外,它不会适合其他语言....任何想法?就像以前的旧式手机一样,语音标签只是将语音输入与之前在设置过程中记录的语音进行比较
例如,我如何在 Windows(32 位和 64 位,最高为 Windows 7)上以给定的幅度和给定的频率构成(例如,由 2 kHz 和 3 kHz 的频率组成)播放声音?
(本机我的意思是不使用外部库。)
我相信这需要waveOutWrite方法,但我不知道它是如何工作的。
我正在研究一个项目,该项目涉及使用波形文件查看音高/频率随时间的变化(我是MATLAB的新手,但不是编程).我能够看到时间幅度图和频率幅度(在FFT之后)图,但是我如何能够隔离频率并在每个时间点显示它?
码:
filename = '/Users/Username/Sample_1.wav'
[y, fs] = wavread(filename);
y = y(:,1);
dt = 1/fs;
t = 0:dt:(length(y)*dt)-dt;
plot(t,y); xlabel('Seconds'); ylabel('Amplitude');
transformed = fft(y);
mag = abs(transformed);
plot(mag);
Run Code Online (Sandbox Code Playgroud) 这让我感到头疼一天,但是因为我已经弄清楚了,所以我想把它贴在某个地方以防它有用.
我正在使用python的wave模块将数据写入wave文件.我不使用scipy.io.wav文件,因为数据可以是一个巨大的向量(16kHz的音频小时数),我不想/不能一次加载到内存中.我的理解是scipy.io.wavfile只为你提供了全文件接口,而wave可以让你在缓冲区中读写.如果我错了,我很乐意纠正.
我遇到的问题归结为如何将float数据转换为wave.writeframes函数的字节.我的数据没有以正确的顺序写入.这是因为我使用numpy.getbuffer()函数将数据转换为字节,这不符合数据的方向:
x0 = np.array([[0,1],[2,3],[4,5]],dtype='int8')
x1 = np.array([[0,2,4],[1,3,5]],dtype='int8').transpose()
if np.array_equal(x0, x1):
print "Data are equal"
else:
print "Data are not equal"
b0 = np.getbuffer(x0)
b1 = np.getbuffer(x1)
Run Code Online (Sandbox Code Playgroud)
结果:
Data are equal
In [453]: [b for b in b0]
Out[453]: ['\x00', '\x01', '\x02', '\x03', '\x04', '\x05']
In [454]: [b for b in b1]
Out[454]: ['\x00', '\x02', '\x04', '\x01', '\x03', '\x05']
Run Code Online (Sandbox Code Playgroud)
我假设字节的顺序由内存中的初始分配决定,因为numpy.transpose()不会重写数据而只返回一个视图.但是,由于这个事实被numpy数组的接口所掩盖,所以在知道这是问题之前调试它是一个很糟糕的事情.
一个解决方案是使用numpy的tostring()函数:
s0 = x0.tostring()
s1 = x1.tostring()
In [455]: s0
Out[455]: '\x00\x01\x02\x03\x04\x05'
In [456]: s1
Out[456]: '\x00\x01\x02\x03\x04\x05'
Run Code Online (Sandbox Code Playgroud)
对于首先说tostring()函数的人来说,这可能是显而易见的,但不知怎的,我的搜索并没有挖掘出任何关于如何格式化整个numpy数组以进行波形文件编写而不是使用scipy.io.wavfile的文档.所以这就是.只是为了完成(请注意,"功能"最初是n_channels x …
第一次在这里发帖,让我们看看这是怎么回事。
我试图用 python 编写一个脚本,它会在 wav 文件的开头添加一秒钟的静音,但到目前为止没有成功。
我试图做的是在 wav 标头中读取,然后使用 wave 模块在开头添加一个 \0 ,但这并不能很好地工作。这是基于这里的代码http://andrewslotnick.com/posts/audio-delay-with-python.html
import wave
from audioop import add
def input_wave(filename,frames=10000000): #10000000 is an arbitrary large number of frames
wave_file = wave.open(filename,'rb')
params=wave_file.getparams()
audio=wave_file.readframes(frames)
wave_file.close()
return params, audio
#output to file so we can use ipython notebook's Audio widget
def output_wave(audio, params, stem, suffix):
#dynamically format the filename by passing in data
filename=stem.replace('.wav','_{}.wav'.format(suffix))
wave_file = wave.open(filename,'wb')
wave_file.setparams(params)
wave_file.writeframes(audio)
# delay the audio
def delay(audio_bytes,params,offset_ms):
"""version 1: delay after 'offset_ms' …
Run Code Online (Sandbox Code Playgroud)