6.5. 変数について


[表紙に戻る] [<<<<<] [>>>>>]


SMCには、変数機能が搭載されています。変数とは、「数値や文字列を格納できるもの」のことです。マクロと似た部分がありますが、「内容が書き換えられる、または自動的に書き換わる」「引数の代わりにのみ使用できる」などにおいて違う部分があります。
変数には、任意の数値または文字列が格納できます。型はありませんが、数値は「32ビット符号付き」の範囲が使用できます。
変数には、ユーザーが自由に内容を書き換えることができる「ユーザー変数」と、SMCが状況に応じて自動的に内容を書き換える「システム変数」があります。

ユーザー変数に値を格納するには、“@?”を使用します。ユーザー変数を使用するには、引数を書くところで“?A”〜“?Z”・“?a”〜“?z”と書きます。以下は、ユーザー変数を使用する例です。

3 @?G,32        ; ?Gに32を格納
3 C?G           ; C32と同じになる
3 @0+?G         ; @32と同じになる

@”命令の値に変数を使うときは、そのまま書くと“@?”命令と同じ表記になってしまいます。これを回避するには、頭に“0+”を付加します。

X”命令の値に変数を使うときは、そのまま書くと変数の内容を文字列として解釈します。これを回避する(数値として解釈させる)ときも、同様に“0+”を付加します。

3 @?A,127       ; ?Aに127を格納
3 X ?A          ; X "127"と同じになる
3 X 0+?A        ; X 127と同じになる

システム変数を使用するには、引数を書くところで“??A”〜“??Z”・“??a”〜“??z”と書きます。以下は、システム変数を使用する例です。

3 @?C,"ABC"     ; ?Cに"ABC"を格納
3 @?B,"DEFG"    ; ?Bに"DEFG"を格納
3 @?D,??W       ; ?Dに??W(文字列?Cに文字列?Bを結合したもの)を格納
                ; @?D,"ABCDEFG"と同じになる

システム変数の多くは、“?A”・“?B”・“?C”を自動的に使用します。ですから、ユーザーが値を保持したいときは、これらを使わないようにしたほうがいいでしょう。
以下は、システム変数の一覧です。

変数名 解説
??A ?AのMSB(ビット13〜ビット7)を返します。
??B ?AのLSB(ビット6〜0)を返します。
??C ?A×?Bを返します。
??D ?A÷?Bを返します。
??E ?A and ?B(論離積)を返します。
??F ?A or ?B(論理和)を返します。
??G not ?A(否定)を返します。
??H ?A << ?B(左シフト)を返します。
??I ?A >> ?B(右シフト)返します。
??J ?A == ?B(等しい)なら1を、そうでなければ0を返します。
??K ?A != ?B(等しくない)なら1を、そうでなければ0を返します。
??L ?A > ?Bなら1を、そうでなければ0を返します。
??M ?A < ?Bなら1を、そうでなければ0を返します。
??N ?A >= ?Bなら1を、そうでなければ0を返します。
??O ?A <= ?Bなら1を、そうでなければ0を返します。
??P 文字変数?C?A文字目のアスキーコードを返します。
??Q 数値変数?Aをアスキーコードとした文字を返します。
??R ?Aの数値内容を10進文字列化したものを返します。
??S ?Aの数値内容を16進文字列化したものを返します。
??T ?Cの文字列内容を10進数値化したものを返します。
??U ?Cの文字列内容を16進数値化したものを返します。
??V ?Cの文字列の?A文字目から?B文字を返します。
??W ?Cの文字列に?Bの文字列を結合したものを返します。
??X ?Aが0なら?Cを、そうでなければ?Bを返します。
??Y
??Z

変数名 解説
??a
??b 現在のピッチベンド値(“@B”)を返します。
??c 現在のチャンネル・プレッシャー値(“@C”)を返します。
??d 現在のディビジョン値(“#DIVISION”)を返します。
??e
??f
??g ?Aをコントロール・チェンジ番号とした場合のコントロール値(@G)を返します。
??h
??i 現在の移調値(“@I”)を返します。
??j
??k
??l 現在の省略時音長(“L”)をMIDIクロック数(mc)単位で返します。
??m
??n
??o
??p 現在の半音分の差に相当するピッチベンドの値を返します。
??q
??r
??s 現在のピッチベンド・センシティビティを返します。
??t
??u 現在の省略時ベロシティ(“U”)を返します。
??v 現在の省略時音量(“V”)を返します。
??w 現在の省略時エクスプレッション(“W”)を返します。
??x 現在の処理トラック番号を返します。
??y 現在の出力MIDIチャンネル(“@Z”)をローランドGS型に変換したものを返します。
CH ??Y
10 0
1〜9 1〜9
11〜16 10〜15
??z 現在の出力チャンネル(“@Z”-1)を返します。


[表紙に戻る] [<<<<<] [>>>>>]