マビノギMMLの基本

オンラインRPG『マビノギ』の演奏システムで用いる「MML」について、基本的なことを解説します。マビノギMMLガイドの記事のひとつです。

このページで扱っている『マビノギ』のゲーム画像やゲーム内データの知的財産権は、株式会社ネクソンおよび韓国NEXON社に帰属します。© NEXON Korea Corporation and NEXON Co., Ltd.

MMLとは

MML」は「Music Macro Language」の略で、「コンピューターに演奏させる為に、コンピュータープログラムが理解・処理できる文法で、音楽を記述する言語」です。

五線譜は、人間、とくに演奏者にとって読みやすいように書かれた楽譜です。それに対してMMLは、コンピューターに読ませる為の楽譜といえるでしょう。

楽譜には、演奏に関する情報のみがはいっています。楽譜だけでは演奏はできません。楽器や声が必要です。コンピューターの場合は、音を呼び出したり生み出したりできますから、その音を楽器や声として、楽譜すなわちMMLの指示通りに演奏を行ないます。

いまの説明の、「MML」を「MIDIデータ」に置き換えても、そのままあてはまります。実際、MMLをプログラム内部でMIDIデータに置き換え、そのMIDIデータを用いて演奏を表現するのがいまは一般的で、マビノギもそのような仕組みを採っているようです(開発者ではないから断言する立場にありません)

MIDIデータは「言語」ではなく、データそのものはプログラムにしか理解できない形式です。専用のプログラムを使って読み書きすることになります。一方、MMLはテキストデータですので、テキストデータが扱えるプログラムであれば、人間でもMMLを読み書きできます。ただし、演奏するには専用のプログラムを使わなければなりません。

MIDIと違って、MMLは規格化されていません。だから、利用する機種やプログラムによって、いろんな書きかたのMMLがあり、機能の有無もそれぞれに異なります。(MIDIよりMMLのほうが歴史が古く、コンピューター黎明期のころから、いろいろなシステムでテキストデータによる音楽演奏が試みられてきたそうです。)

マビノギの演奏システムで用いるMMLを、通称にならって本稿(および当サイト全般)では「マビノギMML」と呼びます。

マビノギMMLには、基本的かつ原始的な機能しかありません。つまり、ほかのMMLの書きかたをすでに身につけている場合は、マビノギMMLの書きかたはほぼ一瞬で理解できるでしょうし、マビノギMMLが使いこなせるようになったら、ほかのMMLの習得もすこし早くなるともいえるでしょう。

マビノギMMLの文法

マビノギでは、MMLを書き込んだ「楽譜スクロール」というアイテムを使って、ひとりで演奏したり、複数人で複数の楽器を使って合奏したりすることができます。合奏については後述することにして、まずは、ひとりでも弾ける「1本のMML」がどのように成り立っているのかを、この節で見ていきます。

パート

マビノギMMLでは、ひとつのMMLのなかに、〈メロディ・和音1・和音2・歌〉と名づけられた4つのパートが入れられます。演奏すると、それぞれのパートが同時に鳴ります。

ただし、〈メロディ・和音1・和音2〉パートと、〈歌〉パートとは、基本的には互いに独立したものです。マビノギでは「楽器演奏」「歌」それぞれが別物になっています。マイクを使うと歌パートを唄うことができます。このとき、〈メロディ・和音1・和音2〉パートは無視されます。逆に、一般の楽器なら〈歌〉パートが無視されます。

〈メロディ・和音1・和音2〉パートのそれぞれの違いは、ゲーム内で演奏するときに入力できる文字数上限(後述)が異なるのと、一部の楽器(打楽器)ではメロディパートしか演奏できない、という点だけです。1パート目にメロディを入れなければならない、というようなことはまったくありません。〈パートA・パートB・パートC〉とでも称したほうがふさわしいといえます。

〈メロディ・和音1・和音2〉の3パートが使えるということは、3つの音符が同時に鳴らせる、ということを意味します。

MMLのコマンド

