ひろじいべーしっくch 第16回の動画の解説・補足。(0-016)
結論
MMLとは、Music Macro Languageの略で、BGMPLAY命令などで使用する音楽演奏用の言語です。
TIME$ 現在の時刻から“時:分:秒”という文字列を作るよ。
VAL 数字の文字列を計算できる数値に変換するよ。
MID$ 文字列のうち、左から指定番目の指定文字列を取り出すよ。真ん中から文字を取り出すよ。
WHILE~WEND 条件を満たしている間、WENDまで繰り返すよ。FOR~NEXTは有限回数だったのに対し、WHILE~WENDは条件によって回数を変える時に便利。
STR$ VALとは反対に、計算できる数値を数字の文字列に変換するよ。
BGMCHK 現在演奏中か(BGMPLAYが作動中か)判定するよ。
プログラム
今回のプログラムはこちら。(公開キー443E4X1、LOAD“N16_OTO”)

本プログラム、「音入門」は、MML言語を学習、確認するのに便利なプログラムです。
このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。
命令やMML言語の内容など、一部の内容を省略している箇所があります。
詳細を知りたい方は公式リファレンス等も参照してください。
MML言語(一部)
(参考文献:マビノギMMLの基本 _ コリモセーズ/シラベル のウェブサイト、プチコン4公式リファレンスブック、プチコン4公式リファレンス)
C D E F G A B
Cがドで、Gがソ、Aがラという様に、下記のピアノ鍵盤の図の通り、音程文字となります。
# + -
変化記号(臨時記号)。音名表記(A B C D E F G)の直後に添えて、音の高さを半音上げ下げします。「#」と「+」は♯(シャープ)、「-」は♭(フラット)。ひとつの音符にしか効力はありません。調号のように全体にまとめて指定することはできません。また、ダブルシャープ・ダブルフラットは使えません。
Ln
音符の長さが指定されていない音符・休符に適用する長さを、nで指定します。nは192を割り切れる数値です。基本値は「L4」です。
たとえば〈C8C8C8C8〉と〈L8CCCC〉とは等しくなります。

動画の4分48秒当たり。音符とLの数値との対応について解説しています。
.
音符の付点を表わします。A~Gの音階や半音(+やー)の後に加えます。(例)D.
Rn
休符を表わします。音符と同様に、直後にその長さを指定することができます。たとえば「R2.」なら付点2分休符です。

動画の9分50秒当たり。休符とRの数値との対応について解説しています。
&
おなじ高さの音符を連結する、タイを表わします。〈C4&C16〉のように書きます。〈C4&16〉というような書きかたはできません。
なお、スラーやポルタメントは使えません。違う高さの音符の間にある「&」は無視されます。
> <
「>」は「以降のオクターブ番号を1上げる」という指定です。「<」は「以降のオクターブ番号を1下げる」ことを表わします。いわゆる「相対オクターブ指定」。
On
以降のオクターブ番号をnで指定します(n = 1~9)。いわゆる「絶対オクターブ指定」。
基本値は「O4」です。
Vn
音の大きさ、ボリュームを、nで指定します(n = 0~127)。基本値は「V127」です。
Tn
テンポをnで指定します(n = 1~1023)。基本値は「T120」です。
@
@のあとに数値を書くことで、MMLで演奏する音色を設定できます。
MML表記(@0~@127)


MML表記(@128~@148)ドラムセット

(中略)

MML表記(@216~@222)PSG音源
MML表記(@223)ノイズ音源
MML表記(@224~@255)ユーザ定義波形(WAVESET命令で登録された波形)初期は無音
MML表記(@256~@432)BEEP用に用意された効果音。(BEEP0~156に相当し、これらBEEP0については0に256足して@256に対応という様に256を足した数値に対応する。なお、156+256=412なのでBEEPとの対応はここまでですが、@432まで音はあります。)

(中略)

¦
この記号(バーティカルバー、ブロークンバー)でくくって複数の音階を書くと、和音を演奏できます。(例)¦CEG¦

