我正在开发一个应用程序,它对音频进行采样,并需要对这些数据进行实时处理(FFT和谐波乘积谱)。
我需要使用44100赫兹的采样率和0.5Hz的频率分辨率,这意味着我需要88200采样前快速傅立叶变换。这需要大约2秒的时间来捕获,因为它是采样率的两倍;然而,在第一个样本之后,我确实通过使用循环缓冲区对采样进行了显著的改进,并且从那时起只读取了一半的样本。
不幸的是,性能仍然很低,并且有相当多的延迟。这是一个大问题,因为应用程序需要及时地做出响应,以便在发生时进行输入。
有谁对我如何改善这方面的表现有任何建议吗?我认为主要的问题在于对大样本的要求,如果有一些方法我可以减少读取音频的数量,同时保持相同的准确性,那就更好了。线程在这里有用吗?
编辑
如果这有助于了解,我尝试做实时的F0估计从电吉他输入,以及多F0估计和弦匹配。我有这样做的方法,而且非常准确,但是对于一个uni项目来说,我没有足够的时间去研究FFT以外的其他方法。真的,我只是希望有一种方法来加速取样过程。
发布于 2012-03-27 13:25:34
由于您需要捕获2s的音频,这将设置一个较低的延迟。即使你有50%的重叠,你仍然有一个最小的延迟1s。FFT和其他处理只会增加这一点,但希望不会增加大量(否则使用更快的FFT库)。减少延迟的唯一方法是牺牲频率分辨率。
发布于 2012-03-27 16:51:30
使用FFT方法可以给你一个时频交换。如果您想要更低的延迟,您将不得不使用较少的数据,这与FFT (或较短或零填充)将给您一个较低的频率估计。
零填充只会给你一个高质量的插值。但是,这可能提供一个更好的峰值频率估计,而不是仅仅使用较短FFT的峰值宾的中心。
https://stackoverflow.com/questions/9889447
复制相似问题