MML で音声合成に歌わせる — 記法の読み方と、短い曲の作り方
MML は音符を文字で書く古い記法で、いまも歌声合成の入力に使えます。cdefgab から始めて、音の長さ・オクターブ・テンポの指定までを、実際に鳴らせる例で説明します。
MML(Music Macro Language)は、音符を文字の並びで書く記法です。ドレミを c d e f g a b と書き、長さや高さを記号で足していきます。
もともとは音源チップに曲を渡すための書き方で、1980 年代のパソコンやゲーム機で広く使われました。いまも、テキストで旋律を渡したい場面では便利に使えます。コメ読み君では、この記法で音声合成に歌わせています。
短い曲なら数十文字で書けます。読み方を知っておくと、他の MML 対応ツールでも応用が効きます。
いちばん短い例
cdefgab
これでドレミファソラシが鳴ります。音の長さを指定していないので、すべて既定の長さ(四分音符)になります。
歌詞を付ける場合は、音符のあとに続けて書きます。
cdefgab どれみふぁそらし
音符と歌詞は 1 文字ずつ対応します。音符の数と歌詞の文字数が合っていると、意図したとおりに歌います。
音の長さ
音符のあとに数字を書くと、その音の長さになります。数字は「全音符を何分割したか」を表します。
| 書き方 | 長さ |
|---|---|
c4 | 四分音符 |
c8 | 八分音符 |
c2 | 二分音符 |
c1 | 全音符 |
c16 | 十六分音符 |
数字が大きいほど短くなります。分母だと思うと覚えやすいです。
長さのあとにピリオドを置くと付点になり、1.5 倍の長さになります。
c4.
四分音符の 1.5 倍、つまり付点四分音符です。
毎回書くのが煩わしい場合、l で既定の長さを変えられます。
l8 cdefgab
これ以降の音符は、指定がなければ八分音符になります。
高さ
> で 1 オクターブ上がり、< で 1 オクターブ下がります。
cde>cde<cde
o に数字を付けると、オクターブを直接指定できます。o4 が基準です。
o5 cde
半音の上げ下げは +(または #)と - です。
c+ d- e
c+ はド♯、d- はレ♭です。
休符とテンポ
r は休符です。長さの指定は音符と同じように書けます。
c4 r4 e4 r4 g4
t でテンポを指定します。数字は BPM です。
t150 cdefgab
既定は 120 です。速くしたい場合は数字を大きくします。
組み合わせた例
きらきら星の冒頭を書くと、こうなります。
ccggaag2 きらきらひかる
c c g g a a が四分音符、最後の g2 が二分音符です。歌詞の「きらきらひかる」が 7 文字で、音符も 7 つあります。
テンポを落として、少しゆったりさせるなら:
t100 ccggaag2 きらきらひかる
コメ読み君で使う
コメ読み君では、Web チャットから !sing に続けて MML と歌詞を書きます。
!sing cdefgab どれみふぁそらし
制限があります。
- MML は 200 文字まで
- 歌は 60 秒まで
- 全体で 15 秒に 1 回まで(参加者全員で共有)
60 秒を超える場合は、音符を減らすか、t でテンポを速くしてください。
歌手を指定する場合は、番号を先頭に付けます。
!sing 3003 cdefgab あいうえお
番号は !singers で確認できます。読み上げに使う声と歌う声は別の一覧なので、!speakers の番号を渡しても目的の声にはなりません。
書くときのコツ
音符の数と歌詞の文字数を合わせる
ずれると、意図しない音に歌詞が乗ります。まず音符だけで鳴らして旋律を確かめ、あとから歌詞を付けると調整が楽です。
小さい単位で試す
200 文字まで書けますが、いきなり長く書くと直す場所を探すのが大変です。4 小節ずつ確かめるほうが早く仕上がります。
拗音は 1 文字として扱われないことがある
「きゃ」のような拗音は、ツールによって 1 音として扱うか 2 文字として扱うかが違います。思ったとおりに乗らない場合は、音符の数を増減して合わせてください。
長さの指定は引きずる
l8 で既定を変えると、そのあとずっと八分音符になります。途中で戻したい場合は、もう一度 l4 のように指定します。
記法のまとめ
| 記号 | 意味 |
|---|---|
c d e f g a b | 音符(ドレミファソラシ) |
r | 休符 |
+ # | 半音上げる |
- | 半音下げる |
| 数字 | 音の長さ(4 なら四分音符) |
. | 付点(1.5 倍) |
> < | オクターブを上げる・下げる |
o + 数字 | オクターブを指定 |
l + 数字 | 既定の長さを指定 |
t + 数字 | テンポを指定 |
この範囲を覚えておけば、たいていの短い旋律は書けます。
コメ読み君のコマンドの一覧はコマンド一覧にあります。