一尘不染

确定音频样本密钥的算法

algorithm

我对确定音频样本的音乐键很感兴趣。算法将如何(或可能)尝试近似音乐音频样本的键?

Antares Autotune和Melodyne是完成此类任务的两个软件。

谁能给外行一些解释,说明这将如何工作?通过分析和弦进行等的频谱来数学推断歌曲的键

这个话题使我非常感兴趣!

编辑精采的资料和大量的信息可以从对此问题做出贡献的每个人中找到

特别是来自:the_mandrill和DanielBrückner。


阅读 233

收藏
2020-07-28

共1个答案

一尘不染

值得注意的是,这是一个非常棘手的问题,如果您没有信号处理方面的背景(或者对学习它没有兴趣),那么您将面临非常沮丧的时间。如果您希望解决这个问题,那么您会走得很远。我希望您确实对此感兴趣,因为它是一个非常迷人的领域。

最初存在音高识别问题,使用简单的单声乐器(例如语音),使用自相关或谐波和谱等方法(例如,参见Paul
R的链接),该问题相当容易实现。但是,您经常会发现这样做会产生错误的结果:您经常会得到预期的音高的一半或两倍。这被称为基音 周期加倍倍频程误差
,它的出现主要是因为FFT或自相关假设数据随时间具有恒定特性。如果您有人类演奏的乐器,总会有一些变化。

有些人将 识别问题看作是先进行音高识别然后从音高序列中找到键的问题。如果您没有单音高音序列,这将 非常
困难。如果您确实有一个单音高音序列,那么确定琴键仍然不是一种清晰的方法:例如,如何处理半音符,或者确定它是大音调还是小音调。因此,您需要使用类似于Krumhansl的密钥查找算法的方法

因此,鉴于此方法的复杂性,另一种方法是同时查看所有正在演奏的音符。如果您有和弦或不止一种乐器,那么您将拥有一次演奏许多正弦波的丰富频谱。每个音符都由一个基频的多个谐波组成,因此A(在440Hz时)将由440、880、1320的正弦曲线组成。此外,如果您演奏E(音高,请参见此),则为659.25。
Hz 几乎是
是A的一倍半(实际上是1.498)。这意味着A的每3次谐波与E的每2次谐波重合。这就是和弦共享谐音的原因。(顺便说一句,西方和谐之所以起作用的全部原因是命运的怪癖,即2的第12根到7的幂接近1.5)

如果您查看的范围超出了五分之一到大,小和弦及其他和弦的范围,那么您会发现其他比率。我认为许多关键的查找技术会枚举这些比率,然后为信号中的每个频谱峰值填充直方图。因此,在检测到和弦A5的情况下,您期望会在440、880、659、1320、1760、1977处找到峰值。对于B5,它将是494、988、741等。因此,请创建一个频率直方图,信号中的正弦波峰值(例如,来自FFT功率谱)会增加直方图条目。然后,对于每个密钥AG,将直方图中的垃圾箱相加,条目最多的垃圾箱很可能是您的密钥。

那只是一个非常简单的方法,但可能足以找到弹奏或持续的和弦的音调。您还必须将信号切成较小的间隔(例如20ms)并分析每个信号以建立更可靠的估计。

编辑:
如果您想进行实验,那么我建议您下载一个程序包,例如OctaveCLAM,这样可以更轻松地可视化音频数据并运行FFT和其他操作。

其他有用的链接:

2020-07-28