获取声音文件中给定时间的振幅?

时间:2009-04-12 22:36:30

标签: python audio input microphone amplitude

我正在开展一个项目,我需要知道从计算机上的麦克风传来的声音幅度。

我目前正在使用带有Snack Sound Toolkit的Python,我可以录制来自麦克风的音频,但我需要知道音频有多大声。我可以将录音保存到文件中,并使用另一个工具包从音频文件中读取给定时间点的振幅,或者在音频进入时尝试获取振幅(这可能更容易出错)。

是否有任何图书馆或示例代码可以帮助我解决这个问题?我一直在寻找,到目前为止,Snack Sound Toolkit似乎是我最大的希望,但似乎没有办法直接获得振幅。

3 个答案:

答案 0 :(得分:3)

查看Snack Sound Toolkit示例,似乎有一个dbPowerSpectrum函数。

参考文献:

  

dBPowerSpectrum()

     

计算声音的对数FFT功率谱(在启动选项中给出的样本编号)并返回dB值列表。有关其余选项的说明,请参阅部分项。可选地,可以使用结束选项给出结束点。在这种情况下,结果是指定范围内连续FFT的平均值。它们的默认间距取自fftlength,但可以使用skip选项更改,该选项指示每步移动FFT窗口的点数。选项:

编辑:我假设当你说振幅时,你的意思是声音对人类来说是多么“响亮”,而不是时域电压(由于正弦波的积分正在进行,整个长度可能为0)例如:10 * sin(t)大于5 * sin(t),但它们随时间的平均值为0.(您不希望无论如何都要向扬声器发送非交流电压))。

要获得声音的大小,您需要确定每个频率分量的幅度。这是通过傅立叶变换(FFT)完成的,它将声音分解为频率分量。 dbPowerSpectrum函数似乎给出了每个频率的幅度列表(请原谅我,如果这与功率谱的确切定义不同)。要获得总音量,您可以将整个列表相加(这将是接近的,xept它仍然可能与感知的响度不同,因为人耳本身具有频率响应)。

答案 1 :(得分:1)

我完全不同意CookieOfFortune的这个“答案”。

被批准,这个问题的措辞很差......但是这个答案使事情变得比必要的复杂得多。我假设通过'幅度'你的意思是感知响度。从技术上讲,(PCM)音频流中的每个样本表示给定时间片的信号幅度。要获得响度表示,请尝试简单的RMS计算:

RMS

| K<

答案 2 :(得分:0)

我不确定这是否会有所帮助,但是 skimpygimpy 提供将WAVE文件解析为python的工具 序列和返回 - 你可以使用它 直接检查波形样本并做 你喜欢什么。你将不得不阅读一些来源, 这些子组件没有记录。