我正在使用AudioRecord.read将PCM数据捕获到字节。 但是,我发现它限制为使用至少3904个缓冲区初始化AudioRecord对象。采样率为44100。 由于我需要对数据执行FFT,因此我将样本增加到4096。 因此,回调每隔40-60ms由setPositionNotificationPeriod运行到500.由于进一步减少持续时间不会进行任何更改。 如果这是以下配置的最快回拨时间,我很擅长?
采样率:44100
频道:Mono
编码:PCM 16 BIT
BufferSize:4096
(我不确定它是4096还是2048,因为我每次读取4096个字节,它只能填充2048个2字节缓冲区)
甚至40-60ms是可以接受的,然后我执行FFT,最终阻止每个回调大约200-300ms。并且仍然存在许多影响准确性的噪声。 我正在使用这些源代码:FFT in Java和Complex class
还有其他选择可以执行快速,可靠且消耗较少的内存处理FFT吗? 我发现上面的类新增了太多的对象并弹出了gragarbage collection的消息。
总之,我有3个问题:
抱歉我的英文不好,也谢谢你把时间花在我的问题上。
P.S我在iOS上尝试过,它可以采用512个样本,采样率为44100。所以每次回调只需要大约10ms。