iPhone OS 3.0 上的音频录制错误 kAudioQueueErr_CannotStart

Posted

技术标签:

【中文标题】iPhone OS 3.0 上的音频录制错误 kAudioQueueErr_CannotStart【英文标题】:Audio recording error kAudioQueueErr_CannotStart on iPhone OS 3.0 【发布时间】:2009-07-04 03:22:14 【问题描述】:

我正在开发几个不同的 iPhone 应用程序,它们可以同时录制和播放声音。想想多轨混音......播放一个声音并保存它,然后在将下一个声音录制到另一个文件时收听该声音。我的机制是启动两个不同的音频队列,一个用于录制,一个用于播放。

在 OS 3.0 发布之前,这一直正常运行...但是,从那时起,发生了以下情况:

如果我先启动录制队列,它应该可以正常启动,但是对播放队列的 AudioQueueStart 调用返回 kAudioQueueErr_CannotStart。

如果我先启动播放队列,它应该也可以正常启动,但是对记录队列的 AudioQueueStart 调用返回相同的错误,kAudioQueueErr_CannotStart。

任何人有运气调试这个错误吗?似乎这两个队列可能会踩到彼此的内存或其他东西?官方的描述是:“音频队列遇到问题,无法启动。”不是很有帮助...

杰里米

【问题讨论】:

音频会话管理原来是问题所在。文档有点烂,因为它们暗示实际上只需要处理音频会话来管理您的应用程序与其他应用程序的交互方式。绝对不是这样。当心。 【参考方案1】:

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

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

【讨论】:

更具体地说:UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), &sessionCategory);为我工作。【参考方案2】:

也许我错了,但是我感觉一次只能存在一个(活动的?)音频队列。

您可能需要将输出音频队列切换到音频单元(远程 IO)。 而且 AudioQueue 播放起来有点蹩脚,所以音频单元不会受到伤害。

这家伙设法做到了,并在blog post 中谈论它。

【讨论】:

以上是关于iPhone OS 3.0 上的音频录制错误 kAudioQueueErr_CannotStart的主要内容,如果未能解决你的问题,请参考以下文章

由于-5825,iPhone屏幕录制未能保存

如何以编程方式在 iphone 中执行应用程序音频的内部录制

Swift 4 - 在 mac os 上使用 AVAssetWriter 进行 avfoundation 屏幕和音频录制 - 视频冻结

iPhone 上的音频硬件延迟

使用 PhoneGap 将音频录制到 iOS 上的文档文件夹

AVAudioPlayer 在模拟器中播放录制的音频,但不在手机上