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