美文网首页
iOS 音频基础知识(二)

iOS 音频基础知识(二)

作者: 明若晴空 | 来源:发表于2020-05-30 15:26 被阅读0次

配置音频会话

音频会话类别是标识APP一组音频行为的密钥。通过设置一个类别,我们可以告诉系统我们音频意图,例如当切换铃声/静音开关时,音频是否应继续。我们可以通过这些音频会话的类别和覆盖和修改方法来自定义APP的音频行为。
下表是音频会话的类别的一些细节:

类别 通过响铃/静音开关和屏幕锁定来静音 中断非混合APP的音频 允许音频输入(录制)和输出(播放)|
AVAudioSessionCategoryAmbient Yes No 仅输出
AVAudioSessionCategorySoloAmbient (Default) Yes Yes 仅输出
AVAudioSessionCategoryPlayback No 默认是Yes,可以通过开关来切换到No 仅输出
AVAudioSessionCategoryRecord No(锁屏后继续录音) Yes 仅输入
AVAudioSessionCategoryPlayAndRecord No 默认是Yes,可以通过开关来切换到No 输入和输出
AVAudioSessionCategoryMultiRoute No Yes 输入和输出

注意:如果要在APP的铃声/静音开关设置为静音且屏幕锁定时,还继续播放音频,就要将UIBackgroundModes音频键添加到APP的信息列表文件。除了使用正确的类别之外,还需要满足此要求。

如上表所示,每个音频会话类别,对特定响应的设置都是不同的:

  • 中断非混合APP音频:如果是Yes,那么当APP激活竞争音频会话时,我们的非混合APP的音频就会被中断。
  • 静音开关静音:如果是Yes,当用户启动静音开关时,我们音频将静音。(在iPhone上,这个开关叫做响铃/静音开关。)
  • 支持音频输入:如果Yes,那么就是允许APP音频输入(录制)。
  • 支持音频输出:如果Yes,那么就是允许APP音频输出(播放)。

大多数APP在启动时只需要设置一次类别,但我们也可以根据需要经常更改类别。我们可以在音频会话处于激活状态时,更改它;但是,通常最好能在更改类别或其他会话属性之前,停用音频会话。在会话停用时进行这些更改,可以防止不必要的重新配置音频系统。

音频会话默认行为

iOS有一个默认的音频会话,其预配置如下:

  • 支持音频播放,但不允许音频录制。
  • 将铃声/静音开关设置为静音模式,可使APP播放的任何音频静音。
  • 当设备被锁定时,APP的音频将被静音。
  • 当APP播放音频时,任何其他背景音频(如音乐APP正在播放的音频)都将被静音。

这些默认音频会话有它默认的配置,但是在大多数情况下,我们还是应该自定义它,来以更好地满足我们的需要。如果要更改,就要配置APP的音频会话。

配置音频会话

配置音频会话的主要方法,就是设置它的类别。音频会话类别定义一组音频行为。与每个类别相关联的行为不受APP的控制,而是由操作系统设置的。在音频会话的类别和模式中总结了每个类别的行为详细信息。

类别设置APP的基本音频行为时,还可以通过设置类别的模式,来进一步专门化这些行为。例如,IP语音(VoIP)APP将使用AVAudioSessionCategoryPlayAndRecord。通过将音频会话的模式设置为AVAudioSessionModeVoiceChat,可以专门化VoIP的此类行为。这个模式就可确保通过系统提供的信号处理为语音优化信号。
某些类别,是支持通过设置会话的一个或多个类别选项来覆盖其默认行为(可以参考AVAudioSessionCategoryOptions)。例如,与AVAudioSessionCategoryPlayback类别关联的默认行为会在会话激活时中断其他系统音频。一般来说在大多数情况下,播放类的APP是需要这种行为的。但是,如果希望音频与其他系统音频混合,可以通过在会话上设置AVAudioSessionCategoryOptionMixWithOthers选项来覆盖这类行为。

可以调用setCategory:mode:options:error:方法,来设置音频会话类别,模式和选项的设置是可选的。

