我正在开发一个应用程序,用于采样音频并需要对此数据进行实时处理(FFT和谐波产品频谱)。Java频率分析性能
我需要使用44100Hz的采样率和需要的0.5Hz的频率分辨率,这意味着我需要88200个样品预FFT。由于采样率是采样率的两倍,因此需要大约2秒才能捕获;但是,在第一个样本之后,我通过使用循环缓冲区进行采样,并且从此时只读取了一半的样本,从而显着改善了情况。
不幸的是,表现还是相当低,有相当多的延迟。这是一个很大的问题,因为应用程序需要及时响应输入。
没有人有我如何改善这种性能有什么建议?我认为主要问题在于对大样本的要求,如果有某种方式可以减少读取多少音频,同时保持相同的准确度,那将是一件好事。线程可能有帮助吗?
编辑
如果它有助于了解,我想从电吉他输入做到实时F0估计,与和弦匹配多个F0估计一起。我有这样做的方法可以工作,而且相当准确,但是对于一个uni项目而言,我没有足够的时间去考虑FFT以外的其他方法。真的,我只是希望以某种方式加快抽样过程。
可以提高并发级别吗?对于例如将文件拆分成更小的块(对于开始的2个块)并在不同的线程下运行它们的样本?如果你不依赖于硬件(CPU驱动,而不是声卡驱动),我认为这种分而治之的方法可能会有所帮助。 – questzen 2012-03-27 12:36:21