我有一个需要实时音频信号处理的应用程序概念,可以概括地描述为:a)对传入的音频进行采样(来自麦克风),b)执行信号处理功能(例如滤波,傅里叶变换,滤波和操作) ,反傅立叶变换)c)播放(通过扬声器插孔)
我认为“端到端”往返时间(a)到(c)需要大约2到5毫秒才能使应用程序在现实世界中工作。
所以,我的问题是今天的iphone和Android手机有可能吗?
答案 0 :(得分:1)
在iOS上,它是可能的,但不能保证。我已经设法在我的iOS应用程序中获得~6ms(22050采样率,128个样本缓冲区大小),它可以实时处理语音输入。看看Novocaine(https://github.com/alexbw/novocaine) - 它提供了一个很好的音频单元封装,使编程更容易。
但是,请记住,即使您请求特定的缓冲区大小,在运行时iOS也可能决定基于资源限制以更长的间隔(=>更高的延迟)发送更大的缓冲区。例如,如果您要求缓冲区大小为128(~6ms),则最终可能会在12ms处获得256个大小的缓冲区。您的应用必须考虑到这一点并相应地处理缓冲区。
在Android上,不幸的是,低延迟往返音频是一个更大的问题。这是因为延迟是由许多设备/制造商驱动的因素驱动的,例如硬件/驱动程序级缓冲区,这些因素因设备而异。你可以在这里找到对这个长期存在的Android障碍的讨论:https://code.google.com/p/android/issues/detail?id=3434
我的建议是暂时忽略Android,并在iOS设备上实现/验证您的信号处理算法。稍后,您可以考虑将它们移植到Android。