ターゲットプラットフォーム:
Wwise SDK 2018.1.11
Wwise SDKを利用して、オーディオ セッションで作業を行う

Wwise SDKを使用して、あなたのオーディオアプリで簡単、そして正確に オーディオ セッションを管理するためには、特定の簡単なステップが幾つか必要になります。Wwiseは、ユーザーがアプリの本質に集中できるよう、 iOS オーディオ セッションの複雑な部分を影で処理します。すべてのオーディオの中断、ソースの変更の仕組みは、既にWwiseが内部的に処理し、関連するコールバックはエンドユーザー側の完全なオプションとなっています。 これらの場合のサウンドエンジンの停止ならびに再開も、SDKが処理します。

Wwiseでオーディオアプリを設定する

アプリのオーディオ セッションを設定し、異なる利用可能なコールバックを使用するには:

struct AkPlatformInitSettings::AkAudioSessionProperties メンバを使用して、eCategoryeCategoryOptions、および eMode を、望みの オーディオ セッション カテゴリー に、オプションのオーバーライドオプションと、モードと共に設定します。

Note:
  • enum AkAudioSessionCategoryOptions メンバは、複数のカテゴリーオプションを持つように設定可能なビットマスクです。Integration Demoでは、IntegrationDemoAppDelegate.mm、メソッド GetAudioSessionCategoryOptionBitMask() が、入力ブールタイプで、希望のオプションを設定/設定解除する、このマスクを使用方法を示しています。
Note:
  • オーディオ セッションは、iOS レベルで、サウンドエンジン init 呼び出しの間に初期化されます。これは、IntegrationDemoのIntegrationDemoAppDelegate.mm ファイル中、IntegrationDemo::Instance.Init() コールの間に呼び出されます。オーディオ セッションカテゴリーの変更は、 このステップの後、 AVFoundationフレームワークからのAVAudioSessionのsharedInstanceを使って行うことは可能ですが、Integration Demoの didFinishLaunchingWithOptions delegate メソッドのように、アプリケーション作成の最初に AkPlatformInitSettings を相応に設定することを推奨します。

以下、iOS オーディオ セッションに完全の互換性のある基本的なオーディオアプリを簡単に作成するために、いずれのWwise SDK ユーザーアプリもが必要とする簡単なステップです:

  1. オーディオ セッション カテゴリーを設定する。
    • struct AkPlatformInitSettings.audioSession.eCategoryを、希望する値で設定する。
    • struct AkPlatformInitSettings.audioSession.eCategoryOptionsを、希望する値で設定する (オプション)。

  2. 中断コールバックを登録する (オプション)。
    • struct AkPlatformInitSettings.audioCallbacks.interruptionCallback を、ユーザー定義のコールバックメソッドに設定する。
    • このコールバックメソッドは、AKRESULT callBackName(bool, void*) を形成するための AkAudioSourceChangeCallbackFunc タイプを考慮する必要があります。
    • オーディオアプリケーションの種類やゲームのジャンルによって、ユーザー中断コールバックを使用すると、多くのことを達成することができます:
      • リズムベースのゲームなど、オーディオに依存するアプリケーションでは、ゲーム全体を一時停止するために利用できます。
      • オーディオ再生アプリケーションでは、コールバックを使用して視覚的に中断を反映することにも使用できます。
      • 「begin」オーディオ中断が発生した際、Wwiseは内部的にレンダリングのオプションを true に設定したサウンドエンジンを停止しますから、 アプリで完全なオーディオエンジンの無効化が必要な場合には、ユーザー中断コールバックで達成できます。
  3. ソース変更コールバックの登録 (オプション)。
    • struct AkInitSettings.sourceChangeCallback を、ユーザー定義コールバックメソッドに設定。
    • このコールバックメソッドは、AKRESULT callBackName(bool, void*) を形成するための AkAudioSourceChangeCallbackFunc タイプを考慮する必要があります。
    • ソース変更コールバックは、今あなたのアプリがそのオーディオ セッションをフォアグラウンドで使用している間、他のアプリがそのオーディオ セッションをアクティブ化もしくは非アクティブ化しているのかをユーザーが知りたい場合に利用されます。
    • ユーザーが音楽アプリまたはいずれのオーディオストリーミングアプリを、バックグランドで、例えばイヤホンのロモートコントロールを使用してコントロールしている場合、あなたのアプリがこのイベントに反応して、特定のサウンドバスを無効にしたり、あなたのアプリが必要不可欠である場合には、アプリケーション全体を無効にする場合に便利です。
    • 内部的にWwiseは、 「begin」/「end」ソース変更通知を受け取ると、バックグランドの音楽バスを無効/有効にします。ですから、もしあなたのアプリの音楽トラックがBGMバスを使用していると、ソース変更通知を受け取った際に、その音楽はミュートされます。

  4. ルート変更通知の登録 (オプション)。
    • iOS NotificationCenter に、AVAudioSessionRouteChangeNotification を登録し、これに対するセレクタを提供します (コールバック)
    • Integration Demo ソースコードで簡単なサンプルを参照してください。

