我在我正在开发的 cocos2d 游戏中使用 AVAudioRecorder 时遇到 AVAudioSession 问题。
我正在尝试使用一个简单的 AVAudioRecorder 示例来捕获麦克风输入,以检测用户何时在麦克风中发出声音(声音本身并不重要,因为我正在录制到 /dev/null 中)。
这是我的麦克风设置代码:
NSURL *newURL = [[NSURL alloc] initFileURLWithPath:@"/dev/null"];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
NSDictionary *recordSettings =
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 22050.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityLow],
AVEncoderAudioQualityKey,
nil];
micInput = [[AVAudioRecorder alloc] initWithURL:newURL settings:recordSettings error:nil];
[newURL release];
[recordSettings release];
[micInput setMeteringEnabled:YES];
在使用上述代码的 iPhone 上,场景开始时所有音频(音效、背景音乐等)都在非常低的水平上播放,因为它只是通过手机扬声器播放,而不是通过外部扬声器播放。当我在 iPad 或 iPod Touch 上进行测试时,背景音频按预期通过外部扬声器播放。这是一个问题,因为在游戏的这个特定部分使用 iPhone 版本玩游戏时,游戏的音量会急剧下降。
当我注释掉 AVAudioSession 设置行时,声音通过外部扬声器播放,但我当然不能再获得麦克风输入。这个问题有什么解决方法或解决方案吗?我需要能够使用 AVAudioRecorder 进行录制,但仍然可以从 iPhone 的外部扬声器输出音频。
谢谢!