2017-01-23

テクスチュアルMIDIシーケンサーT3 チュートリアル

もくじ
  1. T3を起動する
    1. 動作確認する
  2. メロディーを入力する
  3. 伴奏をつける
    1. 楽譜通りに入力する
    2. コードネームで和音を入力する
    3. コード進行をまとめて入力する
  4. マルチチャンネルとランダムを使う
    1. さらにランダム命令を使う
  5. 保存する
T3tutorial8_2.mp3 ←作例完成品

※画像は開発中のものです

1. T3を起動する

T3のjarファイルをダブルクリックして立ち上げると、ステータスバーの左端に現在のMIDI出力先が表示されています。デフォルトでJAVA組み込みのソフトウェアシンセサイザー「Gervill」が選ばれていますが、仮想MIDIケーブルを通じて音源を鳴らすには、「ファイル」・「設定...」・「MIDI」タブで適切な出力先を選んでください。

動作確認する

上側のテキストエリアをクリックしてアクティブにし、半角英数字で「 0.」(ゼロ・ピリオド)と打ち込みましょう。 それからツールバーの「 MIDI Play 」ボタンをクリックしてみましょう。MIDIチャンネル1、中央ドを一拍鳴らす1秒ほどのMIDIデータが生成され演奏が出力されました。演奏中スライダーが動いたはずです。鳴らしたい音源の音は鳴ったでしょうか。うまくいかないときは、仮想MIDIケーブルや音源の設定を見直してください。

次に、キーボード入力時リアルタイムにMIDI信号を発してみましょう。
MIDI出力先が「Gervill」だとして、ASIOを利用するアプリが他に立ち上がっていないことを確認してください(ASIOはパソコンのオーディオ機能を排他利用するので、ASIO以外の出力先を利用しようとするとエラーを起こすようです)。ステータスバーの「 MIDI ShortMessage 」チェックボックスをチェックしてください。テキストエリアに「 0 」と打ち込むとドの音が出力され、「 ch10@ 0 」などと打ち込むと、GMドラムセットの何かの音が鳴るはずです。うまくいったら、この動作はちょっと重いので、「 MIDI ShortMessage 」のチェックをはずしておきましょう。

2. メロディーを入力する

「はじめに」でお話ししましたように、T3による音楽記法の基本は、音の高さを示す0から9、A、Bの12個の音符と休符r、タイ-の長さが、直後につけたドット.(拍をあらわす)によって決定されるというものでした。このT3記法を使って、近年パブリックドメインになった山田耕筰作品より『ペチカ』を入力してみましょう(ヤマハミュージックメディア『ピアノ・ソロ 日本の抒情歌大全集』より)。

以下の文をT3の上側のテキストエリアに打ち込むか、コピペしましょう。命令類は、綴りがあっていればハイライトされるようになっています。ステータスバーの「MIDI ShortMessage」をチェックしておくと、音符をタイプするごとに発音するので、入力間違いがないか確認しやすいでしょう。Javaの問題だと(勝手に)思うのですが、MIDI環境が不安定になる場合はこのチェックを外しておいてください。
tempo80@ ch1@
r447....9777....r9.^0^09...^2^07-....
r954....0247....0247....024-....
r477....8^2..^09.9. 0247....977-....
T3のリズムは(音符の数 / ドットの数)で決まるので、いろいろな書き方ができます。上の例では、見やすさ重視でだいたい4拍ごとにまとめて書こうとしていますね。でも例えばメロディーの一行目部分は以下のように書いてもいいわけです。
r.4.4.7. 9.7.7.7. r9.^0.^0.9. ^2.^0.7..
三小節目の部分は、波カッコを使うと次のようにも書けます。
r447....9777....{r9}^0^09....^2^07-....
入力もしくはコピペが終わったら、ツールバーの「MIDI」ボタンをクリックしてみましょう。次のように鳴ったでしょうか。ちなみにピアノ音色はフリーのサウンドフォントSalamander Grand Pianoです。

T3tutorial1.mp3

「tempo80@」はテンポを拍あたり80に設定(楽譜では60でした)。指定がなければ120になります。
「ch1@」はMIDIチャンネルの出力先を1に設定。出力先の鳴らしたい音源に合わせてください。指定がなければMIDIチャンネル1として送信されます。
組み込みのソフトウェアシンセサイザーをつかっている場合、tone@命令によって音色を選択できます。VST音源などを使っている場合はVSTホスト側で音色を選ぶことになるでしょうから、混乱を避けるためtone@命令は使わないほうがいいでしょう。

誤った文法で入力するとどうなる?
想定していない入力には弱く、慣れないうちはフリーズ頻発かもしれません。フリーズまでいかなくても、解釈に失敗して直前のMIDIデータを演奏してしまうとか。もし固まってしまってウィンドウも閉じられないというような場合があったら、タスクマネージャー等から何食わぬ顔でどしどし閉じてください。他の何に影響があるというわけでもないだろうと思いますので…

3. 伴奏をつける

上のメロディーに段をつけて伴奏をつけましょう。「T3文法について」の「5.演奏順序のコントロール」をちらっと見ておいていただくといいんですが、段とは、スラッシュ/とセミコロン;に区切られた部分が先頭または直前のセミコロンの位置に返って演奏されるというものです。何段でも重ねられます。また、コロン:は曲の先頭に返ります

楽譜どおりに入力する

まずは楽譜どおりに入力することを考えて、『ピアノ・ソロ 日本の抒情歌大全集』から最初の4小節を引用させていただきますと(編曲 岩間稔)、
tempo60@ ch1@
r447....9777....r9.^0^09...^2^07-....
/ v@ v0r04....543-....(259)....(258)..(47)..;
と四小節まとめて段を作ってもいいですし、
tempo60@ ch1@
r447..../v@ v0r04....;
9777..../v@ 543-....;
r9.^0^09.../v@ (259)....;
^2^07-..../v@ (258)..(47)..;
のように一小節ごとに段を作ってももちろんかまいません。
(v@は段の持続する間オクターブ下げる命令。丸カッコ( )に入れた部分は和音として同時に発音されます。)

T3tutorial2.mp3

コードネームで和音を入力する

手っ取り早くコード進行を耳で確かめたいという場合には、コードネーム入力が使えます(「T3文法について」12.コードネーム入力)。コードネームの部分が丸カッコにはいった和音に変換されるというものです。
tempo60@ ch1@
r447....9777....r9.^0^09...^2^07-....
/ v@p@ C@....F@..Cm@..Dm7@....Ddim@..C@..;
T3tutorial3.mp3

(p@は段の持続する間ヴェロシティを10下げる命令。Ddimは楽譜の表記上Dm-5)
フェルマータを表現する
『ペチカ』には終盤にフェルマータ記号(音を充分に伸ばす)を使った特徴的な部分がありますね。あれがないとペチカじゃないという感じ。段にテンポを変化させる記号Tとtを使って(「T3文法について」9.単文字命令)、あの感じを出してみましょう。
tempo70@ ch1@
r477..../v@p@ C@....;
8^2..^09.9./v@p@ Fm6@..../r...tttttrrrrrrrrrrrTTTTT.;
0247..../v@p@ Am@..C@..;
977-..../v@p@ Gaug@..C@../r..ttttt.rrrrrrrTTTTT.;
T3tutorial4.mp3

こんな感じでしょうか?(…無音部分がカットされてるのをあげてしまいました…)

コード進行をまとめて入力する

伴奏パターンは同じリズムの繰り返しでいいという場合、コードが変わるたびいちいち書き直すのは面倒です。コード先行入力(「T3文法について」13.コード先行入力)を使いましょう。T3文の先頭でコード進行の情報をまとめて記述しておいて(「コードブロック」)、本文から変数のような働きをする記号を使って呼び出すというものです。簡単な伴奏つきの演奏として1コーラス完成させてみましょう。
 // chord@からコロン:までがコードブロック
chord@
C@.... F@..Cm@.. Dm7@.... Ddim@..C@..
Am@.... ..C@.. Am@.... ..C@.. ....
Fm6@.... Am@..C@.. Gaug@..C@.. :
 // 以下本文
tempo70@ ch1@ transpose12@
r447....9777....r9.^0^09...^2^07-....
r954....0247....0247....024-....
r477....;8^2..^09.9./r..tt.tttrrrrrrrrrrrTTTTT.; 0247....;977-..../r..tttt.rrrrTTTT.;
: // コロンで先頭位置に返る 伴奏の繰り返しパターン
transpose-12@
[ p@ vvc0.vc2.(c1c3)p../h....; ]*12@
 // hはホールド(サスティンペダル)記号 pは強弱記号のピアノ
T3tutorial5.mp3

