FFT音调检测-旋律提取



我正在创建一个基音检测程序,该程序从从帧的FFT获得的功率谱中提取基频。这是我目前所看到的:

    将输入的音频信号分成帧。
  • 用Hamming窗口叠帧
  • 计算帧的FFT和幅度sqrt(real^2 + img^2)
  • 通过谐波积谱求基频(峰值)
  • 将峰值(本频)的频率转换为注释(例如~440 Hz为A4)

现在程序为每一帧生成一个值从0到87的整数。根据我在这里找到的公式,每个整数对应一个钢琴音符。我现在试着模仿输入信号中的旋律,根据计算出来的音符合成声音。我试图简单地产生一个振幅和频率对应于基频的正弦波,但结果听起来一点也不像原始声音(几乎听起来像随机的哔哔声)。

我真的不懂音乐,所以基于我所拥有的,我能根据我从基本频率得到的信息,产生一个与输入(乐器,声音,乐器+声音)相似的旋律的声音吗?如果没有,我可以尝试使用我目前拥有的代码的其他想法。

谢谢!

这在很大程度上取决于你想要处理的音乐内容-提取单声道录音(即单个乐器或声音)的音高与从多声道混合中提取单个乐器的音高不同(例如从多声道录音中提取旋律的音高)。

对于单音音高提取,您可以尝试在时域和频域实现各种算法。一些例子包括Yin(时域)和HPS(频域),在wikipedia中提供了两者的进一步详细信息的链接:

  • http://en.wikipedia.org/wiki/Pitch_detection_algorithm

然而,如果你想从复调材料中提取旋律,这两种方法都行不通。从复调音乐中提取旋律仍然是一个研究问题,没有一套简单的步骤可以遵循。有一些工具是由研究社区提供的,你可以尝试一下(但仅限于非商业用途),即:

  • 笛管音栓:http://mtg.upf.edu/technologies/melodia

作为最后的注意,当合成你的输出时,我建议合成你提取的连续音高曲线(最简单的方法是每X毫秒估计一次音高(例如10),并合成每10毫秒改变频率的正弦波,确保连续相位)。这将使你的结果听起来更加自然,并且你避免了将连续音高曲线量化为离散音符所带来的额外错误(这是另一个问题)。

您可能不想从FFT中挑选峰值来计算音高。你可能想使用自相关。我在这里写了一个非常类似的问题的长答案:音高检测的倒谱分析

你的方法可能适用于合成音乐,使用同步的音符来适应你的fft帧时间和长度,并且只使用音符的完整频谱与你的HPS音高估计器兼容。对于普通音乐来说,这些都不是真的。

对于更普遍的情况,自动音乐转录似乎仍然是一个研究问题,没有简单的5步解决方案。音高是人类的一种心理声学现象。人们会听到可能存在也可能不存在于本地频谱中的音符。HPS音高估计算法比使用FFT峰值可靠得多,但对于许多类型的音乐声音仍然可能失败。此外,任何跨越音符边界或瞬态的帧的FFT可能不包含清晰的单个音高来估计。

您的方法不适用于任何一般音乐示例,原因如下:

  1. 音乐本质上是动态的。这意味着音乐中的每一个声音都是由不同的沉默、攻击、维持、衰减和再次沉默的时期调制的,也被称为声音的包络。

  2. 乐器音符和人声音符不能被一个单音合成。这些音符必须由一个基本音和多个谐波合成。

  3. 然而,合成乐器音符或人声音符的基音和谐波是不够的,还必须合成音符的包络,如上文1所述。

  4. 此外,要合成音乐中的旋律段落,无论是器乐还是声乐,必须综合上述1-3项,对于段落中的每个音符,还必须综合每个音符相对于段落开头的时间。

  5. 从最终混音录音中分析提取单个乐器或人声是一个非常困难的问题,而你的方法并没有解决这个问题,所以你的方法不能正确解决问题1-4。

简而言之,任何试图通过严格的分析方法从音乐录音的最终混音中提取出近乎完美的音乐转录的方法,往坏里说几乎肯定是注定要失败的,往好里说则属于高级研究领域。

如何从这个僵局中继续下去取决于工作的目的是什么,这是OP没有提到的。

这项工作将用于商业产品,还是它是一个爱好项目?

如果是商业作品,则需要使用各种进一步的方法(昂贵的或非常昂贵的),但是这些方法的细节取决于作品的目标。

作为结束的注意事项,您的合成听起来像随机嘟嘟声,原因如下:

  1. 你的基音检测器与你的滚动FFT帧的时间相关联,这实际上在每个滚动FFT帧的开始时间产生一个可能假的基音。

  2. 为什么检测到的基频可能是假的?因为你任意地将音乐样本剪切到(FFT)帧中,因此可能会截断许多同时发出声音的音符,从而扭曲音符的频谱特征。

  3. 你没有试图合成检测到的音符的信封,你也不能,因为没有办法根据你的分析获得信封信息。

  4. 因此,合成的结果可能是一系列纯正弦啁啾,由滚动FFT帧的δ -t在时间上间隔。每个啁啾可能具有不同的频率,具有不同的包络幅度,并且包络可能是矩形的。

要了解音符的复杂本质,请看一下这些参考文献:

102.4 KHz的乐器谱

乐器音符谱及其时域包络

特别观察组成每个音符的许多纯音,以及每个音符的时域包络的复杂形状。多个音符相对于彼此的可变时间是音乐的另一个重要方面,就像典型音乐中的复调(多个声音同时发声)一样。

所有这些音乐元素合在一起,使严格的分析方法来自主音乐转录,极具挑战性。

相关内容

  • 没有找到相关文章

最新更新