版本
menu

目标平台:
Wwise SDK 2025.1.3
理解音频会话

iOS SDK 依靠 Apple 音频会话 API 来遵守应用内和应用间的操作系统音频处理机制。音频会话的主要目标是,当不同系统事件或用户操作发生时,为音频应用程序提供规范行为。换言之,音频会话是音频应用程序与 iOS 操作系统之间的中间层,提供了可预测的音频行为。

应用程序针对系统和其他应用程序的音频行为通过一系列音频会话类别和子类别(被称为类别选项)来控制。使用音频或用于制作音频的每款 iOS 应用程序都应自行注册到系统中的特定音频会话类别和类别选项集合(可选),以表明它的预期音频行为。

音频会话还用于处理和响应 iOS 系统中断和音频通道变换。

最后,音频会话还是 iOS 底层硬件音频组件在不同音频应用程序和系统声音之间的共享机制。因此必须满足音频会话需求,防止系统事件处理不当导致应用程序崩溃或音频丢失。

每当音频应用程序需要捕获或者产生音频时,它必须请求并在系统上激活音频会话。例如,当音乐应用程序用户按“播放”按钮时,应用程序应在按钮被按下后请求激活它的音频会话,并在用户按下“暂停”按钮时停用该功能。许多 iOS 内置应用程序使用音频会话来输出或采集音频,这可能会对用户应用程序音频行为产生影响:

  • 日历应用程序(通过音频提醒)
  • 相机(视频)
  • 时钟应用程序(报警、计时器、定时器)
  • FaceTime
  • Garage Band
  • iTunes 商店
  • 地图
  • 音乐商店
  • 手机
  • 播客
  • SIRI
  • 语音备忘录

iOS 可以随时停用应用程序的音频会话来响应各种其他音频事件,例如手机来电、定时器设定的音频报警或者日历事件。这些事件被称为 interruption(中断) ,音频应用程序可以对此类音频会话优先级变更作出反应,并在中断结束后正确恢复播放或录音。应用程序切换、按下主页按钮后在后台运行应用程序以及锁定和解锁设备时,也会激活和停用音频会话。以下各节详细介绍 Wwise 如何管理这些事件,以及客户端应用程序须采取何种措施来确保音频正确播放。

音频会话类别和选项

iOS 上运行的所有音频应用程序都必须使用音频会话来处理、获取或输出声音。由于所有音频应用程序使用音频不一定为了同一目标或目的(音频录制应用程序可能需要获取音频在后台执行,而游戏会在另一音频程序启动时完全暂停),iOS 定义了几种音频会话类别,对用户操作或系统事件发生时的预期音频行为进行分组。每款音频应用程序必须自行注册使用给定类别,然后才能在设备上处理音频。

各类的不同音频行为主要包括:

  • 应用程序音频是否由设备上的 Ring/Silent 开关静音(通常被称为“锁定”按钮);
  • 音频应用程序是否会打断被配置为 non-mixable(不可用于混音)的另一款应用程序的音频;或者
  • 应用程序是否支持音频输入(录制)、音频输出(播放)或者二者均可。

