← ブログ一覧

MML で音声合成に歌わせる — 記法の読み方と、短い曲の作り方

MML は音符を文字で書く古い記法で、いまも歌声合成の入力に使えます。cdefgab から始めて、音の長さ・オクターブ・テンポの指定までを、実際に鳴らせる例で説明します。

株式会社KOOFFICE3 分で読めます#MML#使い方

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 + 数字テンポを指定

この範囲を覚えておけば、たいていの短い旋律は書けます。


コメ読み君のコマンドの一覧はコマンド一覧にあります。

ほかの記事