Yggdrasil Seeds : Software Works : DualMusik : 拡張コマンド
PV[1156179]
0
SMF format2用のシーケンス番号に相当するものだが、DualMusikでは特に意味はない。
そのままプレイヤに引き渡す。
1
任意の文字列で、特に意味はない。
そのままプレイヤに引き渡す。
2
トラック番号→シーケンス順に検索して初めに見つかるものに限り、著作権情報として保存される。また、これで保存されたものは格納位置に関わらず最初(言語コード,文字セット名が存在する場合はその次)にプレイヤに引き渡す。これ以外のものについては、単なる文字列として扱われ、そのままプレイヤに引き渡す。
3
トラック番号→シーケンス順に検索して初めに見つかるものに限り、曲名として保存される。また、これで保存されたものは格納位置に関わらず最初(言語コード,文字セット名,著作権情報が存在する場合はその次)にプレイヤに引き渡す。これ以外のものについては、単なる文字列として扱われ、そのままプレイヤに引き渡す。
4
楽器名と決められているが、実際は単なる文字列として扱われ、そのままプレイヤに引き渡す。
5
歌詞と決められているが、実際は単なる文字列として扱われ、そのままプレイヤに引き渡す。
6
マーキングテクストと決められているが、実際は単なる文字列として扱われ、そのままプレイヤに引き渡す。
7
キューポイントと決められているが、実際は単なる文字列として扱われ、そのままプレイヤに引き渡す。
32~33
廃止らしい。どっちにしてもDualMusikでは使わないけど。
一応、プレイヤには渡しとく。
47
SMFのトラック終了イヴェント。DualMusikでは特に意味はないが、本来あってはならないものであるため、送信を抑制する。
81
SMF形式で格納されたテンポを解釈して設定する。プレイヤにはテンポ設定コマンドとして渡し、メタイヴェントとしては送出しない。
84
SMPTE設定ということだがよくわかんない。もちろん、DualMusikでは使わない。そのままプレイヤに引き渡す。
88
拍子と決められているが、DualMusikでは使わない。そのままプレイヤに引き渡す。
(V0.24以降)
ステップカウンタの設定に使われる。また、設定時に余りステップが存在する場合は小節数が強制的にカウントアップされる。
89
調号と決められているが、DualMusikでは使わない。そのままプレイヤに引き渡す。
127
シーケンサ依存イヴェントとなってはいるが、勝手に機能を割り当てて使用していいものでもなさげ。一応、そのままプレイヤに引き渡す。
128
(V0.26以降)
DS WAVE用PCMファイルのロード。実際には、文字列をファイル名としてDUMPLAY.DLLのコールバック cbloadpcm に渡す。
ロード先のプログラム,ノート番号を選択するために、予めセッティングレジスタ#102でターゲットを設定しておく必要がある。
DS WAVE用ワークエリアが確保されていない場合,同時に使える波形数が足りない場合、このコマンドは無視される。
(V0.40以降)
予めセッティングレジスタ#115#117を設定しておくことで、ロードするPCMの中身を変えることもできる。これらの値は一時的なもので、当コマンドの実行後自動的に0に戻る。
129
(V0.26以降)
ロードしたDS WAVE用PCMを多重に使えるようリソースを複製する。実際には、データの1バイトめで指定された回数ぶんDUMPLAY.DLLのコールバック cbduppcm を呼ぶ。
複製先のプログラム,ノート番号を選択するために、予めセッティングレジスタ#102でターゲットを設定しておく必要がある。
DS WAVE用ワークエリアが確保されていない場合,データがない場合,データに0が指定された場合,PCMがロードされていない場合,同時に使える波形数が足りない場合、このコマンドは無視される。
(V0.30以降)
このデータは符号付き整数として扱われる。-1~-128が指定された場合はリソースを減らすことを意味し、必要回数分DUMPLAY.DLLのコールバック cbfreepcm が呼ばれる。もしリソースが再生中である場合は、その前に cbstoppcm が自動的に呼ばれる。この機能はリアルタイム性が維持できなくなる場合があるので使用は推奨しない。
130
(V0.30以降)
セッティングレジスタ#102で指定されたターゲットのPCMを鳴らす。
データサイズは0~5バイトの可変長で、足りないぶんは0とみなされる。
1バイトめは0でワンショット,1でループ再生となる。
2~5バイトめはmsec単位の再生時間をビッグエンディアンで記述する。
当該リソースが全て使用中である場合、FIFOで強制解放したものを使う。
131
(V0.30以降)
セッティングレジスタ#102で指定されたターゲットのPCMを1つ消す。
データサイズは0~4バイトの可変長で、msec単位のフェードアウト時間をビッグエンディアンで記述する。
データがない場合や、0を記述した場合はフェードアウトせず直ちに消す。
当該リソースが複数使用中である場合、解放するリソースはLIFOで選ばれる。
132
(V0.40以降)
ストリーム再生の準備を始める。実際には、文字列をファイル名としてDUMPLAY.DLLのコールバック cbopenstr に渡す。
準備処理はバックグラウンドで行う。準備完了を待つには、拡張コマンド#137を使う。
予めセッティングレジスタ#131#133を設定しておくことで、ロードするPCMの中身を変えることもできる。これらの値は一時的なもので、当コマンドの実行後自動的に0に戻る。
133
(V0.40以降)
ストリームを破棄する。
134
(V0.40以降)
ストリーム再生を開始する。ストリームが準備中であるときの動作は不安定なので、必ず拡張コマンド#137で準備完了を待ってから実行すること。
データサイズは0~4バイトの可変長で、msec単位のフェードイン時間をビッグエンディアンで記述する。データがない場合は 0 として扱われる。
ストリームが終端に達した場合、自動的に停止する。ただし、実際の停止位置は再生環境に依存するため、不定となる。
135
(V0.40以降)
ストリームの再生を停止する。
データサイズは0~4バイトの可変長で、msec単位のフェードアウト時間をビッグエンディアンで記述する。データがない場合は 0 として扱われる。
実際に停止するまで待つときは拡張コマンド#137を使う。
136
(V0.22 rel.1以降)
拡張コントロールで使用するユーザ波形。
トラック毎に1つ設定可で、設定済みのものは上書きされる。
1ポイントを1バイト(&81=-1.0 ~ &00=原点 ~ &7f=+1.0; &80は&81と同等に扱う)で記述し、255ポイントまで指定できる。
137
(V0.30以降)
次のステップで同期コールバック cbsync が呼ばれる。コールバックから未完了通知が来ている間、シーケンスの再生を停止する。
データの1バイトめで同期の種別(-128~+127)を表し、関数にそのまま渡される。0以上はDualMusik用に予約しており、今のところ以下の用途と決まっている。任意の目的で使いたい場合は0未満を使う。
0: PCMストリーム準備完了確認
1: PCMストリーム再生完了確認
コールバックが設定されていない場合、常に同期が完了したものとして扱われる。
[補足]
同期待ちは多重登録できない。同ステップで複数の登録があった場合、後に登録したもののみ有効となる。