最後の行の繰り返し命令[ ]*12@によって、カッコの中身を12回繰り返し、伴奏部分を作成しています。中身のc0(ルートの)、c1(三度の音)、c2(五度の音)、c3(七度、またはルートの音))という記号によってコードブロックの情報からその時点でのコード構成音を取ってきているわけです。伴奏パートが増えても、このようにして少ない文で手間を省くことができます。

ペダル踏んだままだと音が濁ってしまうところがあるので、繰り返し命令を一部変更して伴奏パターンにバリエーションをつけましょう(「T3文法について」11.角カッコ命令)。
chord@
C@.... F@..Cm@.. Dm7@.... Ddim@..C@..
Am@.... ..C@.. Am@.... ..C@.. ....
Fm6@.... Am@..C@.. Gaug@..C@.. :
 // 以下本文 velocityrandom20@は各音のベロシティをランダムに増減
tempo70@ ch1@ transpose12@ velocityrandom20@
r447....9777....r9.^0^09...^2^07-....
r954....0247....0247....024-....
r477....;8^2..^09.9./r..tt.tttrrrrrrrrrrrTTTTT.; 0247....;977-..../r..tttt.rrrrTTTT.;
: transpose-12@
[ p@ vvc0.vc2.(c1c3)p../h....; ]*1< v@pp@ cd..cd..; >1*1<>1*6<>2@
T3tutorial6,mp3

繰り返し命令に山かっこ<>を使って、二拍でコードチェンジする小節にcd(コードブロックの和音を鳴らす記号)を使っています。このように繰り返しパターンの変化をシンプルな表記で表現することができます。

4. マルチチャンネルとランダムを使う

MIDIチャンネルを加え、のんびりアコースティックなバンドサウンドにしてみましょう。繰り返しの命令にランダム命令を加えて適当に変化させることにします。伴奏をあまり動かしても『ペチカ』に合わないでしょうけれども、説明のため無理やりです。山田耕筰先生の威霊に寛恕を請うのみでございます。
先ほどのピアノの伴奏部分を削り、リズム音とアコースティックギター(といってボイシングがギターのものではないので低いウクレレのようです)、ベース音を足しましょう。
chord@
C@.... F@..Cm@.. Dm7@.... Ddim@..C@..
Am@.... ..C@.. Am@.... ..C@.. ....
Fm6@.... Am@..C@.. Gaug@..C@.. :
 //以下本文
tempo85@ ch1@ velocityrandom15@ transpose12@
r447....9777....r9.^0^09...^2^07-....
r954....0247....0247....024-....
r477....;8^2f..^09.-./r..tt.tttrrrrrrrrrrrrrrrrTTTTT.; 0247....;977-..../r..tttttrrrrrrrrTTTTT..;
 //以下伴奏
: ch2@ [ vc0..vc0.-[-vc2p,1]@.; ]*4<vc0..vc1.-[-vc2p,1]@.;>4<vc0..vc0..;>4@
: ch3@ range7@ lagrandom20@ [ sscd.-SScd.rsscd.-. [rsscd,1]@.SScd.-sscd.-.; ]*6@
: ch10@ [v@ 3.[3-[--3pp,1]@.]*3@/vv@r...1.;]*12@
T3tutorial7.mp3

最後の三行が新たに加えられた三トラックです。

ch2はベース音(Independence Free)で、四拍目のウラにc2(コードの五度音)が入るかどうかを一小節ごとにランダム命令[ ,n]@でランダムに決めています。[ ,n]@で、カンマの前の部分からn個選び出すという操作をやっているわけです。「[-vc2p,1]@」だと「-」か「vc2p」のうちどちらかが1/2の確率で1個選ばれるということ。「,n」がなければ[ ]@の中身を並べ替えます。

ch3は2小節パターンのボサノバ風ギター音(Independence Free)で、2小節目の1拍めにストロークが入るかどうかをランダムに決めています。和音の発音をストローク記号S、sで少しずらし、さらにlagrandom@でランダムに発音タイミングをずらしています。ユルい感じが出て好きです。

ch10はライドシンバルとリムショット(Mulab Free GMDrumSet)。1拍め以外でハネたシンバルが入るかどうかをランダムに決めています。

さらにランダム命令を使う

テンポ他を少し修正して簡単に序間奏をつけます。加えてランダム命令でメロディーを8分音符の譜割りで崩しスイングさせましょう。山田先生ごめんなさい。

 //コード先行入力
chord@
[C@.... F@..Cm@.. Dm7@.... Ddim@..C@..
Am@.... ..C@.. Am@.... ..C@.. ....
Fm6@.... Am@..C@.. Gaug@..C@..]*0<C9@.... >2*1<>4*1@ :
 //以下本文 メロディーをmelo@に代入
[r-4-4-7-....;9-7-..7-7-..;r9^0-..^0-9-..;^2-^0-7---....;
r-9-5-4-....;0-2-4-7-....;0-2-4-7-....;0-2-4---....;
r-4-7-7-....;8-^2-..^09.9-.; 0-2-..4-7-..;9-7-..7-..;]=melo@
 //ピアノメロディー
tempo90@ ch1@ velocityrandom20@ swing40@
transpose12@ [r....]*2@ [melo@,d]@ [r....]*4@ [melo@,e]updown@ -..;
 //ピアノ左手
:transpose-12@ [v@pp@[[c0c1c2(c1c3)(c0c2),2]@rrr---]@....; ]*2*12*3r1*11@
 //テンポのコントロール
:[r....]*29@ r.t.tttt.rrrrrrrrrTTTTTT.;
 //ベース
: ch2@ [ [v@ c0..c0.-[-c2p,1]@.; ]*4<v@ c0..c1.-[-c2p,1]@.;>4<v@ c0..c0..;>4@ ]*0<vc0....;>2*1<>4*1@ -..;
 //ギター
: ch3@ range7@ lagrandom20@ [ sscd.[-SScd]@.rsscd.-. [rsscd,1]@.SScd.-sscd.-.; ]*0r1*6r2*6@
 //パーカッション
: ch10@ [v@ 3.[3-[--3pp,1]@.]*3@/vv@r...1.;]*2*12*4*12@
T3tutorial8_1.mp3 完成品 テイク1

ch1のメロディーにタイを足し(8分音符の譜割りにする)区切り;(ランダムで入れ替える範囲を制限している)を入れ、melo@に代入し、
1コーラスめにランダム命令dタイプ[ ,d]@(タイ休符の位置を入れ替えるが数字音符の順番は変えない)、
2コーラスめにランダム命令eタイプ[ ,e]@(タイ休符の位置と数字音符の順番を変えるデフォルトなので、記号,eは必要ないんですけども)
2コーラスめにはランダム命令のupdownオプションをつけていて、セミコロンで区切られた部分ごとに上昇音形か下降音形かランダムに決めるようになっています。ややもするととっちらかったランダム臭さが整理されます。ただ、updownオプションは数字の大小で並べ替えているだけなので、ハ調以外をきれいに並べ替えるには工夫が必要でしょう。

あと、全体の裏拍の音がピアノのところのswing40@命令によってはねています。アットマーク命令は大体チャンネルごとに効かせることができますが、文の前で使われたアットマーク命令は上書きしない限りその後の文でもずっと効いています(命令によって違う場合があり、その辺まだ整理しきれてないんですけども(汗))。

5. 保存する

上側のテキストエリアに入力された内容は「ファイル」・「保存...」でテキストファイルとして保存できます。
ランダムに生成されたフレーズは下側のテキストエリアに表示されますが、そのままでは保存されませんので、気に入ったものは別タブにコピーするなりして保存してください。
いい感じにできたMIDIデータは「ファイル」・「MIDIファイルを保存...」で保存しましょう。他のシーケンサーやDAWに持っていくときに注意しなければならないのは、T3ではデフォルトでMIDIファイルの先頭に1拍空白が入るようになっていることです(「T3文法について」8.アットマーク命令 marginXX@の項参照)。

2017-01-16

テクスチュアルMIDIシーケンサーT3の導入

もくじ
  1. 動作環境
  2. T3のダウンロード・インストール
  3. T3各部の説明
    1. タイトルバー
    2. メニューバー
    3. ツールバー・スライダー
    4. テキストエリア
    5. ステータスバー
  4. MIDI・VST環境の構築について

1. 動作環境

『Textual MIDI Sequencer T3』はjarファイルで、起動にはJAVA実行環境が必要です。Windows10で動作確認しています。見かけによらずけっこうマシンパワーを使います。

2. T3のダウンロード・インストール

Vectorさんからダウンロードしたzipファイルを解凍します。インストール作業はありませんので、解凍後のフォルダを好きな場所に置くだけです。フォルダ内のT3_X_X.jarをダブルクリックすると立ち上がります。フォルダ内の各フォルダ・ファイルはソフトウェアの動作に必要ですので、誤って削除することのないようにしてください。
T3はフリーソフトウェアですが、いずれ寄付を頂けるしくみにはするつもりです。

3. T3各部の説明

T3を上から順に、5つの部分に分けて説明します。

1. タイトルバー

ソフトウエアの名前が表示されています。

2. メニューバー

3つのメニューがあります。
(1) ファイルメニュー
新規作成...
全てのタブを廃棄して新しくテキストを作成します。
開く...
保存したテキストファイルを現在のタブに開きます。
保存...
作業中タブのテキストをテキストファイルとして保存します。
MIDIファイルを開く...
Standard MIDI Fileを読み込みます。再生は[Replay/Pause]ボタンをクリックします。
MIDIファイルを保存...
生成したMIDIデータをStandard MIDI Fileとして書きだします。
タブを追加
上のタブに移動
下のタブに移動
このタブを削除する
設定...
作業エリア:テキストエリアの使用フォントなどの設定画面
テンキー入力:テンキー部分をキーカスタマイズするための設定画面
MIDI:MIDIデバイスの設定画面
仮想MIDIケーブルはインプットとアウトプットの両方が同じ名前で表示されていて区別できない場合があります(画像内でloopMIDIが二つある)が、おそらく下側にあるほうがアウトプットだと思います(汗)。インプットを選んでも音が出ず無意味なのでアウトプットを選んでください。選択されたMIDIデバイスはステータスバーに表示されます。
色の設定...
テキストエリアの文字色や背景色、ハイライト色などを設定します。該当するタブを選び、「現在の色を取得」ボタンを押すと現在の色がプレビューエリアに表示されます。
(2) 編集メニュー
テキストエディターでおなじみの機能が並んでいます。
「音色表を開く」は、GM音色、GMドラムセット音色を一覧にしたテキストを別タブに開きます。
「スクリプト様式を挿入」は、文内でJavaScriptを使用するための様式サンプルを挿入します。以下の文がテキストエリアに挿入されます。
((script;
function sample(){
rtn = "0245....";
return(rtn);
}
script))
文字列をreturnするJavaScriptのfunction(関数)を一つ書いておくと、その文字列が「((script; ... script))」の部分に置き換わります。サンプルでは「0245....」に置き換わります。
(3) 再生メニュー
下のツールバーでボタン化されているので、ツールバー・スライダーの項を参照してください。
(4) ヘルプメニュー
「オンラインヘルプ」はブラウザでこのサイトを開きます。
「バージョン情報」バージョンを表示します。

3. ツールバー・スライダー

ツールバーとその下のスライダーについて説明します。
「MIDI Play」ボタン
テキストエリアに入力されたT3文をMIDIデータとして解釈しMIDIファイルを新しく生成し、再生します。
「Pause/Replay」ボタン
生成されたMIDIファイルを一時停止・再開します。
[Stop」ボタン
再生を停止します。もう一度クリックするとスライダーが先頭位置に返ります。
「Text」ボタン
ランダムや繰り返しの処理を終えて、MIDIデータとして解釈される前までのT3文を作成します。解釈されたT3文は下側のテキストエリアに表示されます。
リピート開始・終了位置チェックボックス
チェックすると、スライダーの現在位置から開始位置・終了位置を取得します。
リピートチェックボックス
チェックするとリピート再生します。前項の開始・終了位置チェックボックスに数値が入っている場合、その数値間でリピートします。
スライダー
MIDIファイルが生成・再生されると、曲の長さと現在位置を表示します。再生停止中にドラッグして任意の位置から再生できます。

4. テキストエリア

テキストエリアはタブごとに三つあって、上部は入力用エリア、下部右側エリアにはランダム・繰り返し等の処理を終え生の音符になってMIDIデータ化される前のT3文が表示されます。コード先行入力を使った場合は、下の画像内のようにコメントとしてディグリーネーム(I度、II度など)が表示されているでしょう。

デフォルトでは隠してある左下の部分は何かというと、一般的にはあまり使うことはないかもしれませんが、入力エリアに置いたJavaScriptスクリプトを処理した後のT3文が表示されることになっています。スクリプトについては「編集メニュー」の項を参照してください。
入力用エリアでは、命令の綴りやだいたいの理屈があっていると、ハイライトされるので入力の助けになります。コメントアウトと、あと段のセミコロン抜けが最初のうちは多いかなと思うので、ページの最後の段もハイライトするようにしてあります。

5. ステータスバー

左端に使用中のMIDIデバイスが表示されます。画像内の「Gervill」とはJAVA組み込みのソフトウェアシンセサイザーです。
「MIDI ShortMessageチェックボックス」をチェックすると、数字や和音、コードをタイプするごとにMIDI信号を発し音が鳴るようになります。チャンネル命令(ch@)をリアルタイムに認識するのでドラム音など確認しながら入力できて便利ですが、動作が少々重く、不安定になることもあるのでデフォルトでは切ってあります。特に、Windows10でASIO使用中に組み込み音源を鳴らそうとしてチェックするとフリーズするようです。
「MIDI SM Volume」はMIDI ShortMessageの音量コントロールです。

4. MIDI・VST環境の構築について

MIDIデバイスでWindowsやJAVA組み込みのソフトウェアシンセサイザーに出力すれば音は出ますが、それらの音色はあまり面白いものではありません。そうではなく、loopMIDIなどの仮想MIDIケーブルに出力しVSTホストアプリケーションを経由してVSTインストゥルメントを鳴らしてこそ、DTMの楽しさは始まるのだろうと思います。
このサイトは見てくれる方にわりとDTMの知識があることを想定してしまっているのですが、知識はないぞという方は、仮想MIDIケーブルから先のもろもろの導入についてすでに諸先達がたのすぐれた解説サイトがありますので、そちらを参照していただきたいと思います。フリーのMIDIシーケンサーDominoなどの導入と同様のはずです。
全てフリーですますとすれば、
  1. 仮想MIDIケーブルの導入(loopMIDIなど)
  2. ASIO環境の導入(ASIO4All)
  3. VSTホストプログラムの導入(Mulab freeなどフリーのDAW、VSTHost)
  4. フリーVSTインストゥルメント、フリーVSTエフェクトを漁る
というような流れになるでしょうか。

2017-01-06

MIDIテキスト記法 T3の解説

テクスチュアルMIDIシーケンサーT3をコントロールするMIDIテキスト記法T3(十二音テキスト Twelve Tone Text, T3)の文法・記号類について解説します。仕様は予告なく変更してしまう場合があります…
もくじ
  1. はじめに:記号一覧
  2. 音符と音の長さについて
    1. 音符 0 1 2 3 4 5 6 7 8 9 A B
    2. 拍.
    3. タイ・休符 - r
    4. 波カッコ { }
  3. 音高の変更
    1. 付帯命令 V ^
    2. アットマーク命令 v@ ^@
    3. 付帯命令 # b
    4. アットマーク命令 rangeXX@
  4. 和音の表現
    1. 丸カッコ ( )
    2. ストローク S s
  5. 演奏順序のコントロール 段、ページ、曲の先頭
    1. スラッシュ / セミコロン ;
    2. コロン :
  6. コメントアウト
    1. //
    2. /* */
  7. 付帯命令
    1. v ^
    2. ' "
    3. s S
    4. c C k K m M u U d D
    5. $
    6. f p
    7. ` _
    8. ?
    9. ~
  8. アットマーク命令
    1. tempoXX@
    2. chXX@
    3. toneXX@
    4. volumeXX@
    5. velocityXX@
    6. panXX@
    7. transposeXX@
    8. rangeXX@
    9. gateXX@
    10. tpdeltaXX@
    11. pandeltaXX@
    12. f@ p@
    13. `@ _@
    14. pfdeltaXX@
    15. velocityrandomXX@
    16. staccatorateXX@
    17. lagXX@
    18. lagrandomXX@
    19. timebaseXX@
    20. marginXX@
    21. syncopateXX@
    22. swingXX@
    23. beatswingXX@
    24. knineXX@
    25. timeshiftXX@
    26. legatoXX@
    27. notelimitXX@
    28. tildeUU,VV,WW,XX,YY,ZZ@
  9. 単文字命令
    1. h
    2. m
    3. T t
    4. L R
    5. O o
  10. ピッチベンドについて
    1. q
    2. w
    3. a
    4. z
    5. x
    6. pbsXX@
    7. pbrangeXX@
  11. 角カッコ(ブラケット)命令
    1. 繰り返し命令 [ ]*n@
    2. 移調命令 [ ]+n@ [ ]-n@
    3. 代入命令 [ ]=英小文字アルファベットまたは数字による文字列(数字で始まらない)@
    4. ソルフェージュ分析 [ ]analyse@
    5. ランダム命令
    6. [ ]@
    7. [ ,X]@
    8. アクサングラーヴ`をつけたランダム命令
    9. ランダム命令でのアップダウンオプション
  12. コードネーム入力
    1. 分数コード
  13. コード先行入力
    1. c C cd CD
    2. k K
    3. k9 K9
    4. m M
    5. u U
    6. d D
    7. ディグリーネームを使う
    8. キー(スケール)から生成されるコード
    9. 長調と短調のディグリーネーム入力について
    10. key@命令について
    11. コード進行の生成
    12. T S D
    13. P
    14. -
    15. =
    16. R
    17. コードブロックで使える角カッコ命令
    18. key@のリテラルキーに対する移調命令
    19. 繰り返し命令とアクサングラーヴ`
    20. 代入命令
    21. chord@とchord2@

はじめに:記号一覧

まず前提となる文字の使い方なんですが、すべて半角英数字を用い、大文字と小文字を区別します。スペース、改行、タブ、また任意に入れる"|"(小節線的な縦棒)など、使用しない記号は無視されますので、見やすいように自由に整形してください。
T3文で使用する記号類は、およそ以下のように類別されます。
音符・拍・臨時記号
0 1 2 3 4 5 6 7 8 9 A B . - r # b { }
和音
( )
演奏順序のコントロール
/ ; :
コメントアウト
// /* */
四つの命令類
付帯命令
v ^ ' " s S $ c C k K m M u U d D f p ` _ ~ ?
アットマーク命令
tempoXX@ chXX@ toneXX@ volumeXX@ velocityXX@ panXX@ transposeXX@ rangeXX@ gateXX@ pbsXX@ pbrangeXX@ tpdeltaXX@ vldeltaXX@ pandeltaXX@ f@ p@ `@ _@ pfdeltaXX@ velocityrandomrangeXX@ staccatorateXX@ lagXX@ lagrandomrangeXX@ timebaseXX@ marginXX@ syncopateXX@ swingXX@ beatswingXX@ knineXX@ timeshiftXX@ legatoXX@ notelimitXX@ tildeXX,,,,,@
単文字命令
h m T t O o L R q w a z x cd CD
角カッコ命令
[ ]*XX@ [ ]+XX@ [ ]-XX@ [ ]=XX@ [ ]@ [ ]analyse@
コードネーム入力
C@ Cm@ Cdim@ Caug@ Csus4@ Csus2@ C7@ Cm7@ CM7@ Cm7-5@ C7-5@ C7sus4@ CmM7@ Cdim7@ C6@ Cm6@ Cadd9@ Cmadd9@ C69@ Cm69@ Cmaug@ CaugM7@ CM9@ Cm9@ C9@
コード先行入力
chord@ chord2@ key@ chd_triadchordXX@ chd_fourthchordXX@ chd_seventhchordXX@ chd_ninethchordXX@ chd_eleventhchordXX@ chd_thirteenthchordXX@ chd_randomXX@ chd_seventhXX@ chd_subdominantminorXX@ chd_switchmajorminorXX@ chd_secondarydominantXX@ chd_substitutionXX@ chd_ninethXX@

音符と音の長さについて

音符
下の表をピアノの鍵盤1オクターブ分と見立てて、鍵盤と数字の対応を見てください。


0 1 2 3 4 5 6 7 8 9 A B

数字がその鍵盤の音の高さを表します。10進数の数字だけでは足りないので、大文字AとBを10と11の意味で使っています。これらの数字を「音符」と呼びましょう。
拍 .
それら数字(音符)の後ろにドット(ピリオド)をつけて、音の長さを表します。ドット"."を一拍とします。一拍とは、例えば4分の4拍子だとして、四分音符が一個あるという長さですね。(音符の数 / ドットの数)で長さを表現します。
0. // ドが1拍
02. // 8分音符でドレ
024. // 3連符でドレミ
0245. // 16分音符でドレミファ
音符の後ろに複数のドットを置くと、例えば
0... // ドが3拍
02.... // ドが2拍、レが2拍
0000.... // ドの四つ打ち
000.. // ド・ド・ドと2拍3連のリズム
デフォルトで分解能480、つまり1拍が480分割される解像度を持っています。割り切れない数字で分割すると端数は適当に切り捨てることになりますが、まあ実用上は問題ないでしょう。
タイ・休符 - r
「-」はタイです。直前の音、又は前ページの同じ段にある直前の音(「ページ」、「段」については後述)をタイの分だけ伸ばします。和音も伸ばせます。
「r」はレスト、休符です。
0.-2.4.r. // ドが1拍半、レが半拍、ミが1拍、1拍休み
0--2..4r.. // 上と同じ意味
0--24-r-.... // 上と同じ意味(8個の数字音符類が4つのドットの長さで分割されている)
波カッコ  { }
必須というほどの記号ではありませんが、ある局面で使い勝手のあるユーティリティ記号です。例えば装飾音符の入力で手間を省くといった使い方ができます。
{02}45.... // これは次の行のように変換され、
024-5-....
{024}57.... // これは次の行のように変換されます
0245--7--....

音高の変更

単に0と書くと中央ドの意味になりますが、オクターブ上げ下げしたり、音高を変更する命令類をいくつかまとめて紹介します。以下の他にも、transposeXX@命令と、角カッコで移調を指示する命令があります。
付帯命令 v ^
音符の前に小文字のvか、キャレット記号^をつけて( v0, ^^0 )、その一音だけオクターブ上げ(^)下げ(v)します。複数付ければ複数オクターブ上下します。
0.^0.^^0.. 0v0vv0-....
アットマーク命令 v@ ^@
段(後述)内の音符をすべてオクターブ上げ(^@)下げ(v@)します。効果が続くのはその段のみです。複数のv^をつけると複数オクターブ上下します。
vv@ 0.4.7../ 7.5.4.. ; // 前段は2オクターブ低い音、後段はデフォルトの高さ
付帯命令 # b
臨時記号を使わないと気分が出ないという方は、音符の前にシャープ#、フラット(に似たBの小文字)bをつけてください。半音上げ下げします。
023578A^0.... 02b457b9bB^0.... // ハ短調の音階
アットマーク命令 rangeXX@
入力レンジ変更命令と呼んでまして、XXのところに0から11の数字、または0から9,A,Bを入れ、オクターブがどこから始まるかを指定します。
ハ長調の音階を上がっていくとして、デフォルト(range0@)では
range0@
024579B....
と書けば音として「024579B」が鳴りますが、これを例えばrange7@と入れると
range7@
024579B....
音としては「0245v7v9vB」が鳴ります。
キーをG(79B0246)としたとき、デフォルトrange0@で「v7v9vB02467」と書くより、「range7@ 79B0246^7」と書きたい、という気分があるわけじゃないですかぁ...

コード入力を使ったとき、ボイシングの最低音の調整をするのにも使います。また意図しない高さの音が出てしまうときのために、MIDIノートナンバーで音域を指定するアットマーク命令「notelimitXX,XX@」があって、これは指定の音域外の音をオクターブ高くまたは低くして音域内に収めます。

和音の表現

丸カッコ ( )
複数の音符を丸カッコ( )に入れると和音になります。空の丸カッコ()は直前の丸カッコの内容をコピーします。
0.4.7.r.(047)..r.. // ド・ミ・ソ・(゚д゚)(。_。)ウン じゃーん
(047B)().r().()rr().r(). // 各カッコは(047B)をコピーします
ストローク S s
丸カッコの前にSやsを置くことでギターストロークのようなかき鳴らす効果を表現します。Sは後ろから前へ、sは前から後ろへ向かって、音符を少しずつずらして発音します。複数個置くことでかき鳴らしのスピードを調節します。ずらしすぎると音の前後が破たんし始めるでしょう。上の例に使ってみると
ss(047B)SS().rss().ss()rrSS().rss(). //かき鳴らすような感じ

演奏順序のコントロール 段、ページ、曲の先頭

スラッシュ / セミコロン ;
次の文を見てください。
0.4.7../ v@ (047)....; 0.5.9../ v@ (059)....;
セミコロン";"で区切られた部分が二つあって、それぞれの中身がスラッシュ"/"によって二つに分かれていますね。セミコロンで区切られた各部分を「ページ」、スラッシュで区切られた部分を「段」と呼ぶことにします。
何段にも重ねられたオーケストラ用の楽譜を思い浮かべてください。各段は、ページの先頭位置から同時に発音します。セミコロンでページを区切り、次のページに移動します。上の例ではピアノの大譜表のイメージですね、一段目の右手フレーズと同時に二段目のオクターブ下げた和音が鳴り、それが二小節分(4/4拍子だとして)続いてると。
段の先頭にタイがあるとき、例えば二段目の先頭にあるとしたら、前ページの二段目の続きであると解釈します。
角カッコによる繰り返し命令を使ってページを繰り返すとき、最後のセミコロンを忘れがちになるので気をつけてください。
コロン :
コロン":"は曲の先頭位置に返る記号です。
0.4.7.. 0.5.9..
:
v@ (047)....(059)....
MIDIチャンネルごとに入力するときよく使うことになります。

コメントアウト

すでに登場していますが、T3文内に注釈をつけるためのコメントアウト記号があります。
//
//から改行のあるところまでコメントアウトします。
/* */
/*と*/に囲まれた部分をコメントアウトします。

付帯命令

音符の前後に一つ以上つけて音符と一体で解釈される命令類です。
^ v
オクターブ変更命令。音高のところで説明しています。
vv0.^^^0. // 音符の前につけます
v(v047)..
' "
「'」はリターダーと称してまして、これを音符の前につけると発音タイミングを10tick(分解能はデフォルトで四分音符あたり480tick)遅らせます。
「"」はスライサーと称してまして、これを前につけると発音タイミングを10tick早めます。曲の先頭には使えません。何でスライサーかと言いますと、時間をスライスして縮めるイメージ。記号もその感じで選びました。
s S
和音のところで説明した「s」、「S」というストローク命令は、実は上のリターダーとスライサーを組み合わせた文に変換する命令なのでした。
c C k K m M u U d D
chord@やchord2@でコード先行入力されているとき、これらの記号をつけた数字は、その時点でのコードやキーから音を取ってきてしかるべき音符に変換されます。小文字はchord@、大文字はchord2@を参照します。くわしくはコード先行入力の項を参照していただくとして、ここでは簡単に箇条書きしておくと
c C
c0,c1,c2,c3でコードから4つの音を取る
k K
k1,k2,k3,k4,k5,k6,k7でキーから7つの音を取る
k9 K9
k9は特殊な機能を持っていて、先行音と後続音の間のキー音のうち、後続音に一番近い音を取る。特に先行音と後続音の音程差が全音で2度のとき、knineXX@で指示した確率で半音で動く
m M
m0,m1,m2,m3でコードの4つの音を和声法の音域でとる
u U
u1,u2,u3,...で先行音の1度上(同音)、2度上、3度上...のキー音を取る
d D
d1,d2,d3,...で先行音の1度下(同音)、2度下、3度下...のキー音を取る

$
シンコペーションさせる記号。音符の前につけると、アットマーク命令「syncopateXX(,XX)@」のXXに入れた正負のtick数の分だけ音符の発音時が前後に移動します。
f p
音楽記号でいうフォルテ「f」とピアノ「p」です。音符の後ろにつけてベロシティ(音の強さ)を変更します。 ベロシティは最大127で、デフォルトでは97です。 fひとつで10増えるのでfffで最大です。
一定のベロシティで演奏されるMIDI臭さが嫌いだったので、デフォルトで一音ごとランダムにベロシティにばらつきをもたせるようにしてあります。
` _ 
スタッカート「`」とレガート「_」です。音符の後ろにつけます。
スタッカートは発音時間を短くして歯切れよくし、レガートは音符の発音時間いっぱいに音を延ばして演奏します。 発音時間をゲートタイムといい、各チャンネルごとのゲートタイムは@命令で個別に設定できるのですが(デフォルトは全て98%)、スタッカートひとつつけるとその60%の時間だけ発音します。2つつけると0.6*0.6で36%、3つつけると0.6*0.6*0.6で約13になります。

レガートはゲートタイムの設定にかかわらず発音時間を100%にします。
アットマーク命令「legatoXX@」のXXで正負の数字(ティック)を指定しておくと、そのティック数だけ発音時間を延ばすか、短くします。本来の発音時間いっぱいより延ばすことで、音源によりポルタメント(グライド)をかけることができる場合があります。短くするなら効果はスタッカート同様です。
?
音符の後ろにクエスチョンマーク「?」をつけておくと、50%の確率でその音符はタイに変換されます。ランダム命令でいう「[-(音符),1]@」と最終的な効果は同じです。
~
音符の後ろにチルダ「~」をつけておくと、その音符に対してピッチベンドを使った効果がかかります。チルダの数によって効果が変わります。おおまかに次のように考えていただくとよいでしょう。

(音符)~ 上昇+ビブラート
(音符)~~ 下降+ビブラート
(音符)~~~ 上昇→下降、または下降→上昇 +ビブラート
(音符)~~~~ ビブラートのみ

これらの働きをアットマーク命令「tildeUU,VV,WW,XX,YY,ZZ@」でコントロールします。

アットマーク命令

アルファベット+数字+@からなる命令。だいたいはMIDIチャンネルごとに最初に書いておくことになると思いますが、段の途中でも入れられますが、命令の後ろに拍と音符が一つでもないと意味がありません。
tempo数@
デフォルトは120。
ch数@
1から16までのMIDIチャンネルを設定します。何も書かれていない時は、ch1@とみなします。
tone数@
0から127のGM音色をチャンネルごとに設定します。デフォルト0です。GMの音色表がメニューにあります。
volume数@
MIDIボリュームをチャンネルごとに設定。最大127。デフォルト127です。
velocity数@
ベロシティ(音の強さ)はデフォルト101ですが、これをチャンネルごとで変更します。最大127。
pan数@
パンは音を左右に振ります。0側が左、63か64?が中央、127側が右。デフォルトは中央。
transpose数@
音高を変えます。12で一オクターブ上、-24でニオクターブ下になる、等。
range数@
オクターブの開始位置を設定します。音高のところに解説があります。
gate数@
デフォルトのゲートタイム(発音時間)は0.9、90%ですがそれを変更します。 「数」の%で設定されます。8で8%、50で50%、100で100%です。
tpdelta数@ pandelta数@
テンポ変更する単文字命令T・t、パンニング変更する単文字命令L・Rの増減を設定する命令です。デフォルトはそれぞれ10、15。
f@ p@
f@,p@はその段の終わりまで有効なベロシティ変更命令。fpそれぞれ1つに付き10増減します。ベロシティは最大127です。
`@ _@
`@,_@はその段の終わりまで有効なスタッカート、レガート命令。スタッカートは複数使うと発音時間が伸びますが、レガートはいくつでも100%にしかなりません。
pfdelta数@
pfdelta数@はp,f,p@,f@のベロシティ増減分を設定します。デフォルトは10。
velocityrandom数@
velocityrandomrange数@は、発音時のベロシティのランダム減少分を設定します。設定した数字の範囲でランダムにベロシティが減ります。デフォルトは6で入ってます。
staccatorate数@
staccatorate数@はスタッカート「`」の割合を設定します。「数」の1/100%で設定されます。30でゲートタイム(gate数@で設定するやつです)の30%、100で100%の時間発音します。デフォルトは60%で入っています。
lag数@
lag数@はリターダー「'」とスライサー「"」一個あたりの増減ティック数の設定です。デフォルトは10(分解能は四分音符あたり480)です。
lagrandom数@
lagrandomrange数@は、デフォルトで6ティックの範囲で発音タイミングを少しばらつかせるようにしてあるんですが、そのばらつきの範囲を定めます。 大きすぎると、細かい譜割りの整合性が取れなくなるかもしれません。
timebaseXX@
分解能の数値をXXに入れます。デフォルトは480です。
marginXX@
MIDIファイルの先頭には余裕を持たせたほうがいいというようなことが古来?言われていて、T3もデフォルトで480ティック(1拍)休符が入るようになってるんです。でもこのファイルを他のMIDIシーケンサーやDAWで開くとき1拍ずれてるのが煩わしいというとき、XXにmargin0@(余裕なし)とmargin1920@(4/4拍子だとして1小節ぶん)とか入れてください。margin0@だと、先頭のスライサー"の効果は消えるでしょう。
syncopateXX@
音符をシンコペーションさせる付帯命令"$"の移動量をXX(ティック数)で決めます。 例えばsyncopate-120@と入れておくと、$のついた音符は、120は1拍480ティックの四分の一なので、16分音符ぶん前に移動します。syncopate240@とすると、240ティック(半拍)ぶん後ろにずれます。あまり大きくすると整合性が崩れるかも。 XXのところには「XX,XX,XX」とカンマで区切って複数個入れることができて、その場合には、それら候補のうちからランダムに選ばれることになります。
swingXX@
XXのところに「XX,XX,XX」とカンマで区切って複数個入れて、その個数プラス1で拍を区切り、それぞれの位置にある音符の発音タイミングをXXティックぶんずらす、という命令。例えばswing20,0,20@とすると、1拍を四分割し、2個目と4個目の16分音符の発音タイミングが20ティック後ろにずれる、つまり「ハネる」ことになります。マイナスの数字(前にずらす)も使えます。
beatswingXX@
XXのところに「XX,XX,XX」とカンマで区切って複数個入れて、その個数プラス1の拍子の拍の頭の位置をXXティックずらします。例えばbeatswing-30,30@とすると、三拍子の2拍めの頭を30ティック前にずらし、3拍めの頭を30ティック後ろにずらします(マズルカってそういう感じじゃなかったでしたっけ?)。
knineXX@
k9、K9 (付帯命令、コード先行入力の項を参照してください)の半音階変化確率を指示します。数値の意味がいささか変則的なのですが、次のように考えてください。

knine0@ 半音で下降する確率0、半音で上昇する確率0
knine25@ 半音で下降する確率0.5、半音で上昇する確率0
knine49@ 半音で下降する確率さらに高く。半音で上昇する確率0
knine75@ 半音で下降する確率さらに高く。半音で上昇する確率0.5
knine75~ 各確率さらに高く

デフォルトでknine25@が入っています。
timeshiftXX@
正負のティック数をXXに入れておくと、チャンネル全体の発音タイミングがそのティック数だけ前後に動きます。
legatoXX@
レガート「_」をつけた音符の発音時間をティック数で増減します。付帯命令レガート「_」の項を見てください。
notelimitXX@
XXにMIDIノートナンバーを入れると、XXより低い音はXXより高くなるまでオクターブ上げられます。notelimitXX,YY@と入れると、XXについては同様、YYより高い音はYYより低くなるまでオクターブ下げられます。要は音域を指定しているわけです。
tildeUU,VV,WW,XX,YY,ZZ@
付帯命令チルド「~」の働き(ピッチベンド)をコントロールします。カンマで区切った6個の数字によりコントロールする(カンマ5個は必須ですが、デフォルトのままでいい数値は省略可能)のですが、それらの意味は

1個目 チルダの数によって4つのタイプを区別する。1から4 2個目 ピッチベンドの開始位置を-8192から8192で指定する 3個目 ピッチベンドの終了位置を-8192から8192で指定する 4個目 発音時間のうちアタックからどれくらいの時間をかけて変化するかを、パーセント0から99で指定する。タイプ3のときはティック数。タイプ4のときはビブラートの波の速度 5個目 発音時間のうちどれくらい時間が過ぎてからビブラートが出現するかを、パーセント0から99で指定する。 6個目 -8192から8192の数字を入力しておくと、ピッチベンド開始・終了位置から、0からその数字までの値がランダムに引かれる。ランダムに変化幅が小さくなるということ

…ややこしくてすみません。4タイプにデフォルトでどんな数値が入っているかをプログラムから引用しておきます。
tilde1start = -4192;//アタック時のピッチベンド位置
tilde1end = 0;
tilde1speed = 30;//発音時間の30%
tilde1vibrato = 50;//発音時間の50%過ぎてビブラートが出現
tilde1random = 0;

tilde2start = 4192;
tilde2end = 0;
tilde2speed = 30;
tilde2vibrato = 50;
tilde2random = 0;

tilde3start = 0;
tilde3end = 4192;
tilde3speed = 140;
tilde3vibrato = 50;
tilde3random = 0;

tilde4start = -1524;//ビブラートの山or谷
tilde4end = 0;//ビブラートの山or谷
tilde4speed = 110;//100で拍あたり1回?
tilde4vibrato = 30;
tilde4random = 0;

単文字命令

音符と同様に拍の分割計算に入れられる、つまり「長さ」を持っている命令。例えば「s...」で、サスティンペダルを三拍の間踏んでいるという意味になります。音符といっしょの段に混ぜると譜割りが変わってしまいますから、別の段で使うことになるでしょう。すべて英小文字です。
h
サスティンペダル(コントロールチェンジ64)。
m
モジュレーション(コントロールチェンジ1)。大体の音色はビブラートがかかるようです。fとpを使って強弱を変えられます。
T t
Tやtはテンポを変更する単文字命令です。Tはtpdelta数@命令で設定してある増減分(デフォルトは10)テンポを早くします。tは遅くします。テンポは全チャンネルで一つなので、あちこちで混在すると混乱するでしょう。
L R
L、Rはチャンネルごとのパンを変化させる命令です。Lは、pandelta数@命令で設定してある増減分(デフォルトは15)パンを左へ振ります。Rは右です。
O o
Oやo(オー)は付帯命令P,pの単文字命令版ということになりますか。一応クレッシェンド・デクレッシェンドという位置づけになってます。Oはベロシティを大きく、oはベロシティを小さくしますが、これを置く段は効果を効かせたい段の前に置かなければなりません。
アットマーク命令crescXX,YY@によって開始時点のベロシティ値XX、記号1個当たり増分YYを入力できます。

また、アットマーク命令cresc(,)ccXX,YY(,ZZ)@によってMIDIコントロールチェンジXX、MIDIコントロールバリューYY(、記号1個当たりバリュー増分ZZ)を指定できます。Ooには任意のMIDIコントロールチェンジをアサインできるということです。

ピッチベンドについて

ピッチベンドはピッチを連続的に変化させる命令で、単文字命令の一種なのですが、使用するアルファベットが多いのでここに別項目を立てて説明します。長さの概念は単文字命令と同じで、「長さ」を持っていますから拍計算に入れられます。使用するアルファベットはキーボードの左の方にあるやつで、MIDIキーボードのピッチベンドホイールが左についているのと気分的に対応させています。

少々煩雑で使いづらく動作も怪しかったので、もっとシンプルに使える付帯命令チルダ「~」を作りました。ピッチベンドを扱うならそちらのほうがお勧めできます。

q
pbs数@で設定した高さまで、拍の時間をかけてピッチを連続的に上げるたくさんの命令を生成。
w
上がりきったところのピッチに設定する一回きりの命令を出します。上がったところから変化を始めたいときに。
a
元のピッチに戻す一回きりの命令。ピッチを変化させた後、次のフレーズをジャストのピッチで始めたいときなど(その音と同じタイミングで入れてOKです)。また、qとzを使った後もとのピッチに戻ったように聞こえても実は少しずれてるので、これで戻しておきましょう。
z
pbs数@で設定した高さまで、拍の時間をかけてピッチを連続的に下げるたくさんの命令を生成。
x
下がりきったところのピッチに設定する一回きりの命令を出します。 w,a,xは入力した拍より1tick前のタイミングで入るようになっています。 もう一つ細々したことですが、タイで拍の時間を伸ばすと、単位時間あたりの命令数が疎になってしまいます。pbsが大きいと音階を駆け上がってるみたいに…
pbs数@
pbs数@(ピッチベンド・センシティビティ、数は1から12まで)とは、一つのqまたはzで何半音動くか設定する命令で、デフォルトは2。つまり上下に一全音ずつですね。 ピッチを変化させると、もとに戻さなければそのチャンネルはずっと変化したままです。
pbrange数@
ピッチベンドはピッチベンド・センシティビティpbsで定めた音階まで、MIDIの数値上-8192から8192の範囲で動くのですが、その範囲を限定します。少しだけピッチベンドホイールを動かしてる、みたいな感じを考えてください。 0から8192の範囲で入力します。q,z,w,x 各ひとつ分の動く範囲や値が定まります。デフォルトは8192です。

角カッコ(ブラケット)命令

繰り返し、移調、文字列代入の機能があります。だいたい入れ子にできます。 音符類をMIDIデータとして解釈する前までの、テキストの字面を処理している命令で、[MIDI][Text]ボタンを押して下のウィンドウに表示されるのはこの処理が終わった後のテキストです。
繰り返し命令 [ ]*数@
[ ]の中を指定回数繰り返します。rと< >を使ってより便利に使えます。次の例を見てください。
[0.24.5.7.]*8@
 // [ ]*n@で角カッコ内をn回繰り返す
[0.24.5.7.]*3 r1 *3@
 // 3回繰り返し、1回休み(4拍ミュート)、また3回繰り返す
[0.24.5.7.]*3 <7 .54.2.r="">1 *3 <>1 r2 *2@
 // 3回繰り返し、1回違うフレーズを用い(山かっこ< >に入れた部分。フィルインパターンという感じ)、また最初のものを3回繰り返し、同じフィルインパターンをもう1回、で2回休んで最後にまた本体を2回繰り返し。中身のない山かっこは直前の山かっこの内容をコピーするわけです
移調命令 [ ]+数@ [ ]-数@
[ ]の中を、数だけ移調する命令。transpose命令と違って、あるオクターブの範囲を超えては動きません。付帯命令k,Kに使うと、3度下、5度上などハモりラインができます。
代入命令 [ ]=英小文字アルファベットまたは数字による文字列(数字で始まらない)@
演奏内容を文字列、例えば「melody1@」と名前をつけることができ、その文字列「melody1@」で演奏内容を表すことができます。代入、という感じでしょうか。 文字列は、あえてプログラムに他の命令と読み違えらせるよう挑戦するようなものを選ばないでください。
ソルフェージュ分析 [ ]analyse@
コード先行入力がある場合の本文に[ ]analyse@を使うと、[ ]に入れた部分の先頭から、音符がコード先行入力のキーでk1からk7のいずれにあたるかが分析され、結果が下側のテキストエリアにコメントとして出力されます。

ランダム命令
[ ]@
中の音符をランダムに並び替えます。
[ ,n]@とnに数字を入れたときには、カンマ前の部分からn個ランダムに選んで適当に並べます。
[0247]@....
 // [ ]@内をランダムに並べ替える。結果は「7240....」のようになる
[02479---, 8]@....
 // [ ,n]@の前半部分からn個ランダムに選ぶ。結果は「--702-94....」のようになる(先行する音符がない場合、タイは休符と同じ意味になります)
[ ,X]@
。Xのところに英小文字aからeを入れ、ドットを含む文に対してランダム命令を使ったときどう動作するか、という視点から五つのタイプを指定できます。デフォルトはeタイプ。 少々細かすぎる指定かとも思うのですが、根気の良い人は以下の例で各タイプの違いをつかんでください。
 //[02.45.42.0.]というフレーズに四回ずつ使ってみます

[ ,a]@
2450...240.| 2405.02.4..| 204054.2...| 42245.0.0..|
 //音符の順序とドットの位置が変わっています。

[ ,b]@
0.2454..20.| 0245.4.2.0.| 0.2454.2.0.| 0.24542..0.|
 //音符の順序はそのままで、ドットの位置が変わっています。

[ ,c]@
04.02.45.2.| 42.42.50.0.| 24.42.50.0.| 04.45.22.0.|
 //リズムは変わりませんが、音符の順序が変わっています。段やページ全体に対しても使えます。

 //次の二つは[02.45.42.0-.]に対して使っています。

[ ,d]@
02.45.4-.20.| 02.45.-4.20.| 0-.24.54.20.| -0.24.54.20.|
 //ドットの位置も音符の順序も同じですが、タイの位置が変わるので、元のフレーズに対してリズムの変化が生まれます。

[ ,e]@ // デフォルト
00.-2.24.54.| 20.02.-5.44.| 22.45.00.-4.| 20.2-.50.44.|
 //ドットの位置は同じで、音符の順序が変わります。タイの位置が変わるので、リズムの変化が生まれます。
ランダム命令では付帯命令は音符にくっついて移動します。単文字命令(ピッチベンド等)も音符とみなして並び替えます。和音は構成音を変えずまとめて移動されますが、和音のカッコ内の省略()は、和音のコピー元と順序が入れ替わったりして変なことになるかもしれません。
音符はセミコロン;を越えて入れ替わることはありません。また、スラッシュを含む文には使えないです。
数字nとタイプXを同時に使う場合は、数字nを先に書いてください。
[024579B,4,d]@....
アクサングラーヴをつけたランダム命令
[ ]`@のように、カッコにアクサングラーヴ記号をつけると、角カッコ命令の処理の順番が変更され、例えば 02.45.42.0.というフレーズは
[ [02.45.42.0.]@ ]*4@
とするとランダム命令が4回適用され、同じフレーズは繰り返さないのですが、
[ [02.45.42.0.]`@ ]*4@
と書くと、ランダム命令が1回適用された後にそのフレーズが4回繰り返されることになります。 同じことは代入命令を使ってもできます。
[ [02.45.42.0.]@ ]=rei@  [ rei@ ]*4@
とすると同じフレーズを四回繰り返すことになるでしょう。
ランダム命令でのアップダウンオプション
ランダム命令は使い方によっていかにもランダム臭いとっちらかったフレーズを紡ぎだしちゃうこと再々なので、そういう場合にはアップダウン命令でいくらか整形することができます。
[ ]up@
 // とすると、ランダム処理後の音符を、数字の低いほうから高いほうへ並べ替えます。
[ ]down@
 // とすると、ランダム処理後の音符を、数字の高いほうから低いほうへ並べ替えます。
[ ]updown@
 // とすると、upかdownがランダムに決まります。
[ ]up,up,down@
 // カンマを使って音形を波型に操作します。この例の場合、ランダム処理後の音符の並びを適当に区切り、区切られた部分の数字の大小によって、上昇、上昇、下降というような形になるよう並び替えます。
[ ],@
 // カンマだけ書くと、upかdownがランダムに決まり、この場合は上昇・上昇、上昇・下降、下降・上昇、下降・下降の四つのうちいずれかの音形がランダムに選択されます。
コード先行入力による付帯命令c,Cの変換より前に処理される命令のため、c,Cを意図した音形に並べるのは難しいでしょう。k,Kにはいい感じに効くかもしれません。

コードネーム入力

「コードネーム@.」で簡易にコードが入力できます(MIDI ShortMessageがチェックされていればタイピング完了時にも鳴ります)。ルート音はオクターブ下げられており、例えばC@は(v047)と変換されます。
CM7@....Am7@....Dm7@....G7@....
ルート音はオクターブ低い音が鳴るのですが、あまり感じよく鳴らないときは音高のところで紹介したrange@命令でオクターブ開始位置を代えると調整できるかも。 ( )に入った和音に変換されるので、空()のコピー技が使えます。
使えるコードネームは25種類あって、ルートCを例に取れば、
C@ Cm@ Cdim@ Caug@ Csus4@ Csus2@ C7@ Cm7@ CM7@ Cm7-5@ C7-5@ C7sus4@ CmM7@ Cdim7@ C6@ Cm6@ Cadd9@ Cmadd9@ C69@ Cm69@ Cmaug@ CaugM7@ CM9@ Cm9@ C9@
です。5音構成の第三音(五度の音)は省略されます。C#@のように、シャープ・フラットはルート名の後ろにつけてください。
分数コード
「C/D@..」のように、スラッシュを使って分数コードにできます。分数コードはコード先行入力でも使用できて、ディグリーネームを使うときはローマ数字も使えます。(I/II@..)

コード先行入力

文の先頭でchord@とコロンに囲まれた部分(「コードブロック」と呼びましょう)に曲全体のコード進行を記述しておくと、本文の付帯命令c,cdによってコード構成音を取得することができます。このブロックは2系統(chord@とchord2@)設定することができ、chord2@のコード構成音は大文字のC,CDによって取得します。key@によってキーを指示しておくと、付帯命令k,Kによってキーのスケールを取得できます(k9,K9は特殊な機能)。そのほか、m,M,u,U,d,Dといった付帯命令があります。
chd_が先頭についたchd_XX@命令類があり、これらはコードブロック内でだけ使用します。
少々煩雑な解説になりますがお付き合いください。例で見てみましょう。
c C cd CD
chord@ GM7@....Am7@....Bm7@....CM7@.... :
[ ^@ c0.c1.c2.c3./ cd....; ]*4@ // ^@は段全体を1オクターブあげる
1行目がコードブロックで、GM7が4拍、Am7が4拍、…とあって、4拍で1小節とすれば、四小節ぶんのコード進行が書いてあるのが見て取れます。
2行目が本文で、c0からc3によってコード構成音の低い方から順に音を取っており、cdによってコードを和音として取っています。
例えばCM7@....のc0.c1.c2.c3.とは0.4.7.B.で(C@....の場合は0.4.7.0.になります)、cd....は(v047B)....になります。
これらを繰り返し命令で使うことにより、本文で和音が変わるたびチマチマ入力する手間を省こうというわけです。

k K
chord@ key7M@ GM7@....Am7@....Bm7@....CM7@.... :
[ ^@ [k0k1k2k4k5--,8]@..../ cd....; ]*4@
1行目は先と同じ意味のコードブロックですが、key7M@の指定があります。これは7が主音のMejorキー、ト長調ですよという指定です。下のウィンドウに、ト長調として分析されたディグリーネームによるコード進行が表示されます。
k1からk7によってキーのスケール7音を取得できます。上の例の2行目では、「ドレミソラ」のペンタトニック音をランダムに取り出していますね。

k9 K9
k9は特殊な機能を持っていて、前後の音を考慮します。先行音と後続音の間のキー音のうち、後続音に一番近い音に変換されます。特に先行音と後続音の音程差が全音で2度のとき、knineXX@で指示した確率で半音で動きます。
m M
コードの構成音を和声法の音域を考慮して配置する付帯命令です。来るべき和声法プログラムへの第一歩という感じで、現状は音域を守り先行和音で配置した音になるべく近い音に動く、という程度。禁則はまったく考慮していません。
m0はバスの音域で、コードの根音または3度の音を配置します。
m3はソプラノの音域で、m0以外の音を配置します。
m2はアルトの音域で、m0m3以外の音を配置します。
m1はテノールの音域で、上記以外の音を配置します。
u U
u1,u2,u3,...により、キー音のうち先行音の1度上(同音)、2度上、3度上...の音を配置します。
d D
d1,d2,d3,...により、キー音のうち先行音の1度下(同音)、2度下、3度下...の音を配置します。
ディグリーネームを使う
次も同じ意味のコードブロックですが
chord@ key7M@ IM7@....IIm7@....IIIm7@....IVM7@.... :
キーの指定があれば、ディグリーネームを使ってコード進行を書くことができます。ト長調のIはGですから、一小節目にはGM7が代入されるわけです。
キー(スケール)から生成されるコード
次も同じ意味のコードブロックになります。
chord@ key7M@ I7th@....II7th@....III7th@....IV7th@....:
「7th」とは、そのキー(スケール)のそのルートからはじまるセブンスコードである、という指定方法です。コードネームは音の並び方を記号の書きわけによって直接指定するやり方なのですが、スケールから生成する場合は、音の並び方を書きわける必要はありません。Iの和音だとして、
I3d@.... // 三和音、トライアド
I4th@.... // 四度構成の和音
I7th@.... // 四和音、セブンスコード
I9th@.... // ナインス
I11th@.... // イレブンス
I13th@.... // サーティーンス
chd_XX@命令を使い、スケールから生成される各コードの音の構成を指定できます。すべて4音までしか使えない仕様です。記述にはクラシック風の度数を用い、135とは一度、三度、五度でありドミソの意です。
chd_triadchordXX@ // XXの部分に文字列を入れます。デフォルト"v135"(一度の音はオクターブ低い)
chd_fourthchordXX@ // デフォルト"v1473"
chd_seventhchordXX@ // デフォルト"v1357"
chd_ninethchordXX@ // デフォルト"v1352"
chd_eleventhchordXX@ // デフォルト"v1354"
chd_thirteenthchordXX@ // デフォルト"v1356"
長調と短調のディグリーネーム入力について
ディグリーネームをコードネーム記号と組み合わせて使うときは、クラシックでなくポップス風の使い方になります。例えば短調のIII度は、ポップスでの表記のように、bIII(フラット三度、小文字のbをフラットとして使う。コードネームはEbと後ろにつけ、ディグリーネームのときはbIIIと前につけるのはややこしいのですが、これは音楽の習慣であって、私のせいではありません)と書きます。
chord@ key0mn@ bIIIm@....: // Eフラットマイナー。単にIII@と書くと、Eになります。
ディグリーネームを「スケールから生成されるコード」と組み合わせて使うときは、クラシック風の表記になります。
chord@ key0mn@ III3d@....: // Eフラットマイナーになる。まあbをつけておいても無視するだけなので、うっかりつけておいても問題ありません。
key@命令について
key@命令がないとき、デフォルトではkey0M@(ハ長調)とみなされます。大文字MはMejor(長調)のMです。では短調はというと、小文字m(minor)ですが、短調には三種類あるので、次のように書きわけます。
key0mn@ // 自然的短音階(023578A)
key0mh@ // 和声的短音階(023578B)
key0me@ // 旋律的短音階(023579B)
key@命令は記号を省略すると適当に補われます。例えば
key@ // いずれかの長短調 曲の途中で使うと、なるべく近親調に移ろうとする。適当に転調したいとき使えます keyM@ // いずれかの長調になる key0m@ // ハ短調のいずれかの短音階になる
また、key@命令にはスケールそのものを書き込むことができます。これをリテラル(「文字通りの」)キーと呼びましょう。
key024679B@ // Cリディアンスケール
「スケールから生成されるコード」はこのリテラルキーから生成されることになります。
コード進行の生成
いくつかの記号を使って適当にコード進行を生成します。
T S D
和音の機能T(トニック)S(サブドミナント)D(ドミナント)だけを指示すると、その機能を持ったルート音をランダムに選びます。コード理論書をみながらプログラムを書きましたが、なんか短調が変だなという気もして、自信はありません。
chord@ key0mn@ [T....T....S....D....]*2@:
// 上のコードブロックは次のように変換されました。
// chord@ key0mn@ bIIIM7@....Im7@....II9th@....V9th@....bVI9th@....Im7@....bVII7@....V9th@....:
P
chd_progression命令により何度進行するかを指定(デフォルトは7度上行(2度下行))し、記号Pがそのルールで変換されます。ダイアトニック並進行というやつでしょうね。下の例の場合、IVM7から7度上行(2度下行)進行していきます。
chord@ chd_progression7@ key0M@
[IVM7@....P....P....P....]*2@:
// key0M@ [IVM7@ ....IIIm7@ ....II9th@ ....IM7@ ....]*2@
-
コードブロックでの記号「-」は本文でのタイ記号のように、直前のものと同じコードを意味します。
chord@ key@ T....-....: // Tに入ったコードと同じコードが入ります。先頭にあると、それはTSDのどれかに置き換わります。
=
記号「=」は直前のコードを適当に平行移動させます。
chord@ key@ T....=....=....: // Tに入ったコードが適当に平行移動されます。CM7@にたいして、G#M7@やDbM7@が続くという感じ。これはポップですね。先頭にあると、それはTSDのどれかに置き換わります。
R
chd_randomXX@のXXに入れた文字列から記号をランダムに選びます。 デフォルトでは "TSDP="が入っていて、「R」がTSDP=のどれかに置き換わります。
コード変化確率
コード進行TSDPの生成の際に、セブンスコードやナインスコードの出現確立を制御するchd_XX@命令があります。 chd_seventhXX@
XXのところに百分率の数値を入れます。これはデフォルト90で、TSDPは90%の確率でセブンスコードになるということです。
chd_subdominantminorXX@
TSDPによるIVのコードがマイナーコードになる確率。サブドミナントマイナー。デフォルト0
chd_switchmajorminorXX@
TSDPによるコードは同主音の長短調が混在したものになる確率。デフォルト0
chd_secondarydominantXX@
TSDPにより四度上行進行があったとき、先行する和音がセブンスコードに代わる確率。例えばIIm7@....V7@....があったとき、II7@....V7@....に変わる確率です。セカンダリードミナント。デフォルト0
chd_substitutionXX@
セカンダリードミナントが出現したとき、先行するセブンスコードが裏コードに代わる確率。デフォルト0
chd_ninethXX@
TSDPで生成されるコードがナインスコードになる確率。ここで使うナインスコードは「スケールから生成されるコード」9thです。デフォルト20
コードブロックで使える角カッコ命令
key@のリテラルキーに対する移調命令
key024679B@はCリディアンですが、key[024679B]+2@でDリディアンを表現できます。
繰り返し命令とアクサングラーヴ
コードブロックでの繰り返し命令はアクサングラーヴを使うことができます。
chord@ key0M@ [R....]*4@ :// chord@ key0M@ IIIm7@....bIIIm7@....V7@....VI7@....:になった(例えば)
chord@ key0M@ [R....]`*4@ :// chord@ key0M@ [II9th@....]`*4@:になった(例えば)
本文におけるランダム命令でのアクサングラーヴとの違いに注意してください。本文の繰り返し命令でアクサングラーヴは使えません。(どエラーになってしまいます)
代入命令
chord@ key0M@
[R....=....=....=....]=intro1@ // intro1@に代入
[T....S....D....T....]=melody1@ // melody1@に代入
intro1@
melody1@
melody1@
:
のように、曲をブロックに分けてコード進行を組み立てるのに使えます。上の例の二つのmelody1@は同じ進行が入ります。
chord@とchord2@
コード入力はchord@とchord2@の二系統ありますが、多調にチャレンジするのでもなければchord2@を使うことはないかもしれません。 chord2@に入力がなければ、デフォルトでchord@の和音の一度下の和音がchord2@で生成されます。どうしてそんなことをするかというと、chord2@の大文字の付帯命令によってchord@のトライアドコードのナチュラルテンション音を取得するためです。 C0がchord@和音の7度の音、C1が9度、C2が11度、C3が13度になります。