バージョン
menu_open
ターゲットプラットフォーム:
Wwise SDK 2023.1.2
オーディオセッションを理解する

iOS SDKは、アプリ、およびアプリ間のレベルでオペレーティングシステムのオーディオの扱いの仕組みに従うため、Apple オーディオ セッション API に依存しています。この オーディオ セッション の主な目標は、異なるシステムイベント、またはユーザーアクションが発生した場合に、オーディオアプリに既知の動作を提供することです。言い換えれば、 オーディオ セッション は、オーディオアプリとiOS オペレーティングシステムの間を仲介して、予測可能なオーディオの動作を提供します。

システムとその他のアプリのアプリケーションオーディオの動作は、 オーディオ セッション 一連のカテゴリとサブカテゴリによって制御されており、これをカテゴリオプションと呼んでいます。オーディオを使用、または生成するすべてのiOSアプリは、与えられた オーディオ セッション カテゴリ、そしてその期待されるオーディオ動作を示すため、オプションのカテゴリオプションセットに、それ自身を登録する必要があります。

オーディオ セッション はまた、iOS システムの中断、およびオーディオのルートの変更を扱い、応答するために使用されます。

最後に、 オーディオ セッション はまた、iOSが異なるオーディオアプリとシステムサウンドの間の、低レベルハードウェア オーディオ コンポーネントを共有するためにも使用される仕組みでもあります。 従って、システムイベントを適切に扱わないことが原因で起きる、アプリのオーディオの喪失、またはアプリのクラッシュを避けるため、 オーディオ セッション 要件に従うことは必須です。

オーディオアプリがオーディオをキャプチャ、もしくは生成する場合はいつでも、システムの オーディオ セッション を要求し、アクティブ化する必要があります。 例えば、ある音楽アプリユーザーが「再生」ボタンを押した場合、そのアプリその オーディオ セッション を要求し、ボタンを押し終わった後にアクティブ化し、ユーザーが「一時停止」ボタンを押した場合には、非アクティブ化します。 多くのiOSに組み込まれているアプリは、 オーディオ セッション を使用して、オーディオを出力、またはキャプチャのいずれかを行うので、これがユーザーアプリのオーディオ動作に影響を与えることがあります:

  • カレンダー アプリ (オーディオアラートを介して)
  • カメラ (ビデオ)
  • 時計アプリ (アラーム、ストップウォッチ、タイマー)
  • FaceTime
  • Garage Band
  • iTunes Store
  • 地図
  • 音楽アプリ
  • 電話
  • ポッドキャスト
  • SIRI
  • ボイスメモ

いつの時点でも、iOSはそのアプリの オーディオ セッション を非アクティブ化して、受信通話、タイマーで設定したオーディオのアラーム、またはカレンダーイベントなどの様々なオーディオイベントに対応します。これらは 割り込み イベントとして知られ、オーディオアプリは オーディオ セッション の優先順位の変更に対応し、「割り込み」が終了すると適切に再生や録音を再開しますアプリの切り替え、ホームボタンを押した際のアプリのバックグランド処理、デバイスのロックまたはロック解除などでも、 オーディオ セッション のアクティブ化と非アクティブ化が発生します。次のセクションでは、これらのイベントをWwiseがどのように管理し、適切なオーデェオのためにクライアントアプリは何をすべきかについて、細かく説明します。

オーディオ セッションのカテゴリとオプション

iOSで実行するすべてのオーディオアプリは、 オーディオ セッション を使用してサウンドの処理、取得、または出力を行う必要があります。すべてのオーディオアプリが、同じ目標や目的でオーディオを使用する訳ではないので (あるオーディオアプリはバックグランド実行でオーディオを取得する必要があり、ゲームでは他のオーディオアプリが起動すると完全に一時停止します)、iOS は、いくつかの オーディオ セッション のカテゴリを定義し、ユーザーアクション、または先に示したようなシステムイベントが発生した場合に期待されるオーディオの動作をグループ化しています。各オーディオアプリは、デバイスでオーディオを処理する前に、自身を与えられたカテゴリに登録する必要があります。

カテゴリで異なる主なオーディオ動作には次のようなものがあります:

  • デバイスの着信/サイレントスイッチ (往々にして「ロック」ボタンと言われる)によって、アプリのオーディオを無音にするかどうか;
  • あるオーディオアプリが、ミックス不可能のオーディオアプリとして設定されている他のアプリのオーディオを停止するかどうか; または
  • そのアプリがオーディオ入力 (録音)、オーディオ出力 (再生)、もしくはこの両方を許可するか。

