所需功能:1) 插入耳机时通过耳机播放音频,2) 未插入耳机时通过扬声器播放音频,以及 3) 通过耳机或内置麦克风录制音频。
为了让它在扬声器和耳机上播放音频,我使用以下 Audio Session 类型:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];
然后创建音频播放器实例。这非常适合在插入耳机时通过耳机播放音频,在不插入时通过扬声器播放音频,直到我尝试录制。
录制时,我首先将 Audio Session 设置为AVAudioSessionCategoryPlayAndRecord
,然后尝试使用Novicane 进行录制。有时这会成功,但有时应用程序崩溃,没有堆栈跟踪或调试器指示,并给出 AUIOClient_StartIO
错误。
我对这个错误的谷歌搜索表明我需要始终保持 session AVAudioSessionCategoryPlayAndRecord
。这似乎确实避免了 AUIOClient_StartIO
错误的发生。
但是每当我使用 AVAudioSessionCategoryPlayAndRecord
进行播放时,它就会开始从内置耳机而不是扬声器播放。
我知道我可以覆盖扬声器的音频输出 channel (例如 https://stackoverflow.com/a/1064941/895876 ),但是插入耳机后不会自动切换到耳机音频。
如何获得所有这三个功能?
最佳答案
您必须使用 AUHAL 单元将特定输入设备设置为默认输入,然后将其与 AudioQueue 连接。
查看 this苹果技术。注意,它可能对你有帮助..
如果这不起作用尝试 AVAudioSession
使用 setPreferredInput:
这是我的后脑勺,根据我最近读到的一些东西,我实际上没有尝试过,但知道其他人成功地尝试过。
祝你好运。
关于iOS 无法在扬声器上播放并将 Audio Session 设置为录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22503985/