(V0.40以降)
H コマンドと同様に、直後のコマンドから有効となる。
138
(V0.40以降)
PCMストリームの音量を設定する。データサイズは0~6バイトの可変長で、長さにより意味付けが変わる。
データがない場合は16384として扱う。1バイトの場合、0~128の値を128倍したものが使われる。2バイトの場合は0~16384の値がそのまま使われる。
3バイト以上の場合は音量指定の2バイトに加え、3バイトめ以降にmsec単位の補間時間をビッグエンディアンで記述する。
139
(V0.40以降)
PCMストリームの定位を設定する。データサイズは0~6バイトの可変長で、長さにより意味付けが変わる。
データがない場合は0として扱う。1バイトの場合、-64~+64の値を256倍したものが使われる。2バイトの場合は-16384~+16384の値がそのまま使われる。
3バイト以上の場合は音量指定の2バイトに加え、3バイトめ以降にmsec単位の補間時間をビッグエンディアンで記述する。
140
(V0.40以降)
PCMストリームの音程を設定する。データサイズは0~6バイトの可変長で、長さにより意味付けが変わる。
データがない場合は0として扱う。1バイトの場合、-128~+127の値を256倍したものが使われる。2バイトの場合は-32768~+32767の値がそのまま使われる。
3バイト以上の場合は音量指定の2バイトに加え、3バイトめ以降にmsec単位の補間時間をビッグエンディアンで記述する。
141
(V0.45以降)
PCMストリームの次回ディコード位置を変更する。
既にディコード済みのサンプルは依然として再生対象である。
データは可変長の文字列で、全て10進数で書かれた場合はサンプル単位となる。':'が含まれる場合、両側の数は分:秒と解釈される。'.'が含まれる場合、数は秒単位の小数と解釈される。
値を省略した場合は0(始端)として扱う。

再生開始位置を設定したい場合は拡張コマンド#134よりも前に記述する。

(注)
この機能はDS8OUT.DLL用プラグが対応していないと使えない。未対応の場合、設定は無視される。

142
(V0.45以降)
PCMストリームの終了位置を設定する。
データは可変長の文字列で、全て10進数で書かれた場合はサンプル単位となる。':'が含まれる場合、両側の数は分:秒と解釈される。'.'が含まれる場合、数は秒単位の小数と解釈される。
値を省略した場合は0(設定解除)として扱う。

設定を確実に行うためには、拡張コマンド#134よりも前に記述する。再生を開始してから変更しようとすると、設定される前に設定位置を越えてディコードが完了してしまう場合がある。

(注)
この機能はDS8OUT.DLL用プラグが対応していないと使えない。未対応の場合、設定は無視される。

