一、麦克风的输入源
在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在程序进入后台就停止播放。
网友评论