AurioTouch&用于乐器调谐器的FFT

时间:2009-09-18 22:17:59

标签: iphone audio fft

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

我担心的是,在查看频域图时,aurioTouch似乎并没有真正起作用。我在一个乐器上演奏一个单音符,我没有看到一个很好的有序,小的频率组,在音符的适当频率上有一个弦乐峰值。

是否有人使用aurioTouch足以知道底层代码是否有效或者它是否仅仅是原始样本?

我有其他选择使用FFTW或KISS FFT。任何人都有这方面的经验吗?

感谢。

4 个答案:

答案 0 :(得分:9)

你期待错误的事情!!

不是库的错误

图书馆是否正确生成,你正在寻找一种在现实生活中很少存在的模式。只有完美的正弦波,电子产生,才能在频率中产生均匀的离散的“尖峰”。图形。如果您不相信它会尝试在winamp或媒体播放器中启动“频谱分析仪”可视化。这不是PC的错误。

真正的声波是复杂的动物

想象一下你脑海中的锯齿波或方波。那些急转弯 - 波浪上的角点或点,看起来像FFT的高次谐波,甚至是真正的傅立叶。如果你曾经在一个示波器上看过一个真正的“sqaure wave / sawtooth”,或者甚至是一个产生正弦波的乐器产生的“正弦波”,那就看看所有尖锐的角落和缝隙一个音符(如果你没有一个音域只是以大胆的方式放大波形 - 你缩放得越多,你看的音符越高)。是的,这些偏差都算作频率。

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

但是我听到了单个笔记!

那么耳朵怎么做呢?它考虑整个波形。那么你的下脑就会向你的大脑说谎输入是什么:一个音符,而不是一堆泛音。

你不能完全做到,但你可以通过'训练'来估算它。

近似:构建一些智能

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

然后通过将该仪器的保存图形乘以2 ^(1/12)(或1/4步长的1/24等)来插入音符以填充间隙(1/2或1/4步) )。

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

使用智能手机

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

你的声音不会起作用......

如果你曾经试着通过唱成吉他调音器来调整自己,你就会知道调音师并不聪明。当然,有些乐器(声音esp)真的漂浮在球场周围并产生不断变化的波形(即使没有人唱歌)。

你想要完成什么?

你不必完全得到一个'简单'调谐器应用程序的幻想,但如果你不是只做另一个调谐器应用程序,我猜你真的想要识别笔记(例如,也许你想自动生成来自收音机歌曲的midi文件; - )

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

编辑2017

请注意此网页:http://www.feilding.net/sfuad/musi3012-01/html/lectures/015_instruments_II.htm 在页面下方,有各种风琴管道的频谱分析。有很多很多的含义。这些都可以通过足够的工作来检测 - 如果你先用他们“训练”你的应用程序(就像告诉孩子一样,'这就是单簧管的声音......')

答案 1 :(得分:4)

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

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

它使用双精度,支持多种窗口类型,并实现Welch's method(随着时间的推移,它可以为您提供更稳定的光谱)。

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

答案 2 :(得分:2)

FFT使用频率区间,区间频率宽度基于FFT参数。要查找频率,您需要记录采样的速率至少是样本中最高频率的两倍。然后找出周期之间的时间。如果它不是一个纯粹的频率,那当然会更难。

答案 3 :(得分:0)

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