天天看点

iOS 开发 初级:Audio 之 Audio Session

在iOS开发中,音视频最重要的framework就是AVFoundation Framework了。从本文开始,主要谈基于AVFoundation的音频使用与处理。要掌握音频的使用,首先要了解的就是Audio Session了。

1、什么是Audio Session?

先给出官方的英文解释:

An audio session is the intermediary between your application and iOS for configuring audio behavior. Upon launch, your application automatically gets a singleton audio session. You configure it to express your application’s audio intentions. 

我的理解就是一个应用最基本的音频配置,来设置基本的应用与系统之间的音频处理方式,比如:

1)应用里的音频播放时是否要和其他应用的音频实现混音?或者让其他音频静音?

2)当iOS的闹钟响时应用内的音频是否要暂停?

3)当用户插拔耳机时应用应该如何反应?拔出耳机时是否要停止音乐?

4)关闭屏幕后音频是否暂停?

以上这些问题就是Audio Session要设置的东西。可以说要使用AVFoundation播放音乐,第一步就是要设置Audio Session,它影响应用内所以相关音频的播放方式。

2、Audio Session的设置实践

1)设置的根本方式:更改Audio Session的Category类别。

一个Audio Session Category就是一个Key,来描述应用音频处理方式的一个种类。通过设置Audio Session 不同的Category来更改配置。

总体上,Category有以下4类:

(1)是否允许混音

(2)打开静音和关闭屏幕时是否要静音

(3)是否支持音频输入,比如要录制音频

(4)是否支持音频输出,比如要播放音频

2)默认的Audio Session是怎样的?

如果你的应用正好符号Audio Session的默认设置,那么你也就不用特地来设置它了。默认的Audio Session具有如下设置:

(1)允许播放Playback不允许录制;

(2)当用户打开静音时,就是设备侧边的那个静音开关,那么应用内正在播放的音频将静音;

(3)当用户锁定屏幕或屏幕自动变暗时,应用内的应用内正在播放的音频将静音;

(4)当你应用内的音频开始时,如果这个时候有其他应用比如iPod正在播放音乐,那么iPod将暂停播放。

以上这一系列方式已经被打包成一个类别,就是AVAudioSessionCategorySoloAmbient,默认的类别

3)Audio Session不起作用的情况

两种:

(1)应用内根本不使用音频。(这不是白说吗?)

(2)应用使用System Sound Services 或者UIKit 的playInputClick。

前一种在上一篇文章中有说,后一种就是设置点击键盘的键盘音。

4)开始设置Audio Session(前提:在Xcode中加入AVFoundation.framework

(1)获取Audio Session对象

AVAudioSession *session = [AVAudioSession sharedInstance];

(2)基本设置

使用setCategory:error:或setCategory:option:error: 方法来实现

比如:

[session setCategory:kAudioSessionCategoryPlayback error:nil];

(3)Category介绍

// 下面这个类别用于音频比较次要的应用,应用的音频会和其他应用的音频实现混音

// 然后关闭屏幕或者静音开关打开时音频将静音。

NSString *const AVAudioSessionCategoryAmbient; 

// 默认类别

NSString *const AVAudioSessionCategorySoloAmbient; 

// 下面这个类别应用侧重音频播放,使用这个类别时,关闭屏幕或静音开关打开

// 时音频将继续播放,与其他应用音频不混音。要使应用能后台继续需要相关设置。

NSString *const AVAudioSessionCategoryPlayback; 

// 下面这个类别应用将侧重录音。将使播放的音频静音,屏幕关闭时录制音频将继续。

// 要使应用能后台继续需要相关设置。

NSString *const AVAudioSessionCategoryRecord;

// 下面这个类别应用允许音频播放和录制,比如用于VOIP语音通话应用。播放和录音

// 可以同时进行,关闭屏幕将可以继续。要使应用能后台继续需要相关设置。

 NSString *const AVAudioSessionCategoryPlayAndRecord; 

// 下面这个类别用于音频处理,详细见开发文档

NSString *const AVAudioSessionCategoryAudioProcessing; 

// 下面这个类别可以实现同时多个输出,详细见开发文档

NSString *const AVAudioSessionCategoryMultiRoute; 

4、总结

以上只是Audio Session最基本的设置,在开发文档中可以看到还有很多设置的内容。如果要开发高级的音频应用,可以再去看开发文档。