iOS中切换麦克风的输入源以及音频播放的输出源

一、麦克风的输入源

在iOS开发中,录音时如果是连接无线蓝牙外设时,将输入源切换为手机端或蓝牙耳机,此时需要切换AudioSession中的Category,如果是手机端的麦克风为AVAudioSessionCategoryPlayAndRecord,如果是外设则为AVAudioSessionCategoryPlayAndRecord同时附带的option参数为AVAudioSessionCategoryOptionAllowBluetooth,具体代码如下:

1.切换到手机端:

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];

    [audioSession setActive:NO error:nil];

    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    [audioSession setActive:YES error:nil];

2.切换到蓝牙外设:

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];

    [audioSession setActive:NO error:nil];

    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord  withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil];

    [audioSession setActive:YES error:nil];

二、音频播放的输出源

1.切换到手机播放,如果是扬声器播放,则有以下两种方式:

1). 修改Category的默认行为:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];  

2). OverrideOutputAudioPort:

[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; 

这两种方法的区别官方文档中有详细的说明。

在iOS7.0之前可用下面方法重定向(属于AudioSession):

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;  

    AudioSessionSetProperty (  

                             kAudioSessionProperty_OverrideAudioRoute  

                             sizeof (audioRouteOverride),  

                             &audioRouteOverride  

                             );  


2.如果是切换到外设播放,如下:

        [audioSession setCategory:AVAudioSessionCategorySoloAmbient error: nil];

说明:Category也可以换成AVAudioSessionCategoryPlayback,这两者的区别是AVAudioSessionCategoryPlayback可以在程序进入后台播放,AVAudioSessionCategorySoloAmbient在程序进入后台就停止播放。

你可能感兴趣的:(iOS中切换麦克风的输入源以及音频播放的输出源)