关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
2年前关闭。
Improve this question
我正在创建一个音高检测程序,该程序从帧的 FFT 获得的功率谱中提取基频。这是我到目前为止:
现在,程序为每一帧生成一个值从 0 到 87 的整数。根据我找到的公式here,每个整数对应一个钢琴音符.我现在试图通过根据计算出的音符合成声音来模仿输入信号中的旋律。我试图简单地生成幅度和频率对应于基频的正弦波,但结果听起来与原始声音完全不同(几乎听起来像随机的哔哔声)。
我不太了解音乐,所以根据我所拥有的,我可以根据我从基频获得的信息生成与输入(乐器、语音、乐器 + 语音)相似的旋律的声音吗?如果没有,我可以尝试使用我目前拥有的代码还有哪些其他想法。
谢谢!
最佳答案
这在很大程度上取决于您要使用的音乐内容 - 提取单声道录音(即单个乐器或声音)的音高与从复音混合中提取单个乐器的音高(例如提取和弦录音中的旋律)。
对于单声道音高提取,您可以尝试在时域和频域中实现各种算法。几个例子包括 Yin(时域)和 HPS(频域),维基百科中提供了有关两者的更多详细信息的链接:
但是,如果您想从和弦素材中提取旋律,这两种方法都不会奏效。从和弦音乐中提取旋律仍然是一个研究问题,没有一套简单的步骤可以遵循。研究社区提供了一些工具供您试用(但仅限于非商业用途),即:
最后一点,在合成您的输出时,我建议您合成您提取的连续音高曲线(最简单的方法是每 X ms(例如 10)估计音高并合成每 10 次改变频率的正弦波ms,确保连续相)。这将使您的结果听起来更自然,并且您可以避免将连续音高曲线量化为离散音符时所涉及的额外错误(这本身就是另一个问题)。
关于signal-processing - FFT 音高检测 - 旋律提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288547/