Note: 上記で説明したステップについての詳細は、iOS Integration Demo IntegrationDemoAppDelegate.mm ソースコートで例を参照してください。
Caution: 以上の手順を、サウンドエンジンをAK::SoundEngine::Init( &in_initSettings, &in_platformInitSettings )で初期化するに、必ず行ってください。
Note: オーディオ セッション カテゴリー AkAudioSessionCategoryPlayAndRecord のみで、アプリがバックグラウンドの状態でのオーディオ再生および/または録音ができます。この動作が必要な場合には、アプリ情報plistをXcode で修正し、'Required background modes' キーに、'App plays audio or streams audio/video using Airplay' 値と共に追加します。

典型的なオーディオ セッション共有シナリオ

幅広いオーディオ セッション共有シナリオで起こる、コールフロー全体を良く理解するために、ここで幾つか例をあげて、Wwise と iOS オーディオ セッションを使用して、アプリ間オーディオを処理する方法を説明します。

  1. あなたのアプリがオーディオを再生/録音中に電話の呼び出しを受け、通話がアクティブな間、アプリの切り替えが発生しない場合:
    • 電話が鳴ると、あなたのアプリの オーディオ セッション は、システムによって非アクティブ化され (電話は常に他のタスクよりもセッションの優先度が高い) 、電話アプリがフォアグラウンドに出されます。
    • Wwise SDKは、iOSから'begin'の中断ノティフィケーションを受領し、オーディオ処理を停止します。
    • 登録されていれば、Wwise SDKがあなたのアプリの中断コールバックを、適したパラメータでコールします。
    • 登録されていれば、オーディオルート変更通知も受け取り、アプリにオーディオ セッションのカテゴリーが変更されたことを知らせます。
    • ユーザーが通話を放棄、または通話が終了した場合:
      • あなたのアプリの オーディオ セッションが再開されます。
      • Wwise SDKは、iOSから'end'の中断ノティフィケーションを受領し、オーディオ処理を再開します。
      • この後、あなたのアプリは「end」中断コールバックをが登録されている場合、適切なパラメータと共に受け取ります。

  2. あなたのアプリがオーディオを再生/録音中に電話の呼び出しを受け、アプリの切り替えが、通話がアクティブな間に発生した場合:
    • 電話が鳴ると、あなたのアプリの オーディオ セッション は、システムによって非アクティブ化され (電話は常に他のタスクよりもセッションの優先度が高い) 、電話アプリがフォアグラウンドに出されます。
    • Wwise SDKは、'begin'の中断ノティフィケーションを受領したので、オーディオ処理を停止します。
    • 登録されていれば、Wwise SDKがあなたのアプリの中断コールバックを、適したパラメータでコールします。
    • 登録されていれば、オーディオルート変更通知も受け取り、アプリにオーディオ セッションのカテゴリーが変更されたことを知らせます。
    • 通話の間、ユーザーがホームボタンを押してアプリを元に切り替えた場合:
      • あなたのアプリの オーディオ セッションが再開されます。
      • Wwise SDKは、'begin'のソース変更ノティフィケーションを受領し、オーディオ処理を再開します。
      • 登録されていれば、Wwise SDKがあなたのソース変更コールバックをコールします。
      • あなたのアプリがミックス可能なセッションカテゴリーを使用している場合 (Ambient または PlayAndRecord を'mixable (ミックス可能)' オプションで)、Wwise SDKのソース変更通知は、オーディオ セッションのカテゴリとオプション の説明の通り、バックグラウンドの音楽バスをミュートします。
      • アプリでどのセッションカテゴリーを使用していても、電話アプリからのサウンドが、あなたのアプリのオーディオをフォアグラウンドにした状態でミックスされます。
    • ユーザーが通話に戻った場合:
      • Wwise SDKがオーディオ処理を停止します。
  3. 異なるセッションカテゴリーで、イヤホンをリモートコントロールに使用することの影響
    • あなたのアプリが AkAudioSessionCategoryAmbient カテゴリーを使って設定されている場合:
      • イヤホンのリモートコントロール (再生/停止) ボタンを押すと、バックグランドにある音楽アプリからのユーザーの音楽が (開始/一時停止) します。
      • Wwise SDKは、「再生」または「停止」のいずれかが押されると、「begin」または「end」ソース変更通知を受け取り、これに呼応して、アプリソースの変更コールバックが登録されている場合、これを呼び出します。
      • オーディオ セッションカテゴリーがミックス可能なものなので、 サウンドは音楽アプリとあなたのアプリの間でミックスされます。
    • あなたのアプリが AkAudioSessionCategorySoloAmbient カテゴリーを使って設定されている場合:
      • イヤホンのリモートコントロールボタンを押すと、バックグランドの音楽アプリからのユーザーの音楽が開始されます。
      • このカテゴリーはミックスができないので、あなたのアプリの オーディオ セッション は非アクティブ化され、Wwise SDKは、「begin」オーディオ中断通知を受け取り、ユーザー中断コールバックが登録されている場合、これを呼び出します。
      • Wwise SDKのサウンドエンジンは、内部的に停止されます。
      • リモートコントロールを押してユーザーの音楽を停止した場合、あなたのアプリの オーディオ セッションは復元されます。
      • Wwise SDKは、'end'のソース変更ノティフィケーションを受領し、内部的にオーディオエンジンが再開します。
      • この後、登録されていれば、Wwiseはあなたのアプリのソース変更コールバックを呼び出します。
    • あなたのアプリが AkAudioSessionCategoryPlayAndRecord カテゴリーを使って設定されている場合:
      • 動作は AkAudioSessionCategoryAmbient カテゴリーと同様です。