MMLに書き込む文字は「コマンド」として扱われます。マビノギMMLを構成する全コマンドを紹介します。すでに述べたように、基本的な機能ばかりです。

すべて半角英数字です。一部を除いて、大文字・小文字は問いません。

以下の説明のなかで、「基本値」とは、MMLの冒頭からそのコマンドが最初に現れるまで適用されている値のことを指します。

A B C D E F G

音名表記。Aから順にそれぞれ、〈ラシドレミファソ〉の音符を表わします。必要であれば直後に「変化記号」(次項)をつけることができ、それに続けて、必要であれば音符の長さ(4分音符なら4、8分休符なら8)を指定することができます。それらがセットで1コマンドになります。

音符の長さを表す数値の範囲は、1から64までです。数値の直後に「.」(ピリオド)をつけて、付点を表わします。音符の長さを指定しない場合は、「L」コマンドで指定されている値が適用されます。

たとえば「C4」は、4分音符のドを表します。「E-8.」は付点8分音符のミ♭です。付点は、音符の長さを1.5倍します。なお、複付点は使えません。

65以上の値を指定した場合、ゲーム内ではすべて64として処理されます。0を指定した場合、同じく1として処理されます。ちなみに、作曲スキル使用時のウィンドウ上では、2分・4分・8分・16分・32分・64分およびそれぞれの付点、それと全音符(1分音符)が、音符の長さとして選べるようになっています。3連符を表現する場合は、3や6や12などの音符の長さを使います。

# + -

変化記号(臨時記号)。音名表記(A B C D E F G)の直後に添えて、音の高さを半音上げ下げします。「#」と「+」は♯(シャープ)、「-」は♭(フラット)。ひとつの音符にしか効力はありません。調号のように全体にまとめて指定することはできません。また、ダブルシャープ・ダブルフラットは使えません。

R

休符を表わします。音符と同様に、直後にその長さを指定することができます。たとえば「R2.」なら付点2分休符です。

&

おなじ高さの音符を連結する、タイを表わします。〈C4&C16〉のように書きます。〈C4&16〉というような書きかたはできません。

なお、スラーやポルタメントは使えません。違う高さの音符の間にある「&」は無視されます。

また、直後に音符以外のコマンドが続く場合の「&」も無視されます。たとえば〈CL8&C〉はタイでつながりますけれど、〈C&L8C〉だとつながりません。

> <

「>」は「以降のオクターブ番号を1上げる」という指定です。「<」は「以降のオクターブ番号を1下げる」ことを表わします。いわゆる「相対オクターブ指定」。

On

以降のオクターブ番号をnで指定します(n = 0~8)。いわゆる「絶対オクターブ指定」。

基本値は「O4」です。nに9以上を指定した場合は、すべて8として扱われます。(ゲーム内での説明で「n = 1~8」と書かれているのは誤りです。)

Ln

音符の長さが指定されていない音符・休符に適用する長さを、nで指定します(n = 1~64、付点つき可)。

たとえば〈C8C8C8C8〉と〈L8CCCC〉とは等しくなります。

nが65以上の場合は、64として扱われます。基本値は「L4」です。

Vn

音の大きさ、ボリュームを、nで指定します(n = 0~15)。MIDIデータでいえば、ベロシティに相当するコマンドです。音の大きさ(ボリューム)と音の強さ(ベロシティ)とは異なるものですけれど、マビノギMMLではその区別がありません。

nが0の場合、無音の音符になります。休符とほぼ同等になりますけれど、いくつかの点で振る舞いが休符と異なります。

nが16以上の場合は15として扱われます。基本値は「V8」です。

Tn

テンポをnで指定します(n = 32~255)。

ここでいうテンポとは、BPM(beats per minuteの略)で、1分間に何拍打つ速さか、という意味です(マビノギMMLのBPMは、つねに4分音符を1拍として扱います)。T120は、1分間おなじペースを維持した場合に4分音符がちょうど120個鳴らされるというテンポです。いい換えると、1秒間に4分音符2つ、というテンポです。

