我想做的事情看起来很简单:我想确切地知道在给定时间 .wav 文件中有哪些频率;即“从时间 n 毫秒到 n + 10 毫秒,声音的平均频率为 x 赫兹”。我见过人们谈论傅里叶变换和 Goertzel 算法,以及各种模块,我似乎无法弄清楚如何去做我所描述的事情。
我正在寻找的是像这个伪代码这样的解决方案,或者至少是一个可以做一些类似于伪代码的事情的解决方案:
import some_module_that_can_help_me_do_this as freq
file = 'output.wav'
start_time = 1000 # Start 1000 milliseconds into the file
end_time = 1010 # End 10 milliseconds thereafter
print("Average frequency = " + str(freq.average(start_time, end_time)) + " hz")
我没有数学背景,所以我不想了解实现细节。
原文由 Dante Falzone 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你想检测声音的 音调(你似乎这样做了),那么就 Python 库而言,你最好的选择是 aubio 。请参阅此 示例 以进行实施。
请务必查看有关音调检测方法的 文档。
我还认为您可能对在不使用任何特殊库的情况下估计平均频率和其他一些音频参数感兴趣。让我们只使用 numpy 吧!这应该可以让您更好地了解如何计算此类音频功能。它基于 seewave 包中的 specprop 。检查文档以了解计算特征的含义。