使用多路由类别来扩展选项

多路由类别的工作方式与其他类别略有不同。一般来说,其他类别都遵循“后进有效”的规则,也就是说插进输入输出路由的最后一个设备就是主设备。但是,多路由类别使APP能够使用所有连接的端口,而不是仅使用最后一个插入的端口。例如,如果您正在通过HDMI输出路径收听音频,然后插入了耳机,那么APP就会继续通过HDMI输出路径播放音频,同时也通过耳机播放音频。

使用多路由类别,APP还可以将不同的音频流发送到不同的输出路由。例如,APP可以将一个音频流发送到左侧耳机,另一个发送到右侧耳机,第三个发送到HDMI路由。下图中显示了将多个音频流发送到不同音频路由的示例。


1590822741915.png

选择AirPlay的类别和模式

只有特定的类别和模式支持AirPlay。以下类别同时支持AirPlay的镜像和非镜像版本:

  • AVAudioSessionCategorySoloAmbient
  • AVAudioSessionCategoryAmbient
  • AVAudioSessionCategoryPlayback

AVAudioSessionCategoryPlayAndRecord类别和以下模式仅支持AirPlay的镜像版本:

  • AVAudioSessionModeDefault
  • AVAudioSessionModeVideoChat
  • AVAudioSessionModeGameChat

注意:从iOS 10开始,使用AVAudioSessionCategoryPlayAndRecord类别时,可以通过使用AVAudioSessionCategoryOptionAllowAirPlay选项激活会话来启用非镜像AirPlay输出。

启用背景音频

iOS APP要求我们为某些后台操作启用某些功能。播放类APP所需的一个常见功能是播放背景音频。启用此功能后,当用户切换到其他APP或锁定其iOS设备时,APP的音频可以继续。在iOS中启用高级播放功能,如AirPlay流媒体和图片中的图片播放,也需要此功能。

配置这些功能的最简单方法是使用Xcode。在Xcode中选择APP的target并选择“Capabilities”选项卡。在“Capabilities”选项卡下,将“Background Modes”开关设置为“开”,并从可用模式列表中选择“Audio, AirPlay, and Picture in Picture”选项。


1590823459820.png

启用此背景模式并使用适当的类别配置音频会话后,APP就可以播放背景音频了。

相关文章

  • IOS 音频开发

    音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频https://developer....

  • 多媒体音频播放简单介绍

    概述 基础知识-音频编解码,音频格式,音频会话(session) ios软硬件音频编解码器 音频会话(Audio ...

  • iOS 音频基础知识(二)

    配置音频会话 音频会话类别是标识APP一组音频行为的密钥。通过设置一个类别,我们可以告诉系统我们音频意图,例如当切...

  • iOS 音频学习基本术语和概念

    一、音频的基础知识 在学习iOS音频开发之前, 要对音频的基础知识和一些术语概念有一定的了解, 当然我再写这篇文章...

  • 音频基础知识02

     音频基础知识 01  音频基础知识 02  音频基础知识 03  音频基础知识 04 人类收集声音的历史   为...

  • iOS之音频开发系列之音频基础

    在正式学习音频开发之前,我们要认识下关于音频的一些基础。这些知识会有助于我们后面学习iOS的音频框架。 基础知识 ...

  • iOS一音频直播

    今天看了一些音频直播类的App,所以就想着如何去解决这个问题。 我们先搞清楚音频基础知识 iOS中支持音频的一些类...

  • 音视频学习路径

    第1章音视频基础知识 11.1视频编码 11.2音频编码 21.3多媒体播放组件(Android、iOS) 21....

  • Android音频知识收集

    Android音频基础知识Android音频剪辑合成

  • iOS音频基础知识(三)

    激活音频会话 我们可以通过设置音频会话的类别、选项和模式来配置音频会话。要使配置生效,现在需要激活音频会话。 系统...

网友评论

      本文标题:iOS 音频基础知识(二)

      本文链接:https://www.haomeiwen.com/subject/irxhzhtx.html