iOS:用于同时录制和播放的示例代码

P i*_*P i 14 audio record simultaneous playback ios

我正在为多轨录音机设计一个简单的概念证明.

明显的出发点是从文件A.caf播放到耳机,同时将麦克风输入录制到文件B.caf中

这个问题 - 同时录制和播放音频 - 指出我可以在三个级别工作:

  • AVFoundation API(AVAudioPlayer + AVAudioRecorder)
  • 音频队列API
  • 音频单元API(RemoteIO)

工作的最佳水平是什么?显然,通用答案是在完成工作的最高级别工作,这将是AVFoundation.

但是,由于延迟问题(他在文件之间有0.3秒的延迟),我正在接受这项工作,所以也许我需要在较低级别工作以避免这些问题?

此外,跳板有哪些源代码?我一直在看SpeakHere示例(http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html).如果我找不到更简单的东西,我会用它.

但是,任何人都可以建议更简单/其他吗?如果我能避免它,我宁愿不使用C++代码.

有人知道一些使用AVFoundation的公共代码吗?

编辑:AVFoundation示例:http ://www.iphoneam.com/blog/index.php?title=using-the-iphone-to-record-audio-a-guide&more=1&c=1&tb=1&pb =1

编辑(2):这里看起来好多了:http://www.switchonthecode.com/tutorials/create-a-basic-iphone-audio-player-with-av-foundation-framework

编辑(3):如何使用AVAudioRecorder在iPhone上录制音频?

Vir*_*raj 6

为避免延迟问题,您必须在比AVFoundation更低的级别工作.查看Apple - Auriotouch的示例代码.它使用远程I/O.

  • 很高兴知道.也许你应该回答你的问题. (2认同)

P i*_*P i 5

正如Viraj所说,这是答案.

是的,使用AVFoundation可以获得非常好的效果.首先,您需要注意这样一个事实:对于播放器和录像机,激活它们是一个两步过程.

首先你准备它.

然后你玩它.

所以,一切都好.然后玩一切.

这将使您的延迟降至约70毫秒.我通过录制节拍器嘀嗒声进行测试,然后通过扬声器播放,同时将iPhone连接到扬声器并同时录制.

第二次录音有一个清晰的回声,我发现它是~70ms.我本可以分析Audacity中的信号来获得精确的偏移量.

因此,为了排列所有内容,我只需执行Selector:x withObject:y afterDelay:70.0/1000.0

可能存在隐藏的障碍,例如延迟可能因设备而异.它甚至可能因设备活动而异.甚至可能在启动播放器和启动录音机之间线程被中断/重新安排.

但它可以工作,并且比使用音频队列/单元更加整洁.

  • 你能提供这个功能的示例代码吗? (3认同)