iOS 无法在扬声器上播放并将音频会话设置为录制

Posted

技术标签:

【中文标题】iOS 无法在扬声器上播放并将音频会话设置为录制【英文标题】:iOS Cannot play on speaker and set Audio Session to record 【发布时间】:2014-03-19 11:11:54 【问题描述】:

所需功能:1) 插入时通过耳机播放音频,2) 未插入耳机时通过扬声器播放音频,以及 3) 通过耳机或内置麦克风录制音频。

为了让它在扬声器和耳机上播放音频,我使用以下音频会话类型:

[[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];

然后创建一个音频播放器的实例。这非常适合在插入时通过耳机播放音频,在未插入时通过扬声器播放音频,直到我尝试录制为止。

录制时,我先将音频会话设置为AVAudioSessionCategoryPlayAndRecord,然后尝试使用 Novicane 进行录制。有时这会成功,但有时应用程序崩溃,没有堆栈跟踪或调试器指示,并给出 AUIOClient_StartIO 错误。

我对这个错误的谷歌搜索表明我需要始终保持会话AVAudioSessionCategoryPlayAndRecord。这似乎确实避免了AUIOClient_StartIO 错误的发生。

但每当我使用AVAudioSessionCategoryPlayAndRecord 播放时,它都会从内置听筒而不是扬声器开始播放。

我知道我可以将音频输出通道覆盖到扬声器(例如https://***.com/a/1064941/895876),但插入耳机后不会自动切换到耳机音频。

如何获得所有三个功能?

【问题讨论】:

我认为您不需要始终设置 AVAudioSessionCategoryPlayAndRecord。我认为你应该观察 AVAudioSessionRouteChangeNotification 并在它触发时重新创建你的 AU。虽然你已经把这份工作交给了 Novicane。 【参考方案1】:

您必须使用 AUHAL 单元将特定输入设备设置为默认输入,然后将其与 AudioQueue 连接。

查看this Apple 技术。请注意,它可能会对您有所帮助..

如果这不起作用,请尝试 AVAudioSession 使用 setPreferredInput:

这不是我的想法,根据我最近阅读的内容,我实际上并没有尝试过,但知道其他人成功尝试过。

祝你好运。

【讨论】:

以上是关于iOS 无法在扬声器上播放并将音频会话设置为录制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 扬声器上强制播放音频?

在 iOS 中以不同的采样率同时录制和播放

使用 Python 录制或播放音频无法在 Mac 上运行:没有错误和没有声音

安卓模拟器可以播放音频吗

使用 AVAudioRecorder 录制后,AVAudioPlayer 不通过扬声器播放

在 Linux 上使用 bluealsa 从蓝牙耳机录制音频