Platform SDK: DirectX

ミュージック値と MIDI 音符

DirectMusic スタイル内のパターンの音符は、固定された音符ではない。これらの音符は、現在の演奏モードとサブコード レベルに応じて現在のコードに転調されたときにだけ実際の音符となる、ミュージック値である。

ミュージック値は、音符の意図的な役割を表すものである。たとえば、ミュージック値で、音符をコードの 2 番目の位置、1 つ上のスケールで演奏するように指定することができる。このミュージック値が特定のコードに適用されると、そのコードの 2 番目で、1 つ上のスケールの適切な MIDI 音符に変換される。

[C++]

ミュージック値のデータ形式の説明については、DMUS_NOTE_PMSG を参照すること。

[Visual Basic]

ミュージック値のデータ形式の説明については、DMUS_NOTE_PMSG を参照すること。

コードに対して音符がどのように解釈されるかは、演奏モードによって異なる。たとえば、モードが DMUS_PLAYMODE_NORMALCHORD の場合、音符はコードのルート音に基づいて、コードとスケールの音程として解釈される。モードが DMUS_PLAYMODE_FIXEDTOKEY の場合、音符は線形な値として解釈される。

[Visual Basic]

各演奏モードの詳細については、CONST_DMUS_PLAYMODE_FLAGS を参照すること。

サブコード レベルは 0 〜 31 の値で、ミュージック値の確立に使用できるサブコードを決定する。DirectMusic コードは 1 つまたは複数のサブコードで構成され、複数の平行するコード進行を使って複雑な和音が可能となる。各サブコードは、1 つまたは複数のレベルをサポートする。オーサーは、各サブコードでサポートされるレベルを定義する。

セグメントが演奏されるときに、各音符は DMUS_NOTE_PMSG 型にカプセル化される。この型の midiValue メンバは、通常、シンセサイザに送信される MIDI 音符値を保持する。メッセージには、転調で使用される演奏モードとサブコード レベルや、オリジナルのミュージック値も保持される。

ミュージック値と演奏モードは、主にツールに関連があるが、これらは DirectX for Visual Basic ではサポートされていない。DirectMusicPerformance.SendNotePMSG を使って音符をパフォーマンスに挿入する場合、DMUS_NOTE_PMSG 型で目的の midiValue を指定し、musicValueplayModeFlags、および subChordLevel メンバは無視する。

次のコード例では、メッセージを送信して、直ちに中間の C を演奏している。

' perf は、DirectMusicPerformance を表す。
Dim note As DMUS_NOTE_PMSG
 
note.midiValue = 60
note.mtDuration = 500
note.flags = DMUS_NOTEF_NOTEON
note.velocity = 127
Call perf.SendNotePMSG(0, DMUS_PMSGF_REFTIME, 1, note)
[C++]

各演奏モードの詳細については、DMUS_PLAYMODE_FLAGS を参照すること。

サブコード レベルは 0 〜 31 の値で、ミュージック値の確立に使用できるサブコードを決定する。DirectMusic コード (DMUS_CHORD_PARAM または DMUS_CHORD_KEY 構造体で表される) は、1 つまたは複数のサブコードで構成され、複数の平行するコード進行を使って複雑な和音が可能となる。各サブコードは、1 つまたは複数のレベルをサポートし、DMUS_SUBCHORD 構造体の dwLevels メンバで指定する。オーサーは、各サブコードでサポートされるレベルを定義する。

セグメントが演奏されるときに、各音符は DMUS_NOTE_PMSG 構造体にカプセル化される。この構造体の bMidiValue メンバは、通常、シンセサイザに送信される MIDI 音符値を保持する。メッセージには、転調で使用される演奏モードとサブコード レベルや、オリジナルミュージック値も保持される。ツールはこの情報を使って、音符を自由に変更することができる。たとえば、ツールは特定の演奏モードで転調される音符を割り込んで取得したり、演奏モードを変更することができる。また、IDirectMusicPerformance::MusicToMIDI メソッドを使って新しい MIDI 音符を取得したり、メッセージの bMidiValue メンバが渡される前に新しい値を設定することもできる。

MusicToMIDI メソッドは、DirectMusic のスタイル再生メカニズムの中心である。このメソッドはスタイル トラックによって呼び出され、コード トラックの現在のコードを使って、内部のミュージック値を音符に変換する。

ツールで処理を反転させ、別のコード、演奏モード、またはサブコード レベルを使って MIDI 音符から新しいミュージック値を取得する場合は、IDirectMusicPerformance::MIDIToMusic メソッドを呼び出す。新しいミュージック値は、音符メッセージの wMusicValue メンバに格納され、ほかのアプリケーション定義ツールで利用できる。ただし、DirectMusic 出力ツールはこれを無視し、通常どおり bMidiValue の音符を演奏する。