5

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

  • 将输入音频信号分成帧。
  • 带汉明窗的乘法框架
  • 计算帧 sqrt(real^2 + img^2) 的 FFT 和幅度
  • 通过谐波积谱找到基频(峰值)
  • 将峰值的频率(bin 频率)转换为音符(例如 ~440 Hz 是 A4)

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

我不是很懂音乐,所以根据我所拥有的,我可以根据从基频获得的信息来生成旋律与输入(乐器、语音、乐器+语音)相似的声音吗?如果没有,我可以使用我目前拥有的代码尝试其他什么想法。

谢谢!

4

4 回答 4

5

这在很大程度上取决于您要使用的音乐内容 - 提取单声道录音(即单个乐器或声音)的音高与从复音混合物中提取单个乐器的音高(例如提取音高)不同和弦录音中的旋律)。

对于单声道音高提取,您可以尝试在时域和频域中实现各种算法。几个示例包括 Yin(时域)和 HPS(频域),维基百科中提供了有关两者的更多详细信息的链接:

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

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

于 2013-01-24T13:58:56.637 回答
3

您可能不想从 FFT 中挑选峰值来计算音高。您可能想使用自相关。我在这里写了一个非常相似的问题的长答案:Cepstral Analysis for pitch detection

于 2012-04-01T06:05:05.680 回答
3

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

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

于 2011-11-28T05:44:53.597 回答
1

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

  1. 音乐本质上是动态的。这意味着音乐中存在的每个声音都由不同的静音、起音、延音、衰减和再次静音的时期调制,也称为声音的包络。

  2. 乐器音符和人声音符不能通过单一音调正确合成。这些音符必须由基音和许多谐波合成。

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

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

  5. 从最终混音录音中分析提取单个乐器或人声是一个非常困难的问题,您的方法没有解决该问题,因此您的方法无法正确解决问题 1-4。

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

如何摆脱这种僵局取决于工作的目的是什么,这是 OP 没有提到的。

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

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

最后,您的合成听起来像随机的哔哔声,原因如下:

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

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

  3. 您不会尝试合成检测到的音符的包络,也不能,因为无法根据您的分析获取包络信息。

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

要了解音符的复杂性,请查看以下参考资料:

乐器频谱到 102.4 KHz

乐器音符谱及其时域包络

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

所有这些音乐元素共同使得对自主音乐转录的严格分析方法极具挑战性。

于 2013-02-08T09:07:39.390 回答