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 无法在扬声器上播放并将音频会话设置为录制的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 录制或播放音频无法在 Mac 上运行:没有错误和没有声音