各オーディオアプリは、一度に一つのカテゴリにのみ属することが可能です。カテゴリが明示的に選択されていない場合には、デフォルトの AVAudioSessionCategorySoloAmbient カテゴリが使用されます。Four main categories are available in the iOS Wwise SDK:

  • AkAudioSessionCategoryAmbient: iOS オーディオ セッション AVAudioSessionCategoryAmbient カテゴリと同等
    • オーディオ再生のみに使用されます (録音はできません)。
    • 着信/サイレントスイッチがアクティブ化 (「ロック」が押される) されると、アプリのオーディオを無音にします。
    • 他のオーディオアプリがその オーディオ セッション をフォアグラウンドでアクティブ化した場合、アプリのオーディオが中断されます。
    • App audio will be mixed with other mixable background audio (for example, the Music app).
    • アプリのオーディオは、SFX、会話、または音楽など、多くの種類のサウンドを含むことができます。アプリのオーディオがWwiseでミュートできるBGMとして特にタグされていない限り (詳細は、 ユーザーミュージック(BGM)やDVRの取り扱い を参照)、 Ambient カテゴリにありすべてのアプリのオーディオは、他のアプリのオーディオをミックスされます。最も典型的なケースは、ユーザーが音楽アプリを起動して、あなたのアプリに切り替える前に音楽の再生を開始した場合です。
    • このカテゴリは、他のアプリのオーディオを体験に取り込みながら、オーディオがアプリに面白い体験を加えるゲームに適しています。このカテゴリを使用すると、ユーザーは例えば、あなたのアプリがSFXや会話を出力している間、音楽アプリを使って音楽を聴くことができます。
    • Ambient は、あなたのアプリからバックグランドでオーディオを再生することは許可しません。ユーザーがあなたのアプリから他のアプリに切り替えた場合、他のアプリがミックス可能なカテゴリを使用していたとしても、あなたのアプリは無音になります。
  • AkAudioSessionCategorySoloAmbient: iOS オーディオ セッション AVAudioSessionCategorySoloAmbient カテゴリと同等
    • オーディオ再生のみに使用されます (録音はできません)。
    • 着信/サイレントスイッチがアクティブ化 (「ロック」が押される) されると、アプリのオーディオを無音にします。
    • Ambient カテゴリとの主な違いは、 オーディオ セッション がアクティブ化されると、他のアプリからのオーディオが中断されます。
    • アプリのオーディオは、他のオーディオアプリがその オーディオ セッション をフォアグラウンドでアクティブ化すると中断されます。
    • アプリのオーディオは、他のオーディオアプリがその オーディオ セッション を、ミックス可能もしくはミックス不可能なカテゴリの下、バックグランドでアクティブ化すると、中断されます
    • このカテゴリはまた、バックグランドで実行されている他のオーディオアプリとミックスするべきではないオーディオを使用するゲームアプリに推奨します。例えば、音楽アプリで音楽を聞くユーザーがいて、あなたのアプリに切り替えると、アプリが再開した場合に音楽は無音になります。
  • AkAudioSessionCategoryPlayAndRecord: iOS オーディオ セッション AVAudioSessionCategoryPlayAndRecord カテゴリと同等
    • オーディオの再生と録音に使用されます。
    • アプリのオーディオは、着信/サイレントスイッチがアクティブ化されても (「ロック」が押される) 無音にはなりません。
    • アプリのオーディオは、他のオーディオアプリがその オーディオ セッション をフォアグラウンドでアクティブ化すると中断されます。
    • By default, this category does not use the overridden AkAudioSessionCategoryOptionMixWithOthers option (see below) and other app's audio such as the music from the Music app will not be mixed with your app audio when it plays.
    • カテゴリオプション AkAudioSessionCategoryOptionMixWithOthers (以下参照) を使用している場合には、アプリのオーディオは、他のオーディオアプリがその オーディオ セッション をバックグランドでアクティブ化した際に、他のソースとミックスされます。例えば、音楽アプリで音楽を聞いているユーザーが、あなたのアプリに切り替えると、その音楽なあなたのアプリのオーディオにミックスされます。しかし、 AkAudioSessionCategoryAmbient のように, Wwiseでミュートするよう設定されたアプリからのBGMは (詳細は ユーザーミュージック(BGM)やDVRの取り扱い を参照)、このオプションでは出力されません。
    • このカテゴリは、適切に設定されたアプリのplistファイルと共に使用すると、アプリがバックグランドへ切り替えられている間も、オーディオの再生/録音が可能になります。ボイス録音アプリや音楽プレイヤーアプリなどバックグランドでのオーディオ処理のサポートが必要なアプリの場合、このモードはこれを可能にする、Wwiseがサポートする唯一のモードです。これを行うにはしかし、アプリのオプション plist で、Required background mode keyを一つ設定して「 App plays audio or streams audio/video using Airplay 」フィールドを追加する必要があります。
    • This category should only be used for applications that require microphone input.
  • AkAudioSessionCategoryPlayback: Equivalent to the iOS audio session AVAudioSessionCategoryPlayback category
    • Used for audio playback only.
    • App audio is not silenced when the Ring/Silent switch is activated (that is, when 'Lock' is pressed).
    • アプリのオーディオは、他のオーディオアプリがその オーディオ セッション をフォアグラウンドでアクティブ化すると中断されます。
    • By default, this category does not use the overridden AkAudioSessionCategoryOptionMixWithOthers option (see below) and other app's audio such as the music from the Music app will not be mixed with your app audio when it plays.
    • このカテゴリは、適切に設定されたアプリのplistファイルと共に使用すると、アプリがバックグランドへ切り替えられている間も、オーディオの再生/録音が可能になります。If your app needs to support background audio processing, such as in a voice recording app or a music player app, this mode is the only Wwise-supported mode that allows it. これを行うにはしかし、アプリのオプション plist で、Required background mode keyを一つ設定して「 App plays audio or streams audio/video using Airplay 」フィールドを追加する必要があります。
    • This category should only be used for applications that require audio to be played while in the background and do not need microphone input.