ほかのコマンドと異なり、〈メロディ・和音1・和音2〉の3パートのいずれかに入れると、3パートすべてに効果が及びます。〈歌〉パートのテンポは、〈歌〉パート内に入れないといけません。

nが31以下の場合は32として、256以上の場合は255として扱われます。基本値は「T120」です。

Nn

音の高さを、(音名ではなく)MIDIのノート番号で指定します(n = 0~96)。N0がオクターブ番号0のCです。1増えるごとに半音上がり、N96がオクターブ番号8のCとなります。音符の長さは、Lで指定しているものが適用されます。(このコマンドを使わなくてもふつうのMMLは書けるので、覚えるのは後回しで問題ありません。)

nが97以上の場合は96として扱われます。

MML@ ;
冒頭に大文字の「MML@」が、末尾に「;」(セミコロン)がある文字列は、ゲーム内でコピーやペーストができるMML文字列(「MML@形式」と呼ばれる書式)として扱われます。作曲スキル使用時のウィンドウのボタン「クリップボードから読み込む」は、この書式にのみ対応しています。また、吟遊詩人掲示板のボタン「クリップボードへコピー」を押すと、この書式でコピーされます。もちろん、マビノギ向けのMML作成ソフトは、この書式での読み書きができます。〈メロディ・和音1・和音2・歌〉の各パートを個別に貼り付ける場合には、このコマンドは必要ありません。
,
カンマは、パートの区切りを表します。上記の「MML@……;」の書式で用います。「MML@(メロディパート),(和音1パート),(和音2パート);」というふうに、パートの終わりと始まりとの間に入れます。歌パートのみのMMLであれば、「MML@,,,(歌パート);」となります。

上記リストの内容の大部分は、作曲スキル使用時のウィンドウの「作曲TIP」ボタンを押すと表示される情報でもあります。その画像も引用しておきます(画像1、2)。

画像1:作曲スキル使用時に参照できるヒント1
画像2:作曲スキル使用時に参照できるヒント2

ほか、ゲーム内アイテムの書籍(作曲スキルを上げる為の本など)にも、演奏コンテンツの説明を兼ねた記述がちらほら見られます。多くは、世界観を補強するサイドストーリー的なものであったり、音楽に取り組む上での精神論であったりしますけれど、「ヘレンヌと学ぶ作曲教室(1)」のような実践的なものもあります。ただし、内容がきわめて古くて、あまり参考になりません。

コマンドとして定義されていない、上記以外のすべての文字や改行は無視されます。

ゲーム内アイテムの「作曲スキルの上達方法」という本のなかで「l4cccc/dddd/eeee/gggg//」というふうに、演奏に関係ない文字で小節の区切りをつけて可読性を高める例が挙げられています。MML作成ソフトを用いずに素のままMMLを打ち込むときに有用なこともあるかもしれません。全角文字でコメントを書き込むこともできますし、極端な使い方としては、MMLとは関係のない文字だけを入れて、メモ用紙みたいに楽譜スクロールを使うこともできます。

リスト内の説明にも書いているとおり、音符は「音名・変化記号・音長」でひとつのコマンドとなります。休符の「R」も、「O」「L」「V」「T」「N」も、直後の数字を含めてひとつのコマンドです。これらのコマンドの途中に、改行(や空白やMMLで使わない文字)などを入れると、正しく認識されません。たとえば「c(改行)+16.」や「t12△0」や「v1***5」は、それぞれ「c」、「t12」、「v1」と等しくなります(「t12」は範囲外の値ですから、「t32」として扱われます)。

繰り返し命令もありませんし、ピッチベンドやエクスプレッションなどもありません。

左右の定位(パンポット)は、MMLでは指定できません。ゲーム内での、演奏者と聴き手の画面上の位置関係によって決まります(このページでは説明しません)。


