目录

目标平台:
Wwise SDK 2018.1.11
使用 Wwise SDK 来操作音频会话

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

使用 Wwise 配置音频应用程序

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

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

Note:
  • enum AkAudioSessionCategoryOptions 成员是用来提供多个类别选项的可配置的位掩码。在 Integration Demo IntegrationDemoAppDelegate.mm 中,方法 GetAudioSessionCategoryOptionBitMask() 展示了如何使用一系列输入布尔类型设置/取消期望选项来设置此掩码。
Note:
  • 在声音引擎初始化调用期间,音频会话在 iOS 级别初始化,音频引擎初始化调用发生在 IntegrationDemo 的 IntegrationDemoAppDelegate.mm 文件中的IntegrationDemo::Instance.Init() 调用期间。虽然在此后可使用来自 AVFoundation 框架的 AVAudioSession 的 sharedInstance 变换音频会话类别,但是建议使用 Integration Demo didFinishLaunchingWithOptions 委托方法,在应用程序生命周期开始时相应地设置AkPlatformInitSettings

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

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

  2. 注册中断回调(可选)。
    • struct AkPlatformInitSettings.audioCallbacks.interruptionCallback 设置为用户定义的回调方法。
    • 回调方法必须符合 AkAudioSourceChangeCallbackFunc 类型的格式,即AKRESULT callBackName(bool, void*) 。
    • 根据音频应用程序类型或游戏类型,用户中断回调可以完成许多目标:
      • 对于基于音频的应用程序,例如基于旋律的游戏,回调可以用来暂停整个游戏。
      • 对于音频播放应用程序,回调可用于从视觉上反映中断。
      • 当发生“开始”音频中断时,Wwise 将在内部暂停声音引擎,将渲染选项设置为true ,因此,如果您的应用程序需要完全禁用音频引擎,则可以在用户中断回调中来执行。
  3. 注册源变换回调(可选)。
    • 结构体 AkInitSettings.sourceChangeCallback 设置为用户定义的回调方法。
    • 回调方法必须符合 AkAudioSourceChangeCallbackFunc 类型的格式,即AKRESULT callBackName(bool, void*) 。
    • 当您的应用程序目前正在前台使用其音频会话,而用户想知道另一应用程序是否激活或禁用其音频会话时,将使用源变换回调。
    • 这非常适用于比如用户使用耳塞遥控装置从后台控制 Music 应用程序或音频流播放应用程序,而您的应用程序希望通过禁用特定声音总线或者整个应用程序(如果音频对您的应用程序至关重要)来对此事件做出反应。
    • 在内部,Wwise 将在收到“开始”/“结束”源变换通知时禁用/启用背景音乐总线。因此,如果您的应用程序音乐轨正在使用 BGM 总线,那么在收到源变换通知时它将静音。

  4. 针对通路变换通知(可选)进行注册。
    • AVAudioSessionRouteChangeNotification 注册到 iOS NotificationCenter,并为它(回调)提供选择器
    • 请参阅 Integration Demo 源代码获取简单示例。

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

典型的音频会话共享场景

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

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

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