AVAudioSession автоматически перенаправляет звук с iPhone? - PullRequest
1 голос
/ 25 января 2011

У меня проблемы с AVAudioSession с использованием AVAudioRecorder в игре cocos2d, над которой я работаю.

Я пытаюсь захватить микрофонный ввод, используя простой пример 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.

Спасибо!

1 Ответ

2 голосов
/ 25 января 2011

После настройки аудио-сеанса попробуйте что-то подобное:

         UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
         AudioSessionSetProperty (
           kAudioSessionProperty_OverrideAudioRoute,
           sizeof (ASRoute),
           &ASRoute
         );
...