ひとつシンプルな例を挙げます。〈MML@c4,e4,g4;〉を楽器演奏すると、C(ド)、E(ミ)、G(ソ)の3音の4分音符が同時に鳴って終わります。2番目のパート(和音1)にのみ、4分音符のミを追加してみると、〈MML@c4,e4e4,g4;〉となります。〈メロディ・和音1・和音2〉の全パートが末端に達するまで演奏が続くので、ふたつ目のミが鳴ったあとで演奏が終わります。

文字数の制約

マビノギMMLをゲーム内で演奏する為(に楽譜スクロールに書き込む)には、プレイヤーキャラの「作曲スキル」で定められた文字数上限までに収めないといけません。この制限のきびしさも、マビノギMMLのひとつの特徴だと思います。ゲーム内で弾くのでなければ、マビノギMMLそのものには文字数制限がありません(ゲーム内で弾かないならマビノギMMLとして書く意味がほとんどないですけれど)

作曲スキルが高いほど、使える文字数が増えます。スキルランクごとの最大文字数を、以下のリストに示します。なお、作曲スキル使用時に「歌パートを除外」というオプションを使うと、歌パートが入力できなくなるかわりに、ほかの3パートの文字数が、歌パートの文字数の3分の1ずつ増やせます。その場合の文字数も併記しました。

練習
  • 200・100・なし・200
  • (歌パート除外時:)266・166・66
Fランク
  • 400・200・100・400
  • (歌パート除外時:)533・333・233
Eランク
  • 500・200・100・500
  • (歌パート除外時:)666・366・266
Dランク
  • 600・250・150・600
  • (歌パート除外時:)800・450・350
Cランク
  • 650・250・200・650
  • (歌パート除外時:)866・466・416
Bランク
  • 700・300・200・700
  • (歌パート除外時:)933・533・433
Aランク
  • 750・300・200・750
  • (歌パート除外時:)1000・550・450
9ランク
  • 800・350・200・800
  • (歌パート除外時:)1066・616・466
8ランク
  • 850・400・200・850
  • (歌パート除外時:)1133・683・483
7ランク
  • 900・400・200・900
  • (歌パート除外時:)1200・700・500
6ランク
  • 950・450・200・950
  • (歌パート除外時:)1266・766・516
5ランク
  • 1000・500・250・1000
  • (歌パート除外時:)1333・833・583
4ランク
  • 1050・550・300・1050
  • (歌パート除外時:)1400・900・650
3ランク
  • 1100・600・350・1100
  • (歌パート除外時:)1466・966・716
2ランク
  • 1150・700・400・1150
  • (歌パート除外時:)1533・1083・783
1ランク
  • 1200・800・500・1200
  • (歌パート除外時:)1600・1200・900

また、特別な楽譜を使うと、実質的に文字数を数倍ぶん拡張できます。マビノギの楽譜スクロールの種類のページの「ザブキエルの楽譜集」の節を参照してください。

楽譜スクロールのMMLを読む

楽譜スクロールを「読む」と、画像3のように、タイトル、作譜したキャラの名前、難易度が表示され、「コード非公開」にしていなければMMLの内容も表示されます。難易度には、作譜したキャラの音楽知識スキルランクが反映されています。MMLそのものとは関係ありません。

画像3:楽譜スクロールの中身の表示

右下のところに「クリップボードへコピー」というボタンがあります。これを押してクリップボードにコピーされるのは、「MML@」で始まる文字列ではありません。タイトル、作曲者、各パート、それぞれが改行で区切られた書式になっています。その為、楽譜スクロールから「クリップボードへコピー」したものを、作曲スキル使用時に「クリップボードから読み込む」で貼りつけることはできません。それぞれのパートごとに手作業でコピペするなりなんなりしないといけません。(吟遊詩人掲示板にもクリップボードにコピーできるボタンがあり、そちらはMML@形式でコピーされるので、ややこしいところです。)

合奏で複数のMMLを同時に鳴らす

メロディを弾く楽器、ベースを担当する楽器、リズムを刻む楽器、……というふうに複数の楽器で合奏する場合について、すこし触れます。

