音频 – 在智能手机上音符的间距识别

使用有限的资源,如较慢的CPU,代码大小和RAM,如何最好地检测音符的音高,类似于电子或软件调谐器会做什么?

我应该使用:

亲吻FFT
> FFTW
>离散小波变换
>自相关
>零交叉分析
>八度音阶滤波器

其他?

简单来说,我想要做的是在任何(合理的)仪器上识别单个音符,在中间C到两个八度以下的两个八度。我想要在20%的半音 – 换句话说,如果用户玩得太平坦或太尖锐,我需要区分。但是,我不需要调整所需的精度。

如果您不需要太多精度,则FFT可能就足够了。 Window音频首先让你得到明确的高峰,然后找到第一个显着的高峰。

Bin宽度=采样率/ FFT大小:

基本原理range from 20 Hz至7 kHz,因此采样率为14 kHz就足够了。下一个“标准”采样率为22050Hz。

然后,FFT大小由您想要的精度确定。 FFT输出在频率上是线性的,而乐音在频率上是对数的,所以最差的情况下的精度将在低频。对于20 Hz的20%的半音,您需要宽度为1.2 Hz,这意味着FFT长度为18545.两个的下一个功率是215 = 32768.这是1.5秒的数据,并将笔记本电脑的处理器3毫秒计算。

这对于具有“missing fundamental”的信号将不起作用,并且发现“第一重要”峰值有些困难(自harmonics are often higher than the fundamental起),但您可以找出适合您情况的方法。

Autocorrelation and harmonic product spectrum更好地找到一个波浪的真正基础,而不是一个谐波,但我不认为它们与inharmonicity一样好,大多数乐器如钢琴或吉他都是不和谐的(谐波比他们应该是微不足道的)。这真的取决于你的情况。

此外,您可以使用Chirp-Z transform,仅在感兴趣的特定频段内进行计算,从而节省更多的处理器周期。

为了进行比较,我已经写了a few different methods in Python

http://stackoverflow.com/questions/1457228/pitch-recognition-of-musical-notes-on-a-smart-phone

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:音频 – 在智能手机上音符的间距识别