每款音频应用程序仅隶属于一种类别。如果没有具体选定具体类别,则会使用默认的AVAudioSessionCategorySoloAmbient 类别。iOS Wwise SDK 中提供四个主要类别:

  • AkAudioSessionCategoryAmbient :相当于 iOS 音频会话 AVAudioSessionCategoryAmbient 类别
    • 仅用于音频会话(不可录制)。
    • 当 Ring/Silent 开关激活时(按“锁定”时)会把应用程序音频设置为静音。
    • 如果其他音频应用程序在前台激活其音频会话,则此应用程序音频将中断。
    • 应用程序音频会跟其他可混音的后台音频一起混音(如 Music 应用程序)。
    • 应用程序音频可以包括多种类型的声音,例如音效、对白或音乐。除非应用程序音频特别标记为在 Wwise 中可以静音的 BGM(请参阅 处理用户音乐(BGM)和DVR 了解详情),否则Ambient 类别中的所有应用程序音频将与其他应用程序的音频混音。最常见的情形是用户启动 Music 应用程序并开始播放音乐,然后切回到您的应用程序。
    • 此类别非常适用于为应用程序增添有趣体验,同时又能加入另一应用程序音频的游戏。通过使用此类别,用户可以选择使用 Music 应用程序听音乐,同时您的应用程序可以输出音效或对白。
    • Ambient 不支持从您的应用程序在后台播放音频。如果用户从您的应用程序切换到另一音频应用程序,即使其他应用程序使用 mixable(可混音)类别,您的应用程序音频也将静音。
  • AkAudioSessionCategorySoloAmbient :相当于 iOS 音频会话 AVAudioSessionCategorySoloAmbient 类别
    • 仅用于音频会话(不可录制)。
    • 当 Ring/Silent 开关激活时(按“锁定”时)会把应用程序音频设置为静音。
    • Ambient 类别的主要区别在于,当其音频会话激活时,其他应用程序的音频会中断。
    • 如果另一音频应用程序在前台激活其音频会话,则此应用程序音频将中断。
    • 如果使用 可混音或不可混音类别的另一音频应用程序在后台激活其音频会话,则此应用程序音频将中断。
    • 另建议将此类别用于不可与其他后台音频应用程序混音的游戏应用程序。例如,使用 Music 应用程序听音乐并切回您应用程序的用户在您的应用程序继续时将使音乐应用静音。
  • AkAudioSessionCategoryPlayAndRecord :相当于 iOS 音频会话 AVAudioSessionCategoryPlayAndRecord 类别
    • 用于音频播放和录制。
    • 当 Ring/Silent 切换开关被激活(按下“锁定”时),应用程序音频将不会静音。
    • 如果另一音频应用程序在前台激活其音频会话,则此应用程序音频将中断。
    • 在默认情况下,此类别不会使用被覆盖的 AkAudioSessionCategoryOptionMixWithOthers 选项(详见下文),并且其他应用程序的音频(如来自 Music 应用程序的音乐)在播放时不会与应用程序音频一起混音。
    • 如果使用了类别选项 AkAudioSessionCategoryOptionMixWithOthers (见下文),则当另一音频应用程序在后台激活其音频会话时,应用程序音频将不与其他源混音。例如,使用 Music 应用程序听音乐的用户切回到您的应用程序时,它们的音乐将与您的应用程序音频混合。然而与 AkAudioSessionCategoryAmbient 一样,使用此选项仍然不会输出来自在 Wwise 中设为静音的应用程序 BGM(请参见 处理用户音乐(BGM)和DVR 了解详情)。
    • 将此类别结合正确配置的应用程序 plist 文件使用,可在应用程序切换到后台时播放/录制音频。如果您的应用程序需要支持后台音频处理,比如音频录制应用程序或音乐播放器应用程序,此类别是 Wwise 支持的唯一模式。然而为此必须更改应用程序选项 plist,来添加“App plays audio or streams audio/video using Airplay”设置为 1 的后台模式键。
    • 此类别仅可用于需要话筒输入的应用程序。
  • AkAudioSessionCategoryPlayback :相当于 iOS 音频会话 AVAudioSessionCategoryPlayback 类别。
    • 仅用于音频播放。
    • 在激活 Ring/Silent 切换开关时(即按下 'Lock' 时),不会将应用程序音频静音。
    • 如果另一音频应用程序在前台激活其音频会话,则此应用程序音频将中断。
    • 在默认情况下,此类别不会使用被覆盖的 AkAudioSessionCategoryOptionMixWithOthers 选项(详见下文),并且其他应用程序的音频(如来自 Music 应用程序的音乐)在播放时不会与应用程序音频一起混音。
    • 将此类别结合正确配置的应用程序 plist 文件使用,可在应用程序切换到后台时播放/录制音频。若应用程序需要支持后台音频处理(比如在语音录制应用程序或音乐播放器应用程序中),则此类别是 Wwise 支持的唯一模式。然而为此必须更改应用程序选项 plist,来添加“App plays audio or streams audio/video using Airplay”设置为 1 的后台模式键。
    • 此类别仅可用于需要在后台播放音频且无需话筒输入的应用程序。

除了上面所列的音频会话类别外,使用类别选项还可以不沿用某些类别的默认行为。

音频会话类别选项可以配有 enum AkAudioSessionCategoryOptions

  • AkAudioSessionCategoryOptionMixWithOthers :相当于 iOS 音频会话 AVAudioSessionCategoryOptionMixWithOthers 类别选项
    • 仅与 AkAudioSessionCategoryPlayAndRecordAkAudioSessionCategoryPlayback 类别结合使用。
    • 不沿用默认类别行为,音频可与其他 可混音音频应用程序混音。
  • AkAudioSessionCategoryOptionDuckOthers :相当于 iOS 音频会话 AVAudioSessionCategoryOptionDuckOthers 类别选项
    • 仅与 AkAudioSessionCategoryPlayAndRecordAkAudioSessionCategoryPlayback 类别结合使用。
    • 可以让其他应用程序的音频在目前运行应用程序的音频会话激活时降低音量。
  • AkAudioSessionCategoryOptionAllowBluetooth :相当于 iOS 音频会话 AVAudioSessionCategoryOptionAllowBluetooth 类别选项
    • 仅结合 AkAudioSessionCategoryPlayAndRecord 类别使用。
    • 可让 Bluetooth 设备在录制时成为可用输入。
  • AkAudioSessionCategoryOptionAllowBluetoothA2DP :相当于 iOS 音频会话 AVAudioSessionCategoryOptionAllowBluetoothA2DP 类别选项。
    • 仅结合 AkAudioSessionCategoryPlayAndRecord 类别使用。
    • 允许配对的 Bluetooth A2DP 设备在录制时成为可用输入。
  • AkAudioSessionCategoryOptionDefaultToSpeaker : 相当于 iOS 音频会话 AVAudioSessionCategoryOptionDefaultToSpeaker 类别选项
    • 仅结合 AkAudioSessionCategoryPlayAndRecord 类别使用。
    • 如果使用此选项,但无其他音频输出可用,则应用程序音频将通过设备的内置扬声器播放。如果未使用此选项,且无其他音频输出可用,则应用程序音频将通过设备听筒播放。
    • 此选项仅使用具有听筒的 iPhone,而对 iPad 和 iPod 无影响。

