« MIDIファイルからMUSICコマンド(2) | トップページ | RZ1Basic v0.1.8 公開 »

ROBOBASIC講座(MUSIC)

【MUSIC(ミュージック)】
 音楽を演奏する
 書式: MUSIC "演奏文字列"
  例: MUSIC "8O4C#E4F#28C#4.E10"

演奏文字列について
《音程に関する文字列》
●ドレミファソラシは、普通に、英語表記のドレミと同じ、CDEFGABで記述します(図)
●シャープの場合は#または+、フラットの場合は$または-を、音程の後ろに書きます(図)
●どこのドレミなのかを示す文字は、オクターブのO(オー)と0から7の数値で表します(図)。初期値はO3です。1音ごとに記述する必要はありません。(例:O2ABO3CD)
●オクターブを指定するのではなく、オクターブ上げる場合は、<またはHが使えます。これと同じように、オクターブを下げる場合は、>またはLを使います。
(例:CDEFGAB<C)
(例:C>BAGFEDC)

Garagebandscreensnapz001_4
  
《音の長さについて》
音の長さに関しては、マニュアル的にも、コンパイル的にもバグがあります。少しややこしい話になってしまいますが、説明しますので、我慢して読んで下さい。。。

●音の長さは、0から9で表します。
●音の長さの数値の後ろに「.(ドット)」を付けると、1.5倍の長さになります。つまり付点付きの音符になると考えればいいでしょう。(例:4.C)
●「[(かぎかっこ)」を付けると、その後の音の長さが、1.5倍の長さになります。また、逆向きの「](かぎかっこ)」を付けると、元の長さに戻ります。(例:4AB>[CDEF]GAB)

さて、音の長さに関しては、上で書いた様な決まりになっていますが、0から9で指定する音の長さは、マニュアル的には、表1の様に記されています。なんか順番が変に感じます。
表1
Pagesscreensnapz001

 
そこで、音符が示す長さを比で書き表してみると表2ようになります。
表2
Pagesscreensnapz003

実際にroboBASICがコンパイルしている値を調べてみると表3のようになっていました。コンパイラは、1から9まで、1, 1/2, 1/3, 1/4. 1/5....という感じで長さをしていしていることがわかります。それから、0は、1と同じ値で、32分音符ではありませんでした。そこで、表2の比と照らし合わせてみると、1or 0=全音符、2=2分音符、4=4分音符、8=8分音符であることがわかります。16分音符や32分音符が指定できませんね。あと、付点付きの音符に対応する長さがありませんので、1から9の数値では付点付きは指定できないことがわかります。
表3
Pagesscreensnapz002

次に、ドットを付けると、0から9の値が、コンパイラではどうなっているかを調べてみました(表4)。表2の比と対応させてみると、ドット付きであらわすと、ちゃんと1.5倍にはなっているようです。
表4
Pagesscreensnapz005

従って、全、2分、4分、8分の音符は、1,2,4,8の数値を使う。付点付きは、2.,4.,8.を使えばいいということになりますね!!

で、これはバグと言っていいのか、よくわかりませんが、roboBASICでコンパイルすると、"0"は全音符と同じなんで、結局使われてないのと同じですよね。そこで、RZ1Basic v0.1.7では、コンパイルすると、"0"は96でなく、16分音符に対応する数値に変換するようにしてあります。具体的には6になります。従って"0."とすれば付点16分音符になります。

《休符について》
長々と音の長さに関して書いてたので書き忘れそうになってしまいました。
●半角スペース、P、(rest)の3種類の表記があります。音を鳴らさない時間は、上記の音の長さに連動します。(例:CDE CDE GEDCDED )

《初期値について》
●初期値に関して、オクターブは「O3」、音の長さは「4」になっています。

以上、長々と書いてしまいましたが、分りましたでしょうか?

|

« MIDIファイルからMUSICコマンド(2) | トップページ | RZ1Basic v0.1.8 公開 »

ROBOBASIC講座」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ROBOBASIC講座(MUSIC):

« MIDIファイルからMUSICコマンド(2) | トップページ | RZ1Basic v0.1.8 公開 »