如何为低延迟 iOS 用法修补 portaudio?

How to patch portaudio for low-latency iOS usage?

我目前正在开发一个补丁,应该能让 portaudio 在 iOS 上工作。现在我成功应用了 portaudio 成员 Hans Petter 的补丁 iOS usage

https://www.dropbox.com/s/6hf9bjqpa6b6uv3/0001-Add-basic-support-for-iOS-to-portaudio.patch?dl=0

至少我打电话告诉我音频处理确实有效,但是,它目前停留在 1024 个样本。当我尝试将其降低到较低的值时,回调函数立即终止。当使用 48 kHz 时,它会在没有任何警告或错误消息的情况下终止,但当使用 44.1 kHz 时,它会崩溃并出现以下错误:

断言失败:(*streamCallbackResult == paContinue || *streamCallbackResult == paComplete || *streamCallbackResult == paAbort),函数 PaUtil_EndBufferProcessing,文件 pa_process.c,第 1499 行。 dyld4 配置:DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_IMAGE_SUFFIX=_debug DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

参考pa_process.c中的第1497行-->

assert( *streamCallbackResult == paContinue || *streamCallbackResult == paComplete || streamCallbackResult == paAbort ); / 别忘了传入有效的回调结果值 */

我希望缓冲区大小尽可能小(最好是 128 或什至 64),但是,由于我不熟悉 iOS 上的音频,我现在正在寻求第一个鼓舞人心的评论.在 OSX、Win 或 Linux 上不存在此问题。也许 iOS 需要特殊的低延迟标志?

与此同时,我认为 iOS 能够处理小于 1024 的音频帧大小(低至 128 甚至可能更少),并且 portaudio 补丁需要额外的修改和调用才能使其工作。完成后,我将在此处提供补丁和更多详细信息。

集成Objective C代码是秘诀,修改文件后缀为mm:

auto session = [AVAudioSession sharedInstance];
[session setActive:TRUE  error: nil];
[session setPreferredSampleRate: sampleRate error: nil];
[session setPreferredIOBufferDuration: bufferDuration  error:nil];