iOS:用于同时logging和回放的示例代码

我正在为多轨录音机devise一个简单的概念certificate。

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

这个问题 – 同时录制和播放audio – 指出我可以在三个层面上工作:

  • AVFoundation API(AVAudioPlayer + AVAudioRecorder)
  • audio队列API
  • audio单元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上录制audio?

为了避免延迟问题,你将不得不在比AVFoundation更低的水平工作。 从Apple – Auriotouch查看这个示例代码。 它使用远程I / O。

如Viraj所build议的,这是答案。

是的,你可以使用AVFoundation获得非常好的结果。 首先你需要注意的是,对于玩家和logging者来说,激活它们是一个两步的过程。

首先你首先。

然后你玩它。

所以,最重要的一切。 然后玩一切。

这将使您的延迟降低到70毫秒左右。 我通过录制一个节拍器打勾进行testing,然后通过扬声器回放,同时将iPhone固定在扬声器上并同时进行录制。

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

所以为了排列一切,我只是执行select器:x withObject:y afterDelay:70.0 / 1000.0

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

但它的工作原理比整理audio队列/单元更加整洁。

我有这个问题,我通过改变AudioSessionPreferredHardwareIOBufferDuration参数在我的项目中解决它。 我认为我现在只有6毫秒的延迟,这对我的应用程序来说已经足够了。

检查这个答案有一个很好的解释。