AVAudioSession управляет выводом звука

Я использую AVSoundSession настроить звук, и AVAudioPlayer играть разные звуки. Я много искал и ничего не мог найти. Как я могу манипулировать источниками вывода?

Мне нужен метод в моем SoundManager где я мог переключить выход между динамиком телефона и громкоговорителем.

success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
                                     error:&error];

Используя это, я могу направить звук в громкоговоритель, но нет способа перенести его в динамик телефона. Кто-нибудь может мне помочь с этим?

1 ответ

Решение

Итак, я нашел решение для манипуляции с выводом звука.

Вы можете инициализировать настройки звука с AVAudioSession

Что-то вроде этого:

session = [AVAudioSession sharedInstance];

BOOL success;
NSError* error;

success = [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];

if (!success)  NSLog(@"AVAudioSession error setting category:%@",error);
success = [session setMode:AVAudioSessionModeVoiceChat error:&error];

if (!success)  NSLog(@"AVAudioSession error setting mode:%@",error);

success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];

[session setPreferredOutputNumberOfChannels:0 error:nil];
if (!success)  NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);

success = [session setActive:YES error:&error];
if (!success) NSLog(@"AVAudioSession error activating: %@",error);
else NSLog(@"audioSession active");

С

[session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];

Вы установили не переопределять выходной порт. И ваше приложение играет с динамиком по умолчанию. Как я понимаю для режима AVAudioSessionModeVoiceChat Используется телефон динамик. Это именно то, что мне нужно для моего приложения SIP Caller.

Затем вы можете переопределить выходной порт с помощью

[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];

Я делаю это так:

- (void) loudSpeakerOn:(BOOL)isLoudSpeaker{
    [session setActive:NO error:nil];

    BOOL success;
    NSError* error;

    success = [session overrideOutputAudioPort:isLoudSpeaker?AVAudioSessionPortOverrideSpeaker:AVAudioSessionPortOverrideNone error:&error];

    if (!success)  NSLog(@"AVAudioSession error setting category:%@",error);

    [session setActive:YES error:nil];
}
Другие вопросы по тегам