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在程序进入后台就停止播放。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容