如何同时录制,修改和播放?

时间:2015-09-22 16:55:49

标签: ios objective-c callback audiounit

我正在使用iOS应用。该应用程序旨在模拟助听器。它应该能够首先录制声音,然后修改声音(如滤波或光谱增强),并在最后播放。整个过程应该及时完成,这意味着记录和回放之间的延迟应该在1秒之内。我已经阅读了aurioTouch的示例代码,发现在录制时有一个回调函数。我可以修改回调中的声音吗?我担心的是修改过程有点耗时(比如大约0.3秒)。我可以在回调中做到吗?如果没有,为什么?我该怎么办?

1 个答案:

答案 0 :(得分:1)

你的问题中可能有拼写错误"记录和播放之间的延迟应该在1秒内#34; (对于音频应用来说,一秒钟是非常高的延迟......特别是对于助听器。唇部运动和音频会不同步)

根据您设置RemoteIO的方式,无需任何处理,您可以在5ms到10ms的范围内将麦克风的音频输入扬声器/耳机。

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

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

如果您想自己编写所有DSP内容,则只需要一个remoteIO单元 你回答你的问题"我可以只修改回调中的声音"

是 - 您可以在麦克风的回调中编写信号处理代码。 但是,您必须在下一次回调发生之前完成所有处理。如果您的音频处理时间过长,则需要通过使用AudioSessionSetProperty建议新的缓冲区持续时间大小来增加回调时间(从而增加更多延迟)(kAudioSessionProperty_PreferredHardwareIOBufferDuration,...

你提到你的处理需要很长时间(约0.3秒)"
这是300毫秒,绝对不被认为"接近实时"或者"低延迟"在音频世界。但是,您提供的测量是开放式的,因为您没有说明处理了多少音频?处理5秒音频需要0.3秒吗?处理0.1秒的音频需要0.3秒吗?