我正在使用AVSoundSession
来配置声音,AVAudioPlayer
可以播放不同的声音。
我搜索了很多,找不到任何东西。如何操作输出源?
我需要一个方法SoundManager
,我可以在手机扬声器和扬声器之间切换输出。
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
使用此功能,我可以将声音传送到扬声器,但没有办法将其移动到手机扬声器。有人可以帮我吗?
答案 0 :(得分:9)
所以,我找到了使用声音输出进行操作的解决方案。
您可以使用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呼叫者应用程序所需要的。
然后你可以用
覆盖输出端口[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];
}