Wwise 的 iOS 音频事件机制

在 iOS 设备上,当您的应用程序正在使用其音频设备时,可能发生一定数量的用户操作或系统事件。例如,呼入电话、用户从您的应用程序切换到另一个应用程序、定时器声音提醒响起、用户将耳机插入/拔出插孔或者用户按下 Ring/Silent 开关,都是对您应用程序的音频行为可能产生影响的事件。本节介绍 iOS 中应对此类事件的不同机制,以及如何通过 Wwise 与您的应用程序通信。

iOS 中存在三种主要音频事件:前台/后台过渡、中断和通路变换。

前台/后台过渡

在应用程序被操作系统转至后台时,声音引擎的行为取决于 Audio Session 类别。

在 Ambient 和 Solo Ambient 类别中,音频会话会被停用。因此,声音引擎将暂停工作。这时,既不会处理音频,也不会调用 API。这样可以节约 Apple 设备电量。游戏也会暂停处理,避免调用 AK::SoundEngine 。在应用程序返回前台后,声音引擎将恢复工作,并处理队列中的 API 调用。系统会自动执行所有这些操作。

在 PlayAndRecord 和 Playback 类别中,转到后台时不会中断音频。这时会继续处理音频并照常调用 API。您可以通过在平台初始化设置的 eAudioSessionBehavior 参数中设置 AkAudioSessionBehaviorSuspendInBackground 标记来更改此行为。若设置此标记,在应用程序转到后台时,声音引擎本身会暂停工作(跟上述 Ambient 和 Solo Ambient 类别一样)。

中断

不同的系统事件或用户操作可能会导致应用程序的音频会话被停用,即便此时应用程序在前台运行。这种情况被称为音频会话中断。比如,在收到呼入电话或 Siri 被激活时就会发生此类中断。

无论选择哪个音频会话类别,在中断期间声音引擎都会自动暂停音频渲染。不过,仍会处理 API 调用。所以,此类别相当于全局静音。在中断结束后,会自动恢复音频渲染。

若应用程序必须知晓这些中断事件,而游戏引擎并未予以告知,则可在 AkPlatformInitSettings.audioCallbacks.interruptionCallback 中设置回调函数。否则,声音引擎将无从处理这些事件。

当收到这些中断时,Wwise 负责暂停/恢复声音引擎组件,用户无需采取进一步的行动来确保正确地激活/停用音频会话。在音频会话中断或恢复(比如要更新 UI 元素或提供有关中断的视觉反馈)时,若 SDK 客户端应用程序中需要进行特别处理,则须将代码添加到上述应用程序回调。

注意: 由于“开始”音频中断回调在内部暂停声音引擎之前调用,因此它不能用于播放任何类型的音频,甚至短暂声音,因为无法保证达到预期的结果。
注意: 用户音频中断调用只用于执行简单的任务,例如 UI 或对象属性更新,而决不可用于执行 CPU 密集型计算或者耗时的操作。否则下无法保证达到预期的结果。

通路变换

音频通路是音频通过设备中不同音频硬件组件的指定路径。例如当用户插入或拔出耳机时,音频通路将变换,因为声音输出应发送到耳机或被暂停而不是通过设备扬声器传出。iOS 可以将通路变换情况通知给注册了 AVAudioSessionRouteChangeNotification 的应用程序。

发生基本的通路变换(例如插入/拔出耳机)时,Apple 音频会话自动负责激活/停用正在运行的应用程序的音频会话。Wwise SDK 不提供上述中断情形以外的回调机制。如果用户需要检测此类通路变换来让应用程序中的特定元素做出反应,请参阅“Integration Demo”来了解如何轻松实现。

Airplay Support

It is possible to cast the audio produced by Wwise to an Airplay-compatible device. To achieve this, your application must use the AkAudioSessionCategoryPlayback category, and must specify the AkAudioSessionRouteSharingPolicyLongFormAudio or AkAudioSessionRouteSharingPolicyLongFormVideo route-sharing policy. This makes your application's audio behave like a media playback application such as Apple Music or Apple Podcasts rather than an interactive audio application.

注意: The Airplay protocol is designed for media playback applications, not interactive audio applications. The latency induced by Airplay makes it unsuitable for interactive audio applications.

For more information on correctly implementing Airplay support in your application, refer to the Apple developer guidelines on Airplay: https://developer.apple.com/documentation/avfoundation/streaming_and_airplay/supporting_airplay_in_your_app


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