- 追加された行はこの色です。
- 削除された行はこの色です。
代表的なMIDIメッセージ
,メッセージ,1バイト目,2バイト目,3バイト目,例
,ノートオン(発音),0x9n,ノート番号(0-127),ベロシティ(0-127),0x90,60,127
,ノートオフ(消音),0x8n,ノート番号(0-127),ベロシティ(0-127),0x80,60,127
,プログラムチェンジ(音色変更),0xCn,音色番号(0-127),---,0xC0,80
,コントロールチェンジ(音量),0xBn,CC番号(0-127),値(0-127),0xB0,---,127
,ピッチベンド,0xEn,下位7ビット,上位7ビット,0xE0,0,0
コマンド定義型MIDIフィルターソフト「MIDI Rules」の日本語簡易リファレンス
http://cycokraut.wordpress.com/midi-rules/
■基本的なコマンド
package {name}
ルール定義ファイルの名称を定義します。
半角英数文字が使用不可です。
ただし、半角ハイフンを使用すると実行時にエラーになります。
ルール定義ファイル内(*.drl)の冒頭で1つだけ記述します。
expander {filename}
コマンド拡張用の定義ファイルのファイル名を指定します。
通常は「MidiRules.dsl」を定義しておけば良いです。
ルール定義ファイル内の冒頭で1つだけ記述します。
rule "{name}"
ルール名{name}を定義します。 endとワンセットで、ルール定義ファイル内で幾つでも記述できます。
同じルール名を複数使用すると実行時にエラーになります。
when
thenで記述されたコマンドを実行するための条件を記述します。 コマンドは何行でも記述できます。
thenとワンセットで、ルール内で1つだけ記述できます。
then
whenで記述された条件に基づいてコマンドを実行します。 コマンドは何行でも記述できます。
whenとワンセットで、ルール内で1つだけ記述できます。
end
ルールを終了します。 Rules "{name}"とワンセットで、ルール定義ファイル内で幾つでも記述できます。
/* */
コメントです。 /* と */ で囲まれた文字列は実行時に無視されます。
ルール定義ファイル内であれば、どこでも記述可能です。
#
コメントです。 #以降の文字列は実行時に無視されます。
ルール定義ファイル内であれば、どこでも記述可能です。
■when以降で使用可能なコマンド
salience {value}
ルールの実行優先度を設定します。 0が初期値で、-を指定すると実行優先度が下がります。
Initialization
ルールの初期化を行います。 主に環境変数の初期設定を行う場合等に使用します。
Receive short message
MIDIメッセージを受信します。
Receive short message with channel : {channel} , command : {command} , data1 : {data1} , data2 : {data2}
MIDIメッセージを受信します。 条件指定が可能です。
{channel}=MIDIチャンネル 範囲は1-16です。
{command}=MIDIメッセージ 代表的なMIDIメッセージの1バイト目(10進数)を参照のこと。
{data1}=データ1 代表的なMIDIメッセージの2バイト目を参照のこと。
{data2}=データ2 代表的なMIDIメッセージの3バイト目を参照のこと。
Receive short message on midi in {midi_in_number} with channel : {channel} , command : {command} , data1 : {data1} , data2 : {data2}
MIDIメッセージを受信します。 入力MIDIポート番号と条件指定が可能です。
{midi_in_number}=入力MIDIポート番号 MIDI Rulesの動作開始時に質問されるMIDIポートの一覧で番号が確認できます。
midi in is equal to {value}
入力MIDIポートの条件比較を行います。
channel is equal to {value}
channel is greater than {value}
channel is less than {value}
MIDIチャンネルの条件比較を行います。
command is equal to {value}
MIDIメッセージの条件比較を行います。
data1 is equal to {value}
data1 is greater than {value}
data1 is less than {value}
MIDIメッセージのdata1の条件比較を行います。
data2 is equal to {value}
data2 is greater than {value}
data2 is less than {value}
MIDIメッセージのdata2の条件比較を行います。
Variable "{name}" is equal to {value}
Variable "{name}" is not equal to {value}
Variable "{name}" is greater than {value}
Variable "{name}" is less than {value}
環境変数{name}の条件比較を行います。
条件比較コマンドの説明です。
aaa is equal to bbb
aaaの値がbbbと等しい場合(数学記号で言うところの「aaa=bbb」)
midi in、channel、command、data1、data2、Variableで使用可能。
aaa is not equal to bbb
aaaの値がbbbと等しくない場合(数学記号で言うところの「aaa≠bbb」)
Variableで使用可能。
aaa is less than bbb
aaaの値がbbbより小さい場合(数学記号で言うところの「aaa<bbb」)
command、data1、data2、Variableで使用可能。
aaa is greater than bbb
aaaの値がbbbより大きい場合(数学記号で言うところの「aaa>bbb」)
command、data1、data2、Variableで使用可能。
数学記号で言うところの「≦」「≧」は存在しません。
「is greater than」「is less than」を列挙することで範囲指定となります。
「1から100まで」としたい場合は「is greater than 0」「is less than 101」と記述すれば良いです。
tagged with {name}
不明
tagged with {name} : {value}
不明
time is at least {ms} later then {other_time}
不明
time is at most {ms} later then {other_time}
不明
Timer "{name}"
不明
■then以降で使用可能なコマンド
Send short message to midi out {midi_out_number} with channel : {channel} , command : {command} , data1 : {data1} , data2 : {data2}
MIDIメッセージを送信します。 条件指定が可能です。
{midi_out_number}=出力MIDIポート番号 MIDI Rulesの動作開始時に質問されるMIDIポートの一覧で番号が確認できます。
{channel}=MIDIチャンネル 範囲は1-16です。
{command}=MIDIメッセージ 代表的なMIDIメッセージの1バイト目(10進数)を参照のこと。
{data1}=データ1 代表的なMIDIメッセージの2バイト目を参照のこと。
{data2}=データ2 代表的なMIDIメッセージの3バイト目を参照のこと。
{channel}、{command}、{data1}、{data2}に下記の変数を記述することで、それぞれの値を引き継ぐことができます。
また、これらの変数に対して+ nや- nなどで四則演算を行うことも可能です。
received_message_channel
received_message_command
received_message_data1
received_message_data2
Send short message in {delay}ms to midi out {midi_out_number} with channel : {channel} , command : {command} , data1 : {data1} , data2 : {data2}
MIDIメッセージを送信します。 送信するまでの遅延時間と条件指定が可能です。
{delay}=送信するまでの遅延時間(msec)
Send short message "{key}" in {delay}ms to midi out {midi_out_number} with channel : {channel} , command : {command} , data1 : {data1} , data2 : {data2}
MIDIメッセージを送信します。 送信するまでの遅延時間と条件指定が可能です。
{key}=不明
Pass message throu to midi out {midi_out_number}
MIDIメッセージをスルー(そのまま送信)します。
{midi_out_number}=出力MIDIポート番号 MIDI Rulesの動作開始時に質問されるMIDIポートの一覧で番号が確認できます。
Trigger timer "{name}" at time {time}
不明
Trigger timer "{name}"
不明
Trigger timer "{name}" in {delay}ms
不明
Consume timer "{name}"
不明
Tag received message with {name}
不明
Tag received message with {name} : {tag_value}
不明
Consume received message
MIDIメッセージの受信を終了します。
Create variable "{name}"
環境変数{name}を宣言します。
同じ環境変数名を複数宣言すると実行時にエラーになります。
Set variable "{name}" to {value}
環境変数{name}に値{value}をセットします。
Log "{message}"
コンソール画面に文字列{message}を表示します。
■注意事項
コマンドの値を三桁(例えば1を001などと)で記述すると誤動作しやすくなるようです。
不明なコマンドについてですが、おそらくMIDIメッセージの送信を遅延させたりするのが目的ではないかと思われます。
whenで遅延させるための条件やタイマーの初期化、thenで実際に遅延させる、といった使い方なのかなあ、と…
■代表的なMIDIメッセージ
,メッセージ,1バイト目(16進数),1バイト目(10進数),2バイト目,3バイト目,例
,ノートオン(発音),0x9n,144,ノート番号(0-127),ベロシティ(0-127),0x90 60 127
,ノートオフ(消音),0x8n,128,ノート番号(0-127),ベロシティ(0-127),0x80 60 127
,コントロールチェンジ,0xBn,176,CC番号(0-127),値(0-127),0xB0 11 127(CC#11 エクスプレッション)
,プログラムチェンジ(音色変更),0xCn,192,音色番号(0-127),---,0xC0 80
,ピッチベンド,0xEn,224,下位7ビット,上位7ビット,0xE0 0 0
※記載にあたり、http://codezine.jp/a/article/aid/172.aspx を参考にしました
■サンプルその1(MIDI-THRU ルール定義ファイル全景)
/*
MIDI THRU Sample
*/
# 対応機種名(半角英数文字 ハイフン使用不可)
package MIDI_THRU
# 弄らないでください!
expander MidiRules.dsl
# ここから下はMIDI処理定義文です
# MIDI-THRU機能
rule "Midi through"
salience -100 # salience(実行優先度)のデフォルト値は0です。
when # このルールは-100であるため、一番最後に処理されます。
Receive short message # メッセージ受信
then
Pass message throu to midi out 1 # 何もせずMIDI-CH 01にデータをスルーします
Consume received message # メッセージ受信終了
end
■サンプルその2(CC#11エクスプレッションをCC#7ボリュームに置換する ルール部分のみ)
rule "CC11 to CC7"
when
Receive short message # メッセージ受信
channel is equal to 1 # MIDIチャンネルが1のとき
command is equal to 176 # MIDIメッセージがコントロールチェンジのとき
data1 is equal to 11 # コントロールチェンジが11のとき
then # MIDI-CC#値を7に置換してMIDIポート1に送信する data2の値は引き継ぐ
Send short message to midi out 1 , command : 176 , data1 : 7 , data2 : received_message_data2
Consume received message # メッセージ受信終了
end
■サンプルその3(ベロシティの最大値を100以上出ないようにする ルール部分のみ)
rule "Velocity Control"
when
Receive short message # メッセージ受信
channel is equal to 1 # MIDIチャンネルが1のとき
command is equal to 144 # MIDIメッセージがノートオンのとき
data1 is greater than 0 # ノートの範囲が1-127のとき(0以上)
data1 is less than 128 # ノートの範囲が1-127のとき(128以下)
data2 is greater than 100 # ベロシティの範囲が101-127のとき(100以上)
data2 is less than 128 # ベロシティの範囲が101-127のとき(128以下)
then # ベロシティを100で固定する
Send short message to midi out 1 , command : 144 , data1 : 7 , data2 : 100
Consume received message # メッセージ受信終了
end
■サンプルその4(初期設定にて環境変数を定義する ルール部分のみ)
rule "Initaliziation"
when
Initialization
then
Create variable "test" # 変数testを定義
Set variable "test" to 1 # testに1を代入
Log "Setup Finished!" # コンソールに文字列を表示する
end
■関連サイト
MIDI Rulesの動作に必要なSun Microsystems社のJavaのダウンロードサイト
http://www.java.com/download
MIDI Rulesとの併用が推奨されている仮想MIDIポートドライバ「Maple Virtual MIDI Cable」の配布先
http://www.hurchalla.com/Maple_driver.html
仮想MIDIポートドライバ「MIDI-YOKE」とGUI型MIDIフィルターソフト「MIDI-OX」の配布先
http://www.midiox.com
MIDI RulesとBCD2000でTraktorを快適に操作!
http://wiki.nothing.sh/page/memo/BCD2000
MIDI RulesとX-Session Proでfireflyを快適に操作!(拙作)
http://wiki.nothing.sh/page?FIRE%20CONTROL%20XSP
■これを作った奴の連絡先
Dee!(AVSS,VJ TeraBytes)
d909@music.clubbbq.com ←アットマークを半角小文字にしてください
http://mixi.jp/show_profile.pl?id=196562
■コメント等ございましたらこちらにどうぞ
#comment