文法をざっくり説明

Lismoのプログラムは大きく分けてエントリー名前付きブロックからなります。
以下はその例です。


 //エントリー  
 [ $abc ]

 //名前付きブロック 
 abc{ ド;レ;ミ; }  

エントリーは[ $ブロック名 ]のような形式で記述します。
ここに書いた名前付きブロックが再生されて曲になります。

エントリーでは以下のように複数のブロックを呼び出すこともできます。
この場合、二つのブロックは同時に再生されます。
つまり、まず「ドとファ」が同時に鳴り、次に「レとソ」、最後に「ミとラ」が鳴ります。

[ $abc $cde ]  

abc{ ド;レ;ミ; }  

cde{ ファ;ソ;ラ; }  

複数のブロックを同時ではなく順番に鳴らしたい場合は、
名前付きブロックの中で別の名前付きブロックを呼び出します。

[ $abc ]  

abc{ ド;レ;ミ; $cde $cde } //cdeを2回呼び出しています  

cde{ ファ;ソ;ラ; }  

こんな書き方でも同じ意味です

[ $x ]

x{ $abc $cde $cde }

abc{ ド;レ;ミ; }

cde{ ファ;ソ;ラ; }

これらのコードは以下のコードと全く同じ意味になります。

[ $abc ]

abc{ ド;レ;ミ; ファ;ソ;ラ; ファ;ソ;ラ; }

複数の音符を同時に鳴らしたい場合は以下のように[]で囲みます

[ $do_mi_so ]

do_mi_so{ [ド;ミ;ソ;] }

再生速度や楽器などを変えたい場合はエントリーでの呼び出しのときに()メタ設定を追加します。
例えば以下のように指定すると再生がはやくなり、また音色が鉄琴ぽくなります(クオリティは期待できません)。

[ $abc(tempo:360, inst:glockenspiel) ]

abc{ シ; ド>+; レ>+2; シ; ソ+3;  }

他にもオクターブ指定や音量、倍音など様々な設定がありますが、詳しくは「文法を詳細に説明」で説明しています。
また、このメタ設定はエントリーでしか設定できません。

音符のオクターブ上げ下げ、半音上げ下げ、長さの変更などについても「文法を詳細に説明」で説明しています。

文法を詳細に説明

Lismoの最上位はひとつのエントリーと複数の名前付きブロックからなります。

エントリー

[$block1 $block2 $block3]のような形式で名前付きブロックを列挙します。 ここに列挙されたブロックが同時に再生されて曲になります。 例えば[$right $left]のように右手と左手の演奏を指定したり、楽器ごとにパートを分けたりします。

さらにエントリーでは以下のように丸括弧を付けて演奏時のスピードなどを指定するメタ設定を行うことができます。
[$block1(tempo:90, inst:horn)]
省略した場合は既定値が使用されます(メタ設定の段落で説明します)。

エントリーは一つしか存在してはいけません。複数記述した場合は最後のもの以外無視されます。

名前つきブロック

名前つきブロック名前{ }の形式で中括弧の中に1個以上の音符または名前つきブロック呼び出しを持ちます。名前には英小文字と_が使用できます。

名前つきブロック呼び出しとは、$ブロック名の形式で他の名前つきブロックを呼び出すことです。 エントリーと異なり、通常のブロック呼び出しではメタ設定はできません。

音符は後述する単一の音符です。
音符を[ ]の中に並べることで同時演奏できます。長さは一番長いものに合わせられます。

音符

音符は一つの音符です。基本は音階;の形式で記述し、必要に応じて音階と;の間に記号を挟むことでオクターブ上下や半音上げ下げ、長さの指定などができます。 例えば追加指定なしのドならド;C;とかけますし、オクターブ上のド♯ならド+>; C+>; C > + ;などの書き方ができます。(記号の意味は後述)

音階

音階は2パターンの記述法(カタカナorアルファベト大文字)があり、以下の=で結ばれた記号は同じ意味になります。(休は休符です)
ド=C レ=D ミ=E ファ=F ソ=G ラ=A シ=B 休=R

オクターブ上下

オクターブ上下では>一つにつき1オクターブ高く、<では低くします。例えばC;がC4の音と解釈される既定の状況でC>>;はC6の音になります。最終結果の範囲は0~9です。

半音上げ下げ

シャープまたはフラットはそれぞれ+-の記号で記述し、半音上げ下げできます。

長さ

長さは数値の形式で相対的な長さを指定します。範囲は0.1~10です。省略した場合は1になります。 1の長さはメタ設定tempoで指定できます。長さ1のnoteは一分間にtempo回再生されます。

メタ設定

メタ設定では曲の再生に関する属性を設定することができます。これはエントリー内の名前付きブロック呼び出しでのみ指定できます。各属性またはメタ設定全体を省略すると既定値が使用されます。

既定値

(tempo:60, adsr:[0.3,0.7,0,0], oct:4, ovtRate:[1], ovtBaseIndex:0, volume:1, inst:none )

各属性について

tempo: 再生速度に関係します。長さ1の音符を1分間に何回再生できる速さかを意味します。

adsr: 時間による振幅の変化を操作します。[0.1, 0.3, 0.4, 0.1]のように長さ4の配列でa,d,s,rの順に与えます。 sはvolumeを1とした[0,1]の相対値でa,d,rはlengthを1とした[0,1]の相対値(ただしa!=0かつa+d<=1)。rは次の音と重なります。

oct: ブロック全体の音の高さに関わります。既定(4)のままならAA4の音と解釈されます。範囲は0~9です。

ovtRate: 音色に関わります。倍音の割合を[6,3,1]のような形式で指定します。

ovtBaseIndex: ovtRateの基音の位置を移動できます。ovtRateの配列のインデックスで指定します。

inst: adsr,ovtRate,ovtBaseIndexの糖衣構文で、楽器っぽい音を簡単に指定できます(クオリティは期待できません)。
これを指定するとdecay, ovtRate, ovtBaseIndexは上書きされてしまいます。
現在指定できる名前

volume: 音量を(0,1]の数値で調整します。

その他

//以降は改行までコメントアウトになります。