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];
}