iOS系统通过使用音频会话(audio session ),在APP、APP之间和设备级别,来管理音频行为。
1590817842077.png
我们使用音频会话(audio session )来和系统进行通信,以说明我们打算如何在APP中使用音频。这个音频会话,就像是APP和操作系统(或者说底层音频硬件)之间的一个中介。我们可以使用它来告诉操作系统,APP的音频的性质,而不需要详细说明各种与音频硬件的必需交互和操作。而这些细节的管理委托给音频会话,可以确保对用户的音频体验进行最佳管理。
概览
可以通过下面这个方法,使用AVAudioSession实例与APP的音频会话进行交互:
- 配置音频会话类别和模式,告诉系统,我们打算如何在APP中使用音频;
- 激活APP的音频会话,以使类别和模式的配置生效
- 订阅并响应重要的音频会话通知,如音频中断、线路更改等;
- 执行高级音频设备配置,如设置采样率、I/O缓冲区持续时间和通道数;
音频会话如何管理音频行为
音频会话是APP和操作系统之间的中介。启动时,APP将自动提供单声道音频会话。我们可以通过配置来提供所需要的行为,并激活它以使行为生效。
类别代表音频的角色
音频行为是通过音频会话类别来进行区分的。通过设置类别,可以来告诉APP是否使用输入或输出路由,是否希望音乐与音频一起继续播放,等等。
AVFoundation定义了许多音频会话类别,以及一组覆盖和修改的方法,这样我们就可以根据APP来定制自定义的音频行为。这些类别支持播放、录制、带录制的播放。系统会根据APP所需的音频功能,来提供相应的对硬件资源的访问。系统还会确保设备上的其他音频以适合APP的方式运行,来达到我们期望的效果。
通过指定一个模式,我们还可以自定义某些类别。例如,当APP使用视频录制模式时,系统可能会选择与使用默认模式时不同的内置麦克风。该系统还可能针对视频录制对麦克风信号进行处理来调谐。
通知支持中断处理
音频中断是指使APP的音频会话失活(激活的反义词),从而立即停止音频。当APP的一个竞争音频会话被激活,并且这个竞争音频会话没有按系统分类以与我们自己的会话混合时,就会发生中断。这时,我们的应用应该通过保存状态、更新用户界面等来响应中断。我们可以通过注册AVAudioSessionInterruptionNotification类型的通知,来在音频中断开始和结束时收到通知进行相应的处理。
通知支持音频路由更改处理
当用户通过连接或断开设备、插入或拔出耳机来启动音频路由更改时,一般来说,用户对这些操作是有特殊的期望的。在iOS人机界面指南描述了这些期望,并提供了如何满足这些期望的指南。我们通过注册AVAudioSessionRouteChangeNotification类型的通知,来处理路由更改的事件的相应处理。
音频会话控制设备配置
APP无法直接控制设备硬件,但音频会话为我们提供了请求首选硬件设备设置的接口。这个接口允许我们执行一些高级的音频设备配置,例如设置采样率、I/O缓冲区持续时间和音频通道数。
音频会话保护用户隐私
单独录制音频,或者与视频一起录制音频的APP,在允许录制之前需要明确的用户权限。在用户授予APP录制权限之前,应用程序只能录制静默。AVAudioSession提供了请求此权限和确定用户隐私设置的界面。
网友评论