1

我在我正在开发的 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 的外部扬声器输出音频。

谢谢!

4

1 回答 1

2

设置音频会话后,请尝试以下操作:

         UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
         AudioSessionSetProperty (
           kAudioSessionProperty_OverrideAudioRoute,
           sizeof (ASRoute),
           &ASRoute
         );
于 2011-01-25T01:07:37.873 回答