上記に挙げた オーディオ セッション カテゴリに加えて、あるカテゴリのデフォルト挙動はカテゴリのオプションを使用してオーバーライドすることができます。

オーディオ セッション カテゴリオプションは、 enum AkAudioSessionCategoryOptions で設定できます:

  • AkAudioSessionCategoryOptionMixWithOthers: iOS オーディオ セッション AVAudioSessionCategoryOptionMixWithOthers カテゴリオプションと同等
    • Use only with the AkAudioSessionCategoryPlayAndRecord and AkAudioSessionCategoryPlayback categories.
    • デフォルトのカテゴリ挙動をオーバーライドして、オーディオを他のミックス可能なオーディオアプリとミックス可能にします。
  • AkAudioSessionCategoryOptionDuckOthers: iOS オーディオ セッション AVAudioSessionCategoryOptionDuckOthers カテゴリオプションと同等
    • Use only with the AkAudioSessionCategoryPlayAndRecord and AkAudioSessionCategoryPlayback categories.
    • 実行中のアプリの オーディオ セッション がアクティブの場合、 他のアプリからのオーディオを「ダッキング」できます。
  • AkAudioSessionCategoryOptionAllowBluetooth: iOS オーディオ セッション AVAudioSessionCategoryOptionAllowBluetooth カテゴリオプションと同等
    • AkAudioSessionCategoryPlayAndRecord カテゴリとのみ使用できます。
    • 録音中に、Bluetoothデバイスを使用できる入力ルートにできます。
  • AkAudioSessionCategoryOptionAllowBluetoothA2DP: iOS audio session AVAudioSessionCategoryOptionAllowBluetoothA2DP カテゴリオプションと同等
    • AkAudioSessionCategoryPlayAndRecord カテゴリとのみ使用できます。
    • Allows paired Bluetooth A2DP devices to be available input routes when recording.
  • AkAudioSessionCategoryOptionDefaultToSpeaker : iOS オーディオ セッション AVAudioSessionCategoryOptionDefaultToSpeaker カテゴリオプションと同等
    • AkAudioSessionCategoryPlayAndRecord カテゴリとのみ使用できます。
    • このオプションを使用し、その他のオーディオルートが使用できない場合には、アプリのオーディオはデバイスの組み込みスピーカーから再生されます。これが使用されず、他のオーディオルートが使用できない場合には、アプリのオーディオはレシーバーから再生されます。
    • このオプションは、レシーバーがあるiPhoneのみに関連します。これは、iPadならびにiPodには影響を与えません。

