2009-07-04 128 views
3

我正在研究几个不同的iphone应用程序,它们同时录制和播放声音。认为多轨混音...播放一个声音并保存,然后在将另一个声音录制到另一个文件时听该声音。我的机制是启动两个不同的音频队列,一个用于录制,另一个用于播放。iPhone OS 3.0上的音频录制错误kAudioQueueErr_CannotStart

这是工作的A-OK,直到OS 3.0版本...但自那以后,会发生以下情况:

如果我第一次开始录制队列,它理应启动正常,但调用AudioQueueStart回放队列返回kAudioQueueErr_CannotStart。

如果我首先启动回放队列,它也可能会正常启动,但对记录队列的AudioQueueStart调用返回相同的错误kAudioQueueErr_CannotStart。

任何人有任何运气调试此错误?看起来好像两个队伍正在跺脚对方的记忆或什么?官方说明是:“音频队列遇到问题,无法启动。”不是超级有用...

杰里米

+0

音频会话管理原来是问题所在。这些文档有点吸引人,因为它们暗示只有处理音频会话才能管理应用与其他应用的交互方式。绝对不是这样。谨防。 – 2009-07-08 22:49:26

回答

6

这是一种陈词滥调的答案,但您是否使用音频会话API将您的音频类别设置为“播放和录制”?您必须这样做才能为您的应用程序的使用预留麦克风。在3.0中对音频会话进行了一系列更改(创建obj-c便捷类AVAudioSession并定义一些新类别),因此可能会发生更改,从而可能会让您感到困惑。

顺便说一句,如果你不在coreaudio-api列表(lists.apple.com),你应该是。社区和苹果工程师真的很有帮助。

+0

更具体地说: UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty( kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory ); 为我工作。 – 2010-03-21 10:17:44

0

也许我错了,但是我只有一个(活动?)音频队列可以同时存在的感觉。

您可能需要将输出音频队列切换到音频设备(远程IO)。
而AudioQueues是一种蹩脚的回放,所以一个音频单元不会伤害。

这个人设法做到了,并在这blog post谈到它。