リロード | 新規新規 編集編集 差分差分 添付添付 バックアップバックアップ | 一覧 検索 最終更新 改名 | ヘルプ | 最終更新のRSS |

MIDI Rules の変更点


 *MIDI Rules日本語簡易リファレンス [#title]
 
 #contents
 
 **MIDI Rulesとは? [#whats_midirules]
 
 「MIDI Rules」は高機能なテキストベースのコマンド定義型MIDIフィルターソフトです。
 情報が少ないため、著者が独自で調査し、日本語で簡易リファレンスを作成しました。
 そのため、不明な点や間違いなどもありますが、ご了承ください。
 
 MIDI Rulesのダウンロードはこちら。
 http://cycokraut.wordpress.com/midi-rules/
 
 **基本的なコマンド [#command]
 
 -''package {name}''
 ルール定義ファイルの名称を定義します。
 ルール定義ファイル内(*.drl)の冒頭で1つだけ記述します。
 半角英数文字のみ使用可能です。
 ただし、半角ハイフン「-」を使用すると実行時にエラーになります。
 
 -''expander {filename}''
 コマンド拡張用の定義ファイルのファイル名を指定します。
 ルール定義ファイル内の冒頭で1つだけ記述します。
 半角英数文字のみ使用可能です。
 通常は「''MidiRules.dsl''」を定義しておけば問題ありません。
 
 -''rule "{name}"''
 ルール名{name}を定義します。
 endとワンセットのブロックとして、ルール定義ファイル内で幾つでも記述できます。
 同じルール名を複数使用することは出来ません。
 
 -''when''
 thenで記述されたコマンドを実行するための条件を記述します。
 コマンドは何行でも記述できます。
 thenとワンセットで、ルール内で1つだけ記述できます。
 
 -''then''
 whenで記述された条件に基づいてコマンドを実行します。
 コマンドは何行でも記述できます。
 whenとワンセットで、ルール内で1つだけ記述できます。
 
 -''end''
 ルールを終了します。
 Rules "{name}"とワンセットのブロックとして、ルール定義ファイル内で幾つでも記述できます。
 
 -''/* */''
 コメントです。 /* と */ で囲まれた文字列は実行時に無視されます。
 ルール定義ファイル内であれば、どこにでも記述可能です。
 
 -''#''
 コメントです。 #以降の文字列は実行時に無視されます。
 ルール定義ファイル内であれば、どこにでも記述可能です。
 
 
 
 **when以降で使用可能なコマンド [#command_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メッセージ>#midi_message_list]]の1バイト目(10進数)を参照のこと。
 --{data1}=データ1 [[代表的なMIDIメッセージ>#midi_message_list]]の2バイト目を参照のこと。
 --{data2}=データ2 [[代表的なMIDIメッセージ>#midi_message_list]]の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}の条件比較を行います。
 
 --''条件比較コマンドの説明''
 数学記号で言うところの「≦」「≧」は存在しません。
 「is greater than」「is less than」を列挙することで範囲指定となります。
 「1から100まで」としたい場合は「is greater than 0」「is less than 101」と記述します。
 
 ---''AAA is equal to BBB''
 AAAの値がBBBと等しい場合(数学記号で言うところの「AAA=BBB」)
 
 ---''AAA is not equal to BBB''
 AAAの値がBBBと等しくない場合(数学記号で言うところの「AAA≠BBB」)
 
 ---''AAA is greater than BBB''
 AAAの値がBBBより大きい場合(数学記号で言うところの「AAA>BBB」)
 
 ---''AAA is less than BBB''
 AAAの値がBBBより小さい場合(数学記号で言うところの「AAA<BBB」)
 
 -''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以降で使用可能なコマンド [#command_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メッセージ>#midi_message_list]]の1バイト目(10進数)を参照のこと。
 --{data1}=データ1 [[代表的なMIDIメッセージ>#midi_message_list]]の2バイト目を参照のこと。
 --{data2}=データ2 [[代表的なMIDIメッセージ>#midi_message_list]]の3バイト目を参照のこと。
 
 --{channel}、{command}、{data1}、{data2}に下記の変数を記述することで、それぞれの値を引き継ぐことができます。
 また、これらの変数に対して+ nや- nなどで四則演算を行うことも可能です。
 
 ---received_message_channel
 ---received_message_command
 ---received_message_data1
 ---received_message_data2
 ---received_message_midi_port
 ---received_message_time
 
 -''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}を表示します。
 
 
 
 **注意事項 [#attention]
 -値を三桁(例えば1を001などと)で記述すると誤動作しやすくなるようです。
 -不明なコマンドについてですが、おそらくMIDIメッセージの送信を遅延させたりするのが目的ではないかと思われます。
 whenで遅延させるための条件やタイマーの初期化、thenで実際に遅延させる、といった使い方なのかなあ、と…
 
 
 **サンプル [#sample]
 
 ***サンプルその1(MIDI-THRU ルール定義ファイル全景) [#sample01]
 
  /*
  MIDI THRU Sample
  */
  
  # 対応機種名(半角英数文字 ハイフン使用不可)
  package MIDI_THRU
  
  # 弄らないでください!
  expander MidiRules.dsl
  
  # ここから下はMIDI処理定義文です
  
  # MIDI-THRU機能
  rule "Midi through"
  	salience -100				# salience(実行優先度)のデフォルト値は0です。
  	when					# このルールは-100であるため、一番最後に処理されます。
  		Receive short message			# MIDIメッセージ受信
  	then
  		Pass message throu to midi out 1	# 何もせずMIDIポート1にデータをスルーします
  		Consume received message		# MIDIメッセージ受信終了
  end
 
 ※空のテキストファイルにこのサンプルをコピー&ペーストし、
  「''midithru.drl''」等のファイル名でルール定義ファイルとして保存後、
  MIDI Rulesに読み込んで実行させることで、MIDIスルー機能が動作します。
  ルール定義ファイルを自作する際のテンプレートに応用すると便利かと思われます。
 
 
 
 ***サンプルその2(CC#11エクスプレッションをCC#7ボリュームに置換する ルール部分のみ) [#sample02]
  rule "CC11 to CC7"
  	when	
  		Receive short message			# MIDIメッセージ受信
  		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		# MIDIメッセージ受信終了
  end
 
 
 
 ***サンプルその3(ベロシティの最大値を100以上出ないようにする ルール部分のみ) [#sample03]
  rule "Velocity Control"
  	when	
  		Receive short message			# MIDIメッセージ受信
  		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で固定する data1(ノートNo.)は引き継ぐ
  		Send short message to midi out 1 , command : 144 , data1 : received_message_data1 , data2 : 100
  		Consume received message		# MIDIメッセージ受信終了
  end
 
 
 
 ***サンプルその4(初期設定にて環境変数を定義する ルール部分のみ) [#sample04]
  rule "Initaliziation"
  	when
  		Initialization
  	then
  		Create variable "test"		# 変数testを定義
  		Set variable "test" to 1		# testに1を代入
  		Log "Setup Finished!"			# コンソールに文字列を表示する
  end
 
 
 
 ***サンプルその5(環境変数や四則演算を用いた条件動作的な何か ルール部分のみ) [#sample05]
  rule "nazo"
  	when
  		Variable "test" is equal to 1		# 環境変数testが1の場合
  		Receive short message			# MIDIメッセージ受信
  		command is equal to 176		# MIDIメッセージがコントロールチェンジのとき
  		data1 is equal to 120			# コントロールチェンジが120のとき
  	then					# MIDI-CC#値を-20してからMIDIポート1のチャンネル4に送信する data2の値は引き継ぐ
  		Set Variable "test" to 0		# 環境変数testに0を代入
  		Send short message to midi out 1 with channel : 4 , command : 176 , data1 : received_message_data1 -20 , data2 : received_message_data2
  		Consume received message		# MIDIメッセージ受信終了
  end
 
 
 
 **代表的なMIDIメッセージ [#midi_message_list]
 
 ,メッセージ,1バイト目(16進数),1バイト目(10進数),2バイト目,3バイト目,例
 ,ノートオン(発音),0x90,144,ノート番号(0-127),ベロシティ(0-127),0x90 60 127
 ,ノートオフ(消音),0x80,128,ノート番号(0-127),ベロシティ(0-127),0x80 60 127
 ,コントロールチェンジ,0xB0,176,CC番号(0-127),値(0-127),0xB0 11 127(CC#11 エクスプレッション)
 ,プログラムチェンジ(音色変更),0xC0,192,音色番号(0-127),---,0xC0 80
 ,ピッチベンド,0xE0,224,下位7ビット,上位7ビット,0xE0 0 0
 ※記載にあたり、http://codezine.jp/a/article/aid/172.aspx を参考にしました
 
 
 
 **関連サイト [#sites_link]
 
 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_address]
 
 Dee!(AVSS,VJ TeraBytes)
 d909@music.clubbbq.com ←アットマークを半角文字にしてください
 http://mixi.jp/show_profile.pl?id=196562
 
 
 
 **コメント等ございましたらこちらにどうぞ [#comments]
 #comment

(HTML conversion costs 0.003 sec.)