バージョン
Wwise SDKを使用して、あなたのオーディオアプリで簡単、そして正確に オーディオ セッションを管理するためには、特定の簡単なステップが幾つか必要になります。Wwiseは、ユーザーがアプリの本質に集中できるよう、 iOS オーディオ セッションの複雑な部分を影で処理します。すべてのオーディオの中断、ソースの変更の仕組みは、既にWwiseが内部的に処理し、関連するコールバックはエンドユーザー側の完全なオプションとなっています。 これらの場合のサウンドエンジンの停止ならびに再開も、SDKが処理します。
Integration Demoは、 異なるオーディオ セッションパラメーターの設定ならびに初期化方法と、 オーディオ中断コールバックならびにオーディオのルート変更の登録方法を学ぶ最適な出発点と言えます。それらすべてのステップは、IntegrationDemoAppDelegate.mm
ソースファイルにあります。
アプリのオーディオ セッションを設定し、異なる利用可能なコールバックを使用するには:
struct AkInitSettings
struct AkPlatformInitSettings
struct AkPlatformInitSettings::AkAudioSessionProperties
メンバを使用して、eCategory、 eCategoryOptions、および eMode を、望みの オーディオ セッション カテゴリー に、オプションのオーバーライドオプションと、モードと共に設定します。
|
Note:
|
|
Note:
|
以下、iOS オーディオ セッションに完全の互換性のある基本的なオーディオアプリを簡単に作成するために、いずれのWwise SDK ユーザーアプリもが必要とする簡単なステップです:
struct AkPlatformInitSettings.audioSession.eCategory
を、希望する値で設定する。struct AkPlatformInitSettings.audioSession.eCategoryOptions
を、希望する値で設定する (オプション)。struct AkPlatformInitSettings.audioCallbacks.interruptionCallback
を、ユーザー定義のコールバックメソッドに設定する。AKRESULT
callBackName(bool, void*) を形成するための AkAudioSourceChangeCallbackFunc
タイプを考慮する必要があります。trueに設定したサウンドエンジンを停止しますから、
アプリで完全なオーディオエンジンの無効化が必要な場合には、ユーザー中断コールバックで達成できます。 struct AkInitSettings.sourceChangeCallback
を、ユーザー定義コールバックメソッドに設定。AKRESULT
callBackName(bool, void*) を形成するための AkAudioSourceChangeCallbackFunc
タイプを考慮する必要があります。AVAudioSessionRouteChangeNotification
を登録し、これに対するセレクタを提供します (コールバック)AK::SoundEngine::Suspend(false)
を呼び出して、Wwiseを停止します。AK::SoundEngine::WakeupFromSuspend()
を呼び出して、Wwiseを再開しますAkAudioSessionCategoryPlayAndRecord
カテゴリを、先に説明した修正したアプリ情報plistと共に使用します。
|
Note: 上記で説明したステップについての詳細は、iOS Integration Demo IntegrationDemoAppDelegate.mm ソースコートで例を参照してください。 |
|
Caution: 上記のすべてのステップ (フォアグラウンド/バックグランド切り替え処理を除く) は、必ず AK::SoundEngine::Init( &in_initSettings, &in_platformInitSettings ) でサウンドエンジンを初期化する前に行ってください。 |
アプリの状態の切り替え処理は通常、すべてのアプリが実装する必要のある、 UIApplicationDelegate
プロトコルを通じて行われます。Appleの説明書では、アプリは次の5つの状態のいずれかであると示されています:
アプリが、ホームボタンを使用して、または例えば電話に応答する場合にはシステムによって、フォアグラウンドからバックグラウンドへ切り替えられた場合、次のdelegateメソッドが、この順番に呼び出されます:
(void)applicationWillResignActive:(UIApplication *)application
(void)applicationDidEnterBackground:(UIApplication *)application
その逆に、ホームボタンを使用、または以前にアプリを中断した通話を終了するなどで、アプリをバックグラウンドからフォアグラウンドに移動する際には、次のdelegateメソッドが、この順番に呼び出されます:
(void)applicationWillEnterForeground:(UIApplication *)application
(void)applicationDidBecomeActive:(UIApplication *)application
アプリに特定のバックグラウンド処理がない場合、バックグランドの状態になるとまもなく、停止状態に移行します。例えば、システムのメモリ容量が低くなるなどの理由で、iOSからいずれの通知もなく停止する場合もあります。
これらのdelegateは実行アプリケーションに紐付けられているため、Wwise ランタイムはこれに気づくことがありません。従ってこのような状態にすべきではありません。あなたのアプリが、バックグラウンドでサウンドの再生もしくは録音をする必要がなければ、CPUの不必要な処理を制限し、システムのオーディオリソースアクセスの制限により、アプリがクラッシュすることを避けるため、アクティブな状態から離れる前に、サウンドを停止することを強く推奨します。同様に、あなたのアプリがバックグラウンドからフォアグラウンドへ移行しようという場合、アプリがそのオーディオ処理を再開できるよう、サウンドエンジンを再開する必要があります。従って、これらの停止/開始処理は、アプリケーションの (void)applicationWillResignActive:(UIApplication *)application
ならびに (void)applicationDidEnterBackground:(UIApplication *)application
delegate メソッドでそれぞれ行う必要があります。
|
Note: オーディオ セッション カテゴリー AkAudioSessionCategoryPlayAndRecord のみで、アプリがバックグラウンドの状態でのオーディオ再生および/または録音ができます。この動作が必要な場合には、アプリ情報plistをXcode で修正し、'Required background modes' キーに、'App plays audio or streams audio/video using Airplay' 値と共に追加します。 |
幅広いオーディオ セッション共有シナリオで起こる、コールフロー全体を良く理解するために、ここで幾つか例をあげて、Wwise と iOS オーディオ セッションを使用して、アプリ間オーディオを処理する方法を説明します。
applicationWillResignActive()
が呼び出され、AK::SoundEngine::Suspend(bool in_bRenderAnyway)
コールを停止するかは、ユーザーのアプリに任されています。in_bRenderAnyway
を falseを送って、サウンドエンジンのレンダリングを無効にすることを推奨します。
applicationDidBecomeActive()
が呼び出され、ユーザーはAK::SoundEngine::WakeupFromSuspend()
呼び出しを使用して、サウンドエンジンの処理を再開する必要があります。applicationWillResignActive()
が呼び出され、AK::SoundEngine::Suspend(bool in_bRenderAnyway)
呼び出しを使用して、Wwiseサウンドエンジンを停止するかは、ユーザーのアプリに任されています。applicationDidBecomeActive()
が呼び出され、ユーザーは AK::SoundEngine::WakeupFromSuspend()
呼び出しを利用して、サウンドエンジンの処理を再開する必要があります。Ambient
または PlayAndRecord
を'mixable (ミックス可能)' オプションで)、Wwise SDKのソース変更通知は、オーディオ セッションのカテゴリとオプション の説明の通り、バックグラウンドの音楽バスをミュートします。applicationWillResignActive()
が呼び出され、AK::SoundEngine::Suspend(bool in_bRenderAnyway)
呼び出しを使用して、Wwiseサウンドエンジンを停止するかは、ユーザーのアプリに任されています。AkAudioSessionCategoryAmbient
カテゴリーを使って設定されている場合:AkAudioSessionCategorySoloAmbient
カテゴリーを使って設定されている場合:AkAudioSessionCategoryPlayAndRecord
カテゴリーを使って設定されている場合:AkAudioSessionCategoryAmbient
カテゴリーと同様です。