楽器(演奏者)ごとにMMLは独立しています。MML自体に、複数のMML同士をリンクさせる機能はありません。MMLを記した楽譜スクロールを演奏メンバーに配り、合奏アクションなどを用いて、それぞれのMMLを同時に演奏することで、合奏を実現します。

合奏に使うMMLをつくるときのおもな注意点は、「テンポ指定を、それぞれのMMLすべてに、同じ演奏位置に入れる」ことです。そうしないと、互いのタイミングがずれてしまいます。

また、各メンバーの演奏モーションが終わるのは、合奏アクションが終わるときではなく、その演奏者のMMLの内容が終わるときですから、合奏が終わるまで演奏モーションを維持させたい場合は、末尾に休符や音量ゼロの音符を加えるなどして、すべてのMMLの演奏時間を揃えることになります(これは、演出上のこまかい話に過ぎません)

tick

tick(ティック)というのは、MIDIで用いられる、時間の単位です。コンピューターの立場からすると、8分音符をなめらかに弾け、と命令されても困るわけで、48tick後に発音を止めよ、というようにはっきり数値を与えるほうが処理しやすいのです。MIDIシーケンサーをよく使っているひとには、なじみがある概念だと思います。

マビノギMMLの用語ではないのですけれど、深く突っ込んでMMLの技法を説明するときには、どうしても持ち出さざるを得ません。

マビノギの演奏システムの場合、4分音符イコール96tickです。(このことを、分解能が96だ、といいます。)4分音符を96等分した長さが、音の長さの最小単位、となります。それが1tickです。(たとえば、分解能が480のMIDIデータなら、4分音符を480等分した長さが1tickになります。)

4分音符が96tickということは、4分の4拍子の1小節の長さは(96×4で)384tickです。

マビノギMMLでもっとも短い音符は64分音符です。64分音符の音符の長さは1小節の64分の1ということですから、tickは(384÷64で)6tickです。付点64分音符は、(6×1.5で)9tickです。

64分音符より短い時間を扱う例をひとつ挙げます。パート間の発音タイミングを微妙にずらす例です。

MML@r64c4,r64.e4;〉というMMLは、〈メロディ〉パートで64分休符のあとに4分音符のドが鳴り、〈和音1〉パートで付点64分休符のあとに4分音符のミが鳴ります。64分休符と付点64分休符の長さの差は3tickなので、ドが鳴ってから3tick後にミが重なるわけです。

ギターをじゃらーんと鳴らす表現をするとき、このようにすれば、各パートを64分休符ぶんずらすより、もっと締まったアタック感になります。もちろん、音符の長さの選び方によって、1tick単位でのずらしもできます。その為には、画像4に載せているようなtick表を参照しながらMMLを書くといいでしょう。

画像4:tick表

画像ではなくてテキストで見たいかたは、おなじ内容のCSVファイルをダウンロードしてお使いください。テキストエディタでもひらけますけれど、CSVビューアーや表計算ソフトでひらくと、表の形で見ることができます。

MMLの最適化

たとえば〈c4e4.g8a2r4〉というMMLは、Lコマンドを使って〈L4ce.g8a2r〉と書き換えることができます。おなじ演奏内容でありながら、後者のほうが1文字少なくなっています。このように、文字数ができるだけ少なく済むように書き換えることを「最適化」といいます。

ゲーム内で演奏する際の文字数の制約内で、できるだけ多くの情報を詰め込むには、最適化したほうが有利です。

このくらいの短いソースなら手作業でもできますけれど、ふつうはMML作成ソフトの機能を使って自動で最適化します。マビノギMML作成ソフトの簡単な紹介のページの「MML作成ソフトによるMML最適化」の節も参照してください。

当サイトの楽曲紹介ページでは、最適化した、「MML@」で始まる1行のMML文字列をTXTファイルとして公開しています。ゲーム内でそのまま使えます。最適化したMMLはたいていの場合、パッと見ただけでは、なにがなにやらわかりません。