繁体   English   中英

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

[英]Get the amplitude at a given time within a sound file?

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

我目前正在将Python与Snack Sound Toolkit配合使用,并且可以记录来自麦克风的音频,但是我需要知道该音频的音量。 我可以将录音保存到文件中,并使用另一个工具包从音频文件中的给定时间点读取幅度,或者尝试在音频进入时获取幅度(这更容易出错)。

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

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

从参考:

dBPowerSpectrum()

计算声音的对数FFT功率谱(以start选项中指定的样本数),并返回dB值列表。 有关其他选项的说明,请参见本节。 可以选择使用end选项指定终点。 在这种情况下,结果是指定范围内连续FFT的平均值。 它们的默认间隔是从fftlength中获取的,但是可以使用skip选项更改该间隔,该选项可告诉您每步移动FFT窗口多少个点。 选项:

编辑:我假设当您说振幅时,您是指声音对人的感觉有多“响亮”,而不是时域电压(由于正弦波的积分将为0,因此在整个长度上可能为0)例如:10 * sin(t)大于5 * sin(t),但它们的平均值随时间变化为0(无论如何,您都不希望向扬声器发送非AC电压)。

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

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

当然,这个问题的措辞很差……但是这个答案使事情变得比必要的复杂得多。 我假设“振幅”是指感知到的响度。 从技术上讲,(PCM)音频流中的每个样本都代表给定时间片段的信号幅度。 要获得响度表示,请尝试简单的RMS计算:

RMS

| K <

我不确定这是否会有所帮助,但是Skimpygimpy提供了将WAVE文件解析为python序列并返回的工具,您可以使用它直接检查波形样本并做自己喜欢的事情。 您将必须阅读一些资料,这些子组件没有记录在案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM