Closed. This question needs to be more focused。它当前不接受答案。












想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。

2年前关闭。



Improve this question




我正在创建一个音调检测程序,该程序将从帧的FFT获得的功率谱中提取基本频率。这是我到目前为止的内容:
  • 将输入音频信号分成帧。
  • 将框架与汉明窗相乘
  • 计算帧sqrt(real ^ 2 + img ^ 2)的FFT和幅度
  • 通过谐波乘积频谱
  • 找到基频(峰值)
  • 将峰值频率(bin频率)转换为音符(例如〜440 Hz为A4)

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

    我不是很了解音乐,因此我只能根据从基本频率获得的信息来产生具有类似于输入(乐器,声音,乐器+声音)的旋律的声音吗?如果没有,我可以尝试使用目前拥有的其他什么想法。

    谢谢!

    最佳答案

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

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

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

  • 但是,如果您想从复音 Material 中提取旋律,那么这两种方法都无法正常工作。从和弦音乐中提取旋律仍然是一个研究问题,没有简单的步骤可循。研究社区提供了一些您可以尝试的工具(尽管仅用于非商业用途),即:
  • MELODIA:http://mtg.upf.edu/technologies/melodia

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

    09-10 05:42
    查看更多