動画の7分58秒当たり。シフトキーボードでのブロークンバーの位置について解説しています。
[]n
この記号[](かっこ)の[から]までの間のMMLを、指定したn回の回数だけ、繰り返し演奏します。回数nを省略すると、無限に繰り返します。繰り返し指定は入れ子にすることができるので、短いMMLで長い演奏をさせることも可能です。(例)[[O4CEG]3<C2.]
Qn
音程文字列の前にQと数値を書くことで、続く演奏に、スタッカート(音を短く切って演奏)の指定となります。数値は整数で1~32。小さいほど音が短くなります。
:n
この記号:(コロン)とその後の数値(0~15)の指定チャンネル(トラック)の演奏を開始します。(例):0AAB:1CDC
動作の説明
おおまかな動作の説明です。

以下の図の通り、単純な構造の繰り返しとなっています。

実行画面


補足
補足1(ランダムに24音ずつ、曲作成)


補足1の実行画面

動画の15分17秒当たり。
補足2(ランダムに4音ずつ作成、それを4回ずつ繰り返す。)

赤い字の部分は「補足1」との変更点です。

補足2の実行画面

動画の18分16秒当たり。
TIME$
TIME$()
現在の時刻を文字列として返す
返値
現在の時刻文字列
・書式は”時:分:秒”。
VAL
VAL(文字列)
数値を表す文字列を数値に変換する
引数
文字列:数値を表す文字列(“123″など)
返値
文字列から解釈した数値
例
A=VAL(“123”)
F=VAL(“-12.56”)
MID$
MID$(文字列,開始位置 [,文字数])
文字列の指定位置から指定文字数分の部分文字列を取得する。
引数
文字列:対象文字列
開始位置:取得文字列の開始位置(左から1番目は0。左から2番目は1)
文字数:取得文字列の文字数
・省略時は開始位置から文字列末端までの文字数を指定した事になる。
返値
取得した文字列
例
S$=MID$(“ABC”,0,2)
WHILE~WEND
WHILE 式
式の計算結果が偽(0)の場合、続くWENDの次の命令に処理を移す
・式が真(0以外)の場合WHILEの次の命令に処理を移し、WEND命令が来たらWHILEに戻って再度式を計算する。
例
A=0:B=4
WHILE A<B
A=A+1
WEND
WEND
直前のWHILE命令に処理を移し、再度WHILEから実行する
例
A=0:B=4
WHILE A<B
A=A+1
WEND
STR$
STR$(数値[,桁数])
数値を文字列に変換する
引数
数値:文字列に変換したい数値
桁数:指定桁数で右揃えしたい場合に指定(0~63)
・数値の桁数が指定桁数より大きい場合指定を無視する。
・0を指定した場合桁揃えをしない。
・省略時は0。
返値
変換された文字列(123→”123″)
例
S$=STR$(123)
BGMCHK
BGMCHK [トラック番号] OUT 変数
指定したトラックの音楽の再生状態を返す
引数
トラック番号:再生状態を取得したいトラックの番号(0~15)・省略時は0。
返値
0:再生していない
1:再生中
例
R=BGMCHK(1)
PRINT R
まとめ
MMLとは、Music Macro Languageの略で、BGMPLAY命令などで使用する音楽演奏用の言語です。今回掲載した内容は、機能のごく一部です。参考としては公式リファレンスサイトの「MMLについて」、公式リファレンスブック、youtube動画のしひこチャンネルさんの「プチコン4入門題材編サウンドを極める」シリーズ(全8回)があります。
TIME$ 現在の時刻から“時:分:秒”という文字列を作ります。
VAL 数字の文字列を計算できる数値に変換します。
MID$ 文字列のうち、左から指定番目の指定文字列を取り出します。
WHILE~WEND 条件を満たしている間、WENDまで繰り返します。
STR$ VALとは反対に、計算できる数値を数字の文字列に変換します。
BGMCHK 現在演奏中か(BGMPLAYが作動中か)判定します。
コメント