首页 关于 微信公众号
欢迎关注我的微信公众号

AVAudioSession应用

设置应用为 扬声/标准 输出模式

在开发中,特别是在开发voip应用的时候,需要设置扬声器和标准模式的切换。下面就分享一下原理和代码。

原理和步骤

  1. 监听 AVAudioSessionRouteChangeNotification通知,监听方法的名字为 (checkSpeakType)
  2. 在checkSpeakType中,判断当前音频输出的类型,然后根据其类型进行切换。

对AVAudioSession中的类的方法的分析

  1. [[AVAudioSession getInstance] currentRoute] // 获取当前线路

上面方法的返回值类型是一个 AVAudioSessionRouteDescription(线路描述类), 这个类里面包含有两个属性:

有此,我们可以看出,如果你在应用中要处理音频输入,则从 inputs 如数;如果要处理音频输出,则从 outputs 入手。

inputs 和outputs 数组中每个元素的类型都是 AVAudioSessionPortDescription 音频端口描述信息。下面我们具体分析一下这个类中包含的内容:

如何判断当前应用是扬声器模式还是标准模式:

拿到 outputs 数组中的元素 ,判断音频的 type 或 name 即可。

切换 标准/扬声器 模式的代码

  1. - (IBAction)onpressedbuttonSpeaker:(id)sender {
  2. self.speakerBtn.tag = self.speakerBtn.tag == kSpeakerBtnTag_Normal ? kSpeakerBtnTag_Selected : kSpeakerBtnTag_Normal;
  3. AVAudioSessionPortOverride sessionPortOverride;
  4. switch (self.speakerBtn.tag) {
  5. case kSpeakerBtnTag_Selected:
  6. {
  7. sessionPortOverride = AVAudioSessionPortOverrideSpeaker;
  8. }
  9. break;
  10. case kSpeakerBtnTag_Normal:
  11. {
  12. sessionPortOverride = AVAudioSessionPortOverrideNone;
  13. }
  14. break;
  15. default:
  16. break;
  17. }
  18. AVAudioSession *audioSesson = [AVAudioSession sharedInstance];
  19. BOOL res = [audioSesson overrideOutputAudioPort:sessionPortOverride error:nil];
  20. if (res) {
  21. NSLog(@"Setting speaker success");
  22. }
  23. }

Blog

Opinion

Project