3

我正在尝试编写一个简单的调谐器(不,不是制作另一个调谐器应用程序),并且正在查看 AurioTouch 示例源(有没有人试图评论这段代码??)。

我担心的是,在查看频域图时,aurioTouch 似乎实际上并不能很好地工作。我在乐器上弹奏一个音符,但我没有看到一组有序的、小的频率集,其中一个弦峰在音符的适当频率处出现。

有没有人使用过 aurioTouch 足以知道底层代码是功能性的还是只是一个粗略的样本?

我的其他选择是使用 FFTW 或 KISS FFT。有没有人有这方面的经验?

谢谢。

4

4 回答 4

9

你期待错了!!

不是图书馆的错

无论库是否正确生成它,您都在寻找一种在现实生活中很少实际存在的模式。只有电子产生的完美正弦波才会导致频率中出现甚至部分离散的“尖峰”。图形。如果您不相信它,请尝试在 winamp 或媒体播放器中启动“频谱分析器”可视化。这不是PC的错。

真正的声波是复杂的动物

在你的脑海中想象一个锯齿波或方波。那些急转弯 - 波上的拐角或点,对于 FFT 甚至是真正的傅立叶来说,看起来像是大量的高次谐波。如果您曾经在示波器上看到过真正的“方波/锯齿波”,或者甚至是由应该产生正弦波的仪器产生的“正弦波”,那么请看看刚才的所有尖角和缝隙一个音符(如果您没有示波器,请大胆地放大波浪 - 放大得越多,您看到的音符就越高)。是的,这些偏差都算作频率。

有时在频谱分析中很难区分一个音符和整个管弦乐队之间的区别。

但我听到的是单音!

那么耳朵是怎么做到的呢?它考虑了整个波形。然后你的下脑就输入的内容向你的上脑撒谎:一个音符,而不是一堆泛音。

你不能完全做到这一点,但你可以通过“训练”来近似它。

近似:建立一些智能

在仪器上播放音符并“保存”频率图。对几个频率范围内的音符执行此操作,或者更好的是所有音符。

然后通过将保存的图表乘以 2^(1/12)(或 1/24 为 1/4 步等)来插入音符以填补空白(以 1/2 或 1/4 步长)。

弄清楚如何将它们存储在可快速搜索的数据结构中,例如 BST 或 trie。只有它必须返回“这个分数有多接近”。它还必须通过频率比例来识别匹配,以防它以不同的数量出现。

使用智能

下次您要从该乐器中查找音符时,只需获取“听到的”频率图并在该数据结构中找到它。您可以记录几种产生不同波形的仪器并搜索它们。如果有背景声音或多个音符,请选择最接近的匹配。然后,如果您想识别其他音符,请从采样的音符中“减去”找到的频率模式,然后冲洗,重复泡沫。

用你的声音是不行的...

如果你曾经试图通过对着吉他调音器唱歌来给自己调音,你就会知道调音器并没有那么聪明。当然,有些乐器(尤其是人声)确实会在音高上浮动并产生不断变化的波形(即使没有人唱歌)。

你想达到什么目的?

对于“简单”的调谐器应用程序,您不必完全花哨,但如果您不只是制作另一个调谐器应用程序,我猜您实际上想要识别音符(例如,也许您想从收音机里的歌曲;-)

祝你好运。我希望你能找到一个可以处理所有这些垃圾的库,而不必自己动手。

编辑 2017

请注意这个网页:http : //www.feilding.net/sfuad/musi3012-01/html/lectures/015_instruments_II.htm 在页面下方,有各种风琴管的频谱分析。有很多很多的泛音。如果你先用它们“训练”你的应用程序,这些是可以检测到的 - 如果你先用它们“训练”你的应用程序(就像告诉孩子,'这就是单簧管听起来的样子......')

于 2010-07-15T01:10:01.377 回答
4

aurioTouch 看起来很奇怪,因为频率轴是线性的。当 x 轴不是对数刻度(传统上是 log2)时,很难解释 FFT 输出。

如果您不能使用 aurioTouch 的整数 FFT,请查看我的库:http: //github.com/alexbw/iPhoneFFT

它使用双精度,支持多种窗口类型,并实现了Welch 方法(随着时间的推移,它应该为您提供更稳定的光谱)。

@zaph,FFT 确实计算了真正的离散傅里叶变换。它只是一种利用数字信号的按位表示的有效算法。

于 2009-12-05T19:48:46.637 回答
2

FFT 使用频率区间,并且区间频率宽度基于 FFT 参数。要找到一个频率,您需要以至少两倍于样本中最高频率的速率对其进行采样。然后找出循环之间的时间。如果它不是纯频率,这当然会更难。

于 2009-09-20T15:10:57.370 回答
0

我正在使用 Ooura FFT 来计算加速度计数据的 FFT。我并不总是获得正确的光谱。出于某种原因,Ooura FFT 在所有频率上产生了完全错误的结果,频谱幅度为 10^200 级。

于 2010-03-17T15:25:44.623 回答