我想从歌声中提取音高。有问题的轨道仅包含一个声音,没有其他声音。
我想知道给定时间点的响度和感知的音高频率。所以类似于以下内容:
0.0sec 400Hz -20dB
0.1 秒 401Hz -9dB
0.2秒 403Hz -10dB
0.3秒 403Hz -10dB
0.4 秒 404Hz -11dB
0.5秒 406Hz -13dB
0.6 秒 410Hz -15dB
0.7 秒 411Hz -16dB
0.8 秒 409Hz -20dB
0.9 秒 407Hz -24dB
1.0秒 402Hz -34dB
我怎样才能实现这样的输出?我对相对于特定音符值的频率轻微变化感兴趣。我有一些 DSP 知识,可以用 C++ 和 python 编程,但如果可能的话,我想避免重新发明轮子。
最佳答案
请注意,以 Hz 为单位的频率的轻微变化和感知的音高可能不是一回事。感知的音高分辨率似乎随绝对频率、持续时间和响度而变化。如果你想要比这更高的准确性,可能会有一些关于估计每个声门闭合之间的时间的研究论文(可能使用反卷积或模式匹配技术),这会给你某种音高周期。最简单的音高估计可能是某种形式的加权自相关,有很多固定算法和代码可供使用。
由于 dB 是对数刻度,因此该测量值可能更接近于感知响度,但必须在某些测量持续时间内使用一些感知频率响应曲线进行频谱加权。
似乎有关于这两个主题的研究论文,以及许多关于人类音频感知以及常见音频 DSP 技术的教科书。
关于audio - 从歌声中提取音高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5324149/