从歌声中提取音高

Posted

技术标签:

【中文标题】从歌声中提取音高【英文标题】:Extracting pitch from singing voice 【发布时间】:2011-03-16 10:43:57 【问题描述】:

我想。有问题的曲目仅包含一个声音,没有其他声音。

我想知道给定时间点的响度和感知音高频率。所以类似于以下内容:

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 编程,但如果可能的话,我想避免重新发明***。

【问题讨论】:

已经有很多关于音高检测主题的问题和答案,对于乐器和语音/唱歌等。您需要查看自相关, 倒谱分析等。尝试阅读之前的一些问题,如果还有什么不清楚的地方,请返回具体问题。 有一个关于音乐信息检索 (area51.stackexchange.com/proposals/36093/…) 的 Area51 提案正在进行中,这个问题非常适合。 【参考方案1】:

请注意,频率的细微变化(Hz)和感知音高可能不是一回事。感知的音高分辨率似乎随绝对频率、持续时间和响度而变化。如果您想要比这更高的准确性,可能会有一些关于估计每个声门闭合之间的时间的研究论文(可能使用反卷积或模式匹配技术),这会给您某种音高周期。最简单的音高估计可能是某种形式的加权自相关,有很多固定算法和代码可供使用。

由于 dB 是对数标度,因此该测量值可能更接近于感知响度,但必须在某些测量持续时间内使用一些感知频率响应曲线进行频谱加权。

似乎有关于这两个主题的研究论文,以及许多关于人类音频感知以及常见音频 DSP 技术的教科书。

【讨论】:

【参考方案2】:

我建议你阅读这篇文章 http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf .这是最简单的音高检测方法之一,而且效果很好。 此外,为了测量信号的瞬时功率,您只需将信号的绝对值除以 1/√2(给出 RMS 值),然后对其进行平滑处理(通常是一阶低通滤波器)。我希望这有帮助。祝你好运!

【讨论】:

以上是关于从歌声中提取音高的主要内容,如果未能解决你的问题,请参考以下文章

如何将提取的音高值保存在 csv 文件中?

从 MIDI 中提取音符开始

使用 tarosdsp 提取多个音频特征

用于音高检测的倒谱分析

虚拟偶像的歌声原来是这样生成的!

使用 music21 显示 Mid 文件中的 midi 音高数字