143
(V0.45以降)
PCMストリームのループ範囲を設定する。
データは可変長で、','で区切った2つの数値を文字列で記述する。1つしかない場合は開始位置を指定し、終了位置はサンプル終端であると解釈される。
どちらの値も、全て10進数で書かれた場合はサンプル単位となる。':'が含まれる場合、両側の数は分:秒と解釈される。'.'が含まれる場合、数は秒単位の小数と解釈される。
値を省略した場合は0(始端~終端)として扱う。
なお、サンプル指定と秒指定は混在できない。そのような記述をした場合は無効となる。

設定を確実に行うためには、拡張コマンド#134よりも前に記述する。再生を開始してから変更しようとすると、設定される前に設定位置を越えてディコードが完了してしまう場合がある。

(注)
この機能はDS8OUT.DLL用プラグが対応していないと使えない。未対応の場合、設定は無視される。

144~146
(V0.47 Rel.3以降)
セッティングレジスタ#102で指定されたターゲットのPCMにエンヴェロープを設定する。コマンド番号はエンヴェロープチャネルに対応し、#144=音量,#145=定位,#146=音程となる。
設定データは24バイト固定で、内訳は以下の通り。
0: オンフラグ
1: オフフラグ
 bit0~2: アルゴリズム(0=線形,1=遅歪→スプライン,2=線形→スプライン,3=早歪→スプライン,
       4=ベジェ,5=スプライン→遅歪,6=スプライン→線形,7=スプライン→早歪)
 bit3~4: レヴェル設定値単位(0=1/100,1=1/10,2=等倍,3=10倍)
 bit5~6: レート設定値単位(0=1msec,1=10msec,2=100msec,3=1sec)
 bit7: エンヴェロープ有効
2: コモンフラグ
 bit0: ノートオフに移行した時点のエンヴェロープ値をオフレヴェルの初期値とする
 bit1: ノートオフに移行した時点のエンヴェロープ値に合わせてオフレヴェル全体を減衰させる
 bit2: ヴェロシティセンシティヴィティをオンレヴェルの初期値にも反映させる
3: 未使用(0固定)
4: ヴェロシティセンシティヴィティ(オンレヴェル)
5: ヴェロシティセンシティヴィティ(オフレヴェル)
6: ヴェロシティセンシティヴィティ(オンレート)
7: ヴェロシティセンシティヴィティ(オフレート)
 ヴェロシティを1まで落としたときの設定値倍率(0=1/16,64=1倍,127=16倍)
8~11: オンレヴェル設定値(-128~+127)
12~15: オフレヴェル設定値(-128~+127)
16~19: オンレート設定値(0~255)
20~23: オフレート設定値(0~255)
190
(V0.45以降)
トラック番号→シーケンス順に検索して初めに見つかるものに限り、言語コードとして保存される。また、これで保存されたものは格納位置に関わらず最初にプレイヤに引き渡す。これ以外のものについては、単なる文字列として扱われ、そのままプレイヤに引き渡す。
言語コードはHTMLのlang属性ライクな仕様で、ISO 639で定義されたA2またはA3のコードを使用する。方言指定を入れる場合は - を追記し、その後にISO 3166で定義された地域コードか独自の地域名を繋げて表す。
例えば、日本語は ja-JP となる。方言なら ja-osaka でも ja-2ch でもお好きなように。大文字と小文字の区別はないが、慣例的に言語コードは小文字、地域コードは大文字、独自の地域名は小文字で書くのが普通みたい。
191
(V0.45以降)
トラック番号→シーケンス順に検索して初めに見つかるものに限り、文字セット名として保存される。また、これで保存されたものは格納位置に関わらず最初(言語コードが存在する場合はその次)にプレイヤに引き渡す。これ以外のものについては、単なる文字列として扱われ、そのままプレイヤに引き渡す。
文字セット名はIANA仕様に準じる。これも大文字と小文字を区別しない。
ここに何を書き入れるのが正しいかはエディット環境に依存するため、一概にはいえない。
調べる方法としては、DMSソースをHTMLにしてMozilla FireFoxで表示し、メニューの表示(V)/文字エンコード(C)で文字化けしないエンコードを選んでみるとか。因みにIEじゃだめっす。charset表記が独自のものなんで。

[補足]
DUMFE.EXEでは今のところ、Shift_JISとUTF-8に対応している。ただし、UTF系文字セットは言語指定が必須。Unicodeは単体じゃ言語が特定できなくてフォントが選べない罠。
この他にも、ISO-2022-JPやEUC-JPも使えそうではある。これはInternetExplorerの機能に依存しているため、環境によっては使えない。因みに自分の環境ではEUC-JPが駄目だった。
あと、日本語以外の文字セットについては文字化けが酷い。AnsiStringに詰め込むとき勝手な変換を施してくれるらしい。VCLだめぽ。

192~255
ユーザ定義用。プレイヤ独自の機能(例えば、リズムゲームのイベントとか)をシーケンス側から操作する場合に使う。
ゲームへの組み込み用など限定された用途で使うためのものであるため、一般公開用のデータに使ってはならない。


[表紙] [前] [次]