Wwise SDK 2019.2.15
|
SDK API は、MIDI イベントをサウンドエンジンにポストする関数を提供します。ポストされる可能性のあるThe types of MIDI イベントの種類は以下の通りです:
MIDI イベントがサウンドを生成するには、ターゲットとなるシンセサイザーが必要です。このシンセサイザーは、プロジェクトのアクターミキサー階層でWwiseユーザーが作成したWwiseオブジェクトのコレクションです。 ノートオンイベントは、通常ターゲットのアクターミキサーオブジェクト、またはその子孫の1つを再生します。再生されると、アクターミキサーオブジェクトは次の事柄で停止します:
AK::SoundEngine::PostMIDIOnEvent の "PostMIDIOnEvent" 関数は、MIDIイベントをサウンドエンジンのキューに入れます。この関数は引数として次を受け取ります:
サウンドエンジンは、ポストされたMIDIイベントをシーケンスにグループ化します。 各シーケンスは次によって特定します:
従って、同じMIDIイベント(複数可) を複数のターゲットに同時にポストすることも可能です。例えば、次のような例を考えてみましょう:
MIDIイベントME1をGameオブジェクトGOのあるEV1にポストすると、サウンドエンジンは MIDIイベントME1をMIDIシーケンス W0-GOとW1-GOに追加します。 MIDIイベントME2をイベントEV2にポストすると、サウンドエンジンはMIDIイベントME2をMIDIシーケンスW0-GOに追加します。
AK::SoundEngine::PostMIDIOnEvent の呼び出しは、MIDIイベントをMIDIシーケンスに追加します。 しかしながら、AK::SoundEngine::RenderAudio() 関数が呼び出されるまではイベントの処理が実行されません。AK::SoundEngine::RenderAudioへの各呼び出しは、メッセージキューを処理し、 オーディオフレームをいくつでも生成できますが、直近RenderAudioからどれくらいの時間が経過しているかに依存します。RenderAudioが生成する各フレームについては、サウンドエンジンはフレーム一つ毎にすべてのMIDIシーケンスを前に進めます。
各MIDIシーケンスを、サウンドエンジンがアプリケーションが意図する的確なタイミングで再生することは重要です。MIDIシーケンスをサウンドエンジンにポストする方法は二つあります。
全体のMIDIシーケンスが既知であり、MIDIシーケンスのタイミングに変更がないとわかっている場合、MIDIシーケンス全体をAK::SoundEngine::PostMIDIOnEventを一度呼び出すだけでポストすることができます。
しかしそうでない場合には、MIDIシーケンスを各フレームで更新する必要があります。AK::SoundEngine::PostMIDIOnEvent 関数は、アプリケーションのどの時点でも、どこでも呼び出すことはできます。 しかし、メインのオーディオスレッド以外で呼び出すと、同期に問題が発生します。AK::SoundEngine::PostMIDIOnEvent の呼び出しは、イベントのみをサウンドエンジンのメッセージキューでポストします。このメッセージキューは、AK::SoundEngine::RenderAudioの呼び出し中に処理され、そのような呼び出しは幾つかの処理されたオーディオフレームへと続きます。 適切な同期を行うには、アプリケーションが次のようにグローバルコールバック関数を登録することを推奨します:
登録された関数は、各オーディオフレームでサウンドエンジンに呼び出されます。アプリケーションんはコールバック関数を使用して、サウンドエンジンが処理するオーディオフレームの最新状態を追跡します。 従って、MIDIイベントをコールバック関数にポストすると、確実に適切な同期が行われます。
AK::SoundEngine::StopMIDIOnEvent "StopMIDIOnEvent" 関数を呼び出して、MIDIシーケンスを停止します。 この関数は、イベントID (Event ID) と ゲームオブジェクト ID (Game Object ID) をパラメータとして受け入れます。 いずれのパラメータも、ワイルドカードとして機能するために無効な値をセットすることができます。従って、if both Event ID ならびに Game Object ID の両方に無効な値をセットすると、すべてのMIDIシーケンスが停止します。
この関数の呼び出しは、MIDIシーケンス(複数可)をクリアして、いずれのサウンドの再生を停止します。
MIDIの統合の例は、 クイックスタートサンプル統合 - MIDI を参照してください。