将AudioSession的类别从kAudioSessionCategory_MediaPlayback
更改为kAudioSessionCategory_PlayAndRecord
后,AudioQueueStart
方法在约3~5秒内挂起以开始录制。
问题只发生在运行iOS 5的iOS设备上,而不是在模拟器或仍在运行iOS 4或iOS 3的设备上。
以下是我的尝试:
如果我不更改类别但总是使用kAudioSessionCategory_PlayAndRecord
,那么每件事都可以。 AudioQueueStart
在约0.01秒内开始录制。
但是因为我希望我的声音来自设备的扬声器,所以我不能一直使用kAudioSessionCategory_PlayAndRecord
。
同时使用kAudioSessionOverrideAudioRoute_Speaker
和kAudioSessionCategory_PlayAndRecord
是一个好主意,但如果我这样做,我还应该处理很多kAudioSessionProperty_AudioRouteChange
情况,例如用户插入或删除耳机,连接蓝牙耳机等。太复杂了。
任何建议或解决方案都将受到赞赏。
答案 0 :(得分:3)
最后,我找到了解决问题的方法,我认为这是iOS 5的错误。
我将类别设置为kAudioSessionCategory_PlayAndRecord
并使用以下代码:
UInt32 defaultToSpeaker = TRUE;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(defaultToSpeaker), &defaultToSpeaker);
请注意,kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
ID仅适用于iOS 3.1或更高版本。