iOS オーディオイベントのWwiseでの仕組み

iOSデバイスでは、特定の数のユーザーアクション、もしくはシステムイベントは、あなたのアプリがデバイスのオーディオハードウェアを使っている間に発生します。例えば、着信通話では、ユーザーがあなたのアプリを他のアプリに切り替え、鳴っている可聴のタイマーのアラート、ユーザーが差し込み口へ/からヘッドフォンを接続/接続を切る、またはユーザーが着信/サイレントスイッチを押すことは、あなたのアプリのオーディオの挙動に影響を与えるイベントである可能性があります。このセクションでは、そのようなイベントに対するiOSの異なる仕組み、ならびにそれがWwiseを通じてアプリに伝えられるかを示します。

Three main families of events relevant to audio exist in iOS: foreground/background transitions, interruptions, and route changes.

Foreground/Background Transitions

The behavior of the sound engine when the application is sent to background by the OS depends on the Audio Session category.

In Ambient and Solo Ambient categories, the audio session is deactivated while in the background, therefore the Sound Engine suspends itself. This means no audio is processed and no API calls are serviced. これはAppleのガイドラインに従い、バッテリーを節約するための対応です。つまり、あなたのゲームも、処理を一時停止し、 AK::SoundEngine コールを一切コールしないようにする必要があります。When the application comes back to the foreground, the sound engine is resumed and any queued API calls are processed. All these operations happen automatically.

In PlayAndRecord and Playback categories, going to the background does not interrupt audio. The audio continues to be processed and API calls are serviced as usual. This behavior can be changed by setting the AkAudioSessionBehaviorSuspendInBackground flag in the eAudioSessionBehavior parameter of the platform initialization settings. When this flag is set, the sound engine suspends itself when the app goes to the background, the same as the Ambient and Solo Ambient categories above.

Interruptions

Different system events or user actions can lead to the deactivation of the app's audio session, even when it is in the foreground. This is referred to as an audio session interruption. Such interruptions occur, for example, when receiving an incoming phone call or when Siri is activated.

No matter which audio session category is chosen, the sound engine automatically suspends audio rendering during the interruption. However, API calls are still processed, so this mode effectively acts as a global mute. When the interruption ends, audio rendering resumes automatically.

If your application must be aware of these interruptions, and your game engine does not expose them, you can set a callback function in AkPlatformInitSettings.audioCallbacks.interruptionCallback. そうしないと、サウンドエンジン側から見て、これらのイベントに対処するためにできることは、何もありません。

Wwiseは、これらの中断を受け取るとサウンドエンジン コンポーネントの中断/再開処理を行い、適切な オーディオ セッション のアクティブ化/非アクティブ化のためのユーザー側のアクションはこれ以上必要ありません。If specific processing is required in the SDK client app when the audio session is either interrupted or resumed (for example, to update UI elements or give visual feedback for the interruption), the code must be added to the application callback described above.

注意: 「begin」オーディオ中断コールバックは内部的にサウンドエンジンを停止する前に呼び出されて期待される結果が保証できないので、いずれの種類のオーディオの再生にも使用してはなりません
注意: ユーザーオーディオ中断コールバックは、UIまたはオブジェクトプロパティの更新などの単純なタスクに使用することのみを意図しています。これは、CUPに負荷をかける処理や、時間のかかる演算には決して使用しないでください。そのような場合、期待される結果は保証されません。

Route Change

オーディオルートは、デバイスの異なるオーディオハードウェアコンポーネントを通る、与えられたオーディオの経路です。例えば、ユーザーがヘッドセットのプラグを入れたり、外したりすると、オーディオルートは変更されます。サウンドの出力はヘッドセットに送られるか、もしくはデバイスのスピーカーから出る代わりに停止されるかのいずれかになるからです。iOSは、 AVAudioSessionRouteChangeNotification を登録したアプリに、ルートの変更を通知することができます。

Apple オーディオ セッション は、ヘッドフォンのプラグに入れる/外すなどのイベントなどの基本的なルート変更が起きた場合、自動的に実装アプリの オーディオ セッション のアクティブ化/非アクティブ化の処理をします。 The Wwise SDK does not offer any callback mechanism other than the interruption case described above. ユーザーのアプリがそのようなルートの変更を検知して、そのアプリで特定の要素を反映する必要がある場合には、Integration Demoを参照して、これを簡単に行う方法の例を参照してください。


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう