【发布时间】:2010-11-24 03:43:56
【问题描述】:
我正在尝试对用户唱歌进行实时音高检测,但遇到了很多问题。我尝试了很多方法,包括 FFT (FFT Problem (Returns random results)) 和自相关 (Autocorrelation pitch detection returns random results with mic input),但我似乎无法找到任何方法来给出好的结果。谁能建议一种实时音高跟踪的方法或如何改进我已有的方法?我似乎找不到任何用于实时音高检测的好的 C/C++ 方法。
谢谢,
尼尔。
编辑:请注意,我检查了麦克风输入数据是否正确,并且当使用正弦波时,结果或多或少是正确的音高。
编辑:对不起,这已经晚了,但目前,我通过从结果数组和每个索引中取出值来可视化自动收集,并在 X 轴上绘制索引和在 Y 轴上绘制值(两者除以 100000 或其他东西,我使用 OpenGL),将数据插入 VST 主机并使用 VST 插件对我来说不是一个选项。目前,它看起来就像一些随机的点。我做得对吗,或者你能不能给我一些代码来做这件事,或者帮助我理解如何可视化原始音频数据和自相关数据。
【问题讨论】:
-
我怀疑你一直在“做错事”。你有没有从其他问题中解决过底层问题?整个“随机结果”听起来就像你还没有让这些方法正常工作。
-
在我看来,这个问题与在“摇滚乐队”游戏中为人声检测音高非常相似——而且他们似乎让它工作得很好。这让我相信一定有办法做到这一点。只是通过阅读有关音高检测的维基百科文章,这似乎不是一个微不足道的问题。如果您找到好的方法,我们希望您能在这里发布答案!
-
为了调试,试试吹口哨。口哨的声音包含一个非常强的频率,几乎没有泛音。如果您还没有这样做,您还应该可视化 FFT 的输出。
-
我必须同意 Thomas 关于可视化的观点。绘制图表是了解您正在分析的声音属性的好方法。
-
...或者在自相关的情况下,每个可能时期的相关系数。
标签: audio signal-processing fft pitch pitch-tracking