我想使用PortAudio(PyAudio)录制声音(语音)并在屏幕上输出相应的声波。像我一样无望,我无法从音频流中提取频率信息,因此我可以用Hz /时间形式绘制它。
这是一个示例代码段,记录并播放录制的音频五秒钟,以防它有助于:
p = pyaudio.PyAudio()
chunk = 1024
seconds = 5
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=44100,
input=True,
output=True)
for i in range(0, 44100 / chunk * seconds):
data = stream.read(chunk)
stream.write(data, chunk)
我希望从上面的变量“data”中提取所需的信息。 (或者使用PortAudio或其他带有Python绑定的库的其他高级方法。)
我非常感谢任何帮助!甚至模糊相关的音频分析智慧的花絮也值得赞赏。 :)
答案 0 :(得分:4)
你想要的可能是音频数据的傅立叶变换。有几个包可以为您计算。 scipy
和numpy
是其中两个。它通常被命名为“快速傅里叶变换”(FFT),但这只是算法的名称。
以下是它的用法示例:https://svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py
答案 1 :(得分:1)
如果您希望在频域和时域进行分析,傅里叶变换对您没有多大帮助。您可能想看看“小波变换”。有一个名为pywavelets的包... http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt