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