目次
Wwise SDK 2018.1.11
|
イントロダクション
ゲームのインタラクティブミュージックを作成する時、音楽のビートに関する情報が必要です。サウンドエンジンから、ミュージック通知を使用してこの情報を要求することができます。ビートは、再生中の主要な音楽セグメントによって決定されます。セグメントには様々な拍子があるので、再生中の音楽によってビートが変化します。再生中の音楽がない場合は、通知は行われません。
ミュージックコールバックには、以下の2種類がある。
- ミュージック通知: 現在の音楽生成プロパティを呼び出された側に通知する。
- ミュージック プレイリスト セレクション: ミュージック プレイリスト セレクションの次のアイテムを、呼び出された側に強制することができます。
ミュージック通知の使い方
音楽に関するマーカー通知を受信したい場合は、アプリケーションを設計する時に注意しなければならない特殊事項があります:
- フォローしたいビートの音楽を含む再生イベントをポストする時、次のフラグを1つ以上追加することができます:
イベント終了時に通知を受信したい場合、フラグはビット単位の排他であるため、AK_EndOfEvent
| AK_MusicSyncBeat
を使用する必要があります。
- コールバック関数は、次の形式でなければなりません:
- コールバック関数が呼び出された時、まずどのタイプの通知が渡されたのか確認する必要があります。例えば、
AK_MusicSyncBar
通知を処理したいだけであれば、他のイベントタイプを受信した場合には返す必要があります。 - 通知の種類に基づいて、適切な情報構造型に
in_pCallbackInfo
を型キャストすることができます。ミュージック通知の場合は、AkMusicSyncCallbackInfo です。
- 覚え書き
- 複数のミュージック通知を要求すると、これらは追加的に送信されます。つまり、
AK_MusicSyncBeat
とAK_MusicSyncBar
の両方に4/4拍子で登録すると、バーごとに4つのビート通知+バー自体でバー通知1つを受け取ることになります。"0" 拍子も1ビートおよび1バーと数えられ、ほとんどのケースで、AK_MusicSyncEntry
も同様です。よって、バー、ビート、エントリーポイントを登録した場合、音楽が開始すると3つのコールバックを連続して受け取ることになります。 - テンポは次の式を用いて計算することができます:Tempo (in BPM) = 60.0 / fBeatDuration
- 拍子の上限値は、次の式を用いて計算できます:Upper value = fBarDuration / fBeatDuration。 これにより、1つのバー内にビートがいくつあるかを知ることができます。
-
AK_MusicSyncExit
通知は、再生中セグメントの終端に到達した場合にのみ送信されます。再生中のセグメントが終了する前にに別のセグメントに音楽がスイッチする場合、現行のAK_MusicSyncExit
通知は送信されません。
ミュージックコールバックの使い方
上記に示したコールバック関数で、ミュージック プレイリストの次のアイテムの選択を手作業での管理にも使用できます。これは次のフラグを追加することで実行できます。
この種類のイベントを受け取った場合、コールバック関数はパラメーター in_pCallbackInfo
を、 AkMusicPlaylistCallbackInfo型へ型変換する必要があります。
アクティブなプレイリストノードは、数値 playlistID
が示します。サウンドエンジンは、コールバック関数の呼び出しの前に、プレイリストノードの次のアイテムを選択します。このセレクションは、 uPlaylistSelection
ならびに uPlaylistItemDone
の数値に含まれています。もし、uPlaylistItemDone
が 0 にセットさている場合には、 uPlaylistSelection
がプレイリストノードで再生する次のアイテムを決定します。もし、 uPlaylistItemDone
に 0 が設定されていない場合には、現在のプレイリストノードが終了します (親ノードがアクティブノードになりま)。uPlaylistSelection
ならびに uPlaylistItemDone
の両方の数値を、コールバック関数によって変更することができます。
通知の遅延
通知は、バッファがハードウェアに引き継がれた時に送信されます。つまり、通知の送信時とその再生時の間に一定の遅延が起こります。この遅延により、アプリケーションは、マーカーに関する情報を収集し、マーカーと関連付けられたサウンドが実際に再生される前にこれを処理する余裕を得ることができます。
この遅延はプラットフォーム依存であることにご注意ください。
コールバックスレッド
コールバックは、サウンドエンジンのメインスレッドから実行されます。つまり、アプリケーションは、必要な情報を通知から収集し、即時に返さなければなりません。なんらかの処理が必要な場合は、通知から関連情報がコピーされた後に別のスレッドで実行されなければなりません。
アプリケーションがスレッドを長く保持しすぎると、サウンドエンジンがアンダーラン状態に陥り、出力が再生を停止する可能性があります。
- 参照
- 統合の詳細 - イベント