如何同时录制、修改和回放?

How to record, modify and playback simultaneously?

我正在开发 iOS 应用程序。该应用程序旨在模拟助听器。它应该能够先录制声音,然后修改声音(如过滤或频谱增强),最后回放。整个过程要实时完成,即录音和回放之间的延迟应在1秒以内。看过aurioTouch的示例代码,发现有一个回调函数,是在录音的时候调用的。我可以只修改那个回调中的声音吗?我担心的是修改过程有点耗时(大约 0.3 秒)。我可以在回调中做吗?如果不是,为什么?我该怎么办?

您的问题可能有错别字 "the delay between record and playback should be within 1s"(一秒钟对于音频应用程序来说是非常高的延迟...尤其是对于助听器而言。嘴唇运动和音频会很不同步)

无需任何处理,您可以在 5 毫秒到 10 毫秒的范围内将音频从麦克风传输到 speaker/earphones,具体取决于您设置 RemoteIO 的方式。

你的系统很简单。它只是一个环回系统,但您想在两者之间插入一些信号处理。 (例如 eq 或其他增强功能,如背景噪声消除、回声抑制等)。

您需要决定是手动进行信号处理,还是要使用 iOS 中当前可用的信号处理音频单元。如果你想使用 ios 中现有的音频单元,方法是创建一个包含以下项目的音频图 - 远程 io(连接到输入总线 1 上的麦克风,输出总线 1 上的扬声器) - 音频单元效果

如果你想自己编写所有 DSP 的东西,你只需要一个 remoteIO 单元。
给你回答你的问题"Can I just modify the sound in that callback"

是 - 您可以在麦克风的回调中编写信号处理代码。 但是,您必须在下一次回调发生之前完成所有处理。如果您的音频处理时间过长,您需要通过使用 AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration,...

建议新的缓冲区持续时间大小来增加回调时间(从而增加延迟)

你提到你的处理时间很长“(比如大约 0.3 秒)”
那是 300 毫秒,在音频世界中绝对不被视为 "near realtime" 或 "low latency"。但是,您给出的测量结果是开放式的,因为您没有说明处理了多少音频?处理5秒的音频需要0.3秒吗?处理0.1秒的音频需要0.3秒吗?