版本
menu_open
目标平台:
Wwise SDK 2023.1.3
使用 Wwise SDK 来操作音频会话

为了让您的音频应用程序轻松正确地使用 Wwise SDK 管理音频会话,需要几个简单步骤。Wwise 在后台处理大量繁复的 iOS 音频会话,让用户能够专心处理应用程序的主要任务。所有音频中断和通路变换机制均由 Wwise 在内部处理,其关联回调对最终用户来说完全是可选的。在这些情况下,暂停和恢复声音引擎也由 SDK 处理。

使用 Wwise 配置音频应用程序

要配置应用程序音频会话和不同的可用回调,请使用:

使用结构体 AkPlatformInitSettings::AkAudioSessionProperties 成员将 eCategoryeCategoryOptionseMode 设置为期望的音频会话类别,为应用程序提供可选的不沿用选项和模式。

备注:
  • enum AkAudioSessionCategoryOptions 成员是用来提供多个类别选项的可配置的位掩码。在 Integration Demo IntegrationDemoAppDelegate.mm 中,方法 GetAudioSessionCategoryOptionBitMask() 展示了如何使用一系列输入布尔类型设置/取消期望选项来设置此掩码。

以下是 Wwise SDK 用户应用程序轻松创建完全符合 iOS 音频会话的音频应用程序所需的简单步骤:

  1. 设置音频会话类别。
    • 结构体 AkPlatformInitSettings.audioSession.eCategory 设置为期望值。
    • 结构体 AkPlatformInitSettings.audioSession.eCategoryOptions 设置为期望值(可选)。

  2. 注册中断回调(可选)。
    • struct AkPlatformInitSettings.audioCallbacks.interruptionCallback 设置为用户定义的回调方法。
    • 根据音频应用程序类型或游戏类型,用户中断回调可以完成许多目标:
      • 对于基于音频的应用程序,例如基于旋律的游戏,回调可以用来暂停整个游戏。
      • 对于音频播放应用程序,回调可用于从视觉上反映中断。
      • 当发生“开始”音频中断时,Wwise 将在内部暂停声音引擎,将渲染选项设置为true ,因此,如果您的应用程序需要完全禁用音频引擎,则可以在用户中断回调中来执行。
  3. 针对通路变换通知(可选)进行注册。
    • AVAudioSessionRouteChangeNotification 注册到 iOS NotificationCenter,并为它(回调)提供选择器
    • 请参阅 Integration Demo 源代码获取简单示例。

备注: 请参阅 iOS Integration Demo IntegrationDemoAppDelegate.mm 源代码了解上述所有步骤的示例。
注意: 在通过 AK::SoundEngine::Init( &in_initSettings, &in_platformInitSettings ) 初始化声音引擎之前,请确保完成上述所有步骤。
备注: 只有音频会话类别AkAudioSessionCategoryPlayAndRecord 才能在应用程序后台状态下播放和/或录制音频。如果需要此行为,还必须在 Xcode 中修改应用程序信息 plist 来为“Required background modes”键添加“App plays audio or streams audio/video using Airplay”值。

在运行时更改音频会话配置

您可以使用 AK::SoundEngine::iOS::ChangeAudioSessionProperties() API 调用来在声音引擎初始化后重新配置音频会话。这在应用程序临时需要话筒输入且需要在录制期间切换到 Play and Record 类别时非常有用。

备注: 在运行时更改音频会话属性会导致 Sink 被重置。这时音频播放会出现瞬时的毛刺噪声。因此,最好在应用程序处于静默状态时调用此 API。

如需查看有关如何完成此操作的演示,请参阅 iOS Integration Demo DemoAppLifecycle.cpp 源代码。

典型的音频会话共享场景

为了更好地理解各种音频会话共享场景中发生的总体调用流程,我们在此介绍一些示例,说明如何使用 Wwise 和 iOS 音频会话处理应用程序间的音频。

  1. 当您的应用程序正在播放/录制音频的同时接到电话,并且在电话期间没有发生应用程序切换:
    • 电话铃响时,您的应用程序音频会话将被系统停用(与其他任务相比,电话总是拥有更高的会话优先级),并且通话应用程序切换到前台。
    • Wwise SDK 将从 iOS 收到“开始”中断的通知,并暂停音频处理。
    • Wwise SDK 将使用相应函数来调用应用程序中断回调(如已注册)。
    • 如果已经注册,还会收到音频通路变换通知,让应用程序知道音频会话类别已经改变。
    • 如果用户放弃调用或者调用结束时:
      • 您的应用程序音频会话将恢复工作。
      • Wwise SDK 将从 iOS 收到“结束”中断的通知,并继续处理音频。
      • 接下来,如果您的应用程序已经注册,则将通过正确的参数收到“结束”中断调用。

  2. 当您的应用程序正在播放/录制音频时接到电话,并且在电话期间发生了应用程序切换:
    • 电话铃响时,您的应用程序音频会话将被系统停用(与其他任务相比,电话总是拥有更高的会话优先级),并且通话应用程序切换到前台。
    • Wwise SDK 收到“开始”中断的通知,并暂停音频处理。
    • Wwise SDK 使用相应函数来调用应用程序中断回调(如已注册)。
    • 如果已经注册,还会收到音频通路变换通知,让应用程序知道音频会话类别已经改变。
    • 在调用期间,如果用户按下 Home 按钮来切回到您的应用程序:
      • 您的应用程序音频会话将恢复工作。
      • Wwise SDK 收到 AppDidBecomeActive 通知并继续处理音频。
      • 若应用程序使用可混音的会话类别(带混音选项的 AmbientPlayAndRecord ),则 Wwise SDK 会将后台音乐总线静音。
      • 无论您的应用程序使用的是哪一种会话类别,当其位于前台时,通话应用程序的声音将与您的应用程序音频混合。
    • 如果用户切回到手机通话:
      • Wwise SDK 将暂停音频处理。
  3. 耳塞作为遥控装置时对不同会话类别的影响
    • 如果您的应用程序使用AkAudioSessionCategoryAmbient 类别配置:
      • 按耳塞上的遥控(播放/停止)按钮将在后台启动/暂停音乐应用程序中的用户音乐。
      • Wwise SDK 会相应地将后台音乐总线静音和取消静音。
      • 由于音频会话类别属于可混音的音频会话,因此音乐应用程序与您的应用程序声音将混合播放。
    • 如果您的应用程序使用 AkAudioSessionCategorySoloAmbient 类别配置:
      • 按下耳塞上的遥控播放按钮将在后台启动音乐应用程序中的用户音乐。
      • 由于此类别不可混音,因此您的应用程序音频会话将被停用,并且 Wwise SDK 将收到“开始”音频中断通知,如果经过注册,它将调用用户中断回调。
      • Wwise SDK 声音引擎将在内部暂停。
      • 当按下遥控按钮来停止用户音乐时,您的应用程序音频会话将恢复。
      • Wwise SDK 将收到“结束”源变更的通知,并在内部继续运行音频引擎。
    • 如果您的应用程序使用 AkAudioSessionCategoryPlayAndRecord 类别注册:
      • 在默认情况下,行为类似于 AkAudioSessionCategorySoloAmbient 类别。
      • 在启用 AkAudioSessionCategoryOptionMixWithOthers 时,行为类似于 AkAudioSessionCategoryAmbient 类别。

此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