我正在尝试从音频流中提取音高数据。从我所看到的看来,FFT看起来就是最好的算法。FFT算法:什么是IN/OUT? (重新:实时音高检测)
而不是直接挖掘数学,有人能帮我理解这个FFT算法的作用吗?
请不要说像'FFT从原始信号中提取频率数据。我需要更高层次的细节。
我通过什么,我该退出什么?
一旦我清楚地理解接口,这将帮助我理解实现。我需要传递一个音频缓冲区,我需要告诉它每个计算使用多少个字节(比如说这个缓冲区中最近的1024个字节)。也许我需要指定我希望它检测的音高范围。现在它会传回什么?一组频率箱?这些是什么?
(编辑:)我已经找到了C++算法来使用(如果我只能理解它)
Performous提取从麦克风球场。代码也是开源的。下面是对该算法做什么的描述,来自编码它的人。
- PCM输入(带缓冲)
- FFT(1024个样本的时间,从缓冲器的前后来除去200个样本)
- 重新分配方法(上日FFT,这是200个样本更早)
- 过滤峰(这部分可以做的更好,甚至离开了)
- 峰组合成组的谐波(我们称之为组合音)
- 音的时域滤波(更新一组音调检测ED较早而不是简单地使用新检测到的)
- 挑选最佳演唱音(频率范围,加权,可以使用谐波阵列还,但我不认为我们这样做)的
但可能有人帮助我明白这是如何工作的?什么是从FFT发送到重新分配方法?
许多重复,例如[使用FFT的实时音高检测](http://stackoverflow.com/questions/1466968/real-time-pitch-detection-using-fft) – 2010-11-01 10:23:43
还要注意,'pitch'与'frequency'不同 - 确保你了解差异,因为如果你想测量其中一种,你的解决方案将会非常不同。 – 2010-11-01 10:29:13