所需功能:1)插入时通过耳机播放音频,2)未插入耳机时通过扬声器播放音频,以及 3)通过耳机或内置麦克风录制音频。
为了让它在扬声器和耳机上播放音频,我使用以下音频会话类型:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];
然后创建一个音频播放器的实例。这非常适合在插入耳机时播放音频,而在播放时不播放扬声器,直到我尝试录制。
录制时,我首先将音频会话设置为AVAudioSessionCategoryPlayAndRecord
,然后尝试使用 Novicane 进行录制。有时这会成功,但有时候应用程序崩溃时没有堆栈跟踪或调试器指示,并给出AUIOClient_StartIO
错误。
我在 Google 上搜索此错误表明我需要始终保持会话AVAudioSessionCategoryPlayAndRecord
。这似乎确实发生了AUIOClient_StartIO
错误。
但每当我用AVAudioSessionCategoryPlayAndRecord
进行播放时,它开始播放 built-in 耳机而不是扬声器。
我知道我可以将音频输出通道覆盖到扬声器(e.g. https://stackoverflow.com/a/1064941/895876),但插入耳机后不会自动切换到耳机音频。
我如何获得所有这三个功能?
1 回答
您必须使用 AUHAL 单元将特定输入设备设置为默认输入,然后将其与 AudioQueue 连接。
查看这个 Apple tech。请注意,它可能会帮助你..
如果这不起作用,请尝试
AVAudioSession
使用setPreferredInput:
根据我最近阅读的内容,我根本没有尝试过,但知道其他人成功尝试了它。
祝好运。