MewMMLPad

サンプル曲で学ぶ - 実例を通じて MML 機能を理解する

このページでは、実際に書かれた MML 曲を 1 つずつ読み解きながら、どのコマンドがどんな表現に使われているかを解説します。コマンド単体の仕様は MML リファレンスを参照してください。

Ubiquitous Letters

mewlist 作のデモ曲です。8 チャンネル(A〜H)を使い、ベース・リード・パッド・アルペジオが絡む構成になっています。出典: Gist

全文

# Ubiquitous Letters - mewlist
A T135

ABCDEFGH {=*} PC $glissando=32 $BendRange=2

A L16 Q1 PL64 $Accent=On V100 v60
B L16 Q8 LV12 $accent=on V60  v30
C L16 Q8 LV12 $accent=on V50  v30
D L1  Q8                 V127 
E L1  Q8                 V100
F L1  Q8                 V64
G L1  Q8                 V32  K7
H L16 Q1                 V127 PR64 

% SeqA !Xxrx ) rxXx ) rrXr ) rxXr ( Xxrx ( rxXx ( rxxr rXxr

A o3 [C ^g >d E <E ^b >g  D<]4
A o3 [C ^g >d E <E ^b >g  D<]4
A o3 [C-^g >d E <E ^b >a  G<]4
A o3 [C-^g >d E <E ^b >g- D<]4
B o5 !X{D}  [%SeqA]4
C o5 !X{E}  [%SeqA]2
C o5 !X{G}  [%SeqA]1
C o5 !X{G-} [%SeqA]1
D o2 a1+1  x_4>c1+1 <b1+1  x_4>d1+1
E o3 e1+1  x_4 g1+1  g1+1  x_4 a1+1
F o4 <a2  x_4>c1+1  x_4e1+1  d1+1 ~ f#&x2
G o4 <a2  x_4>c1+1  x_4e1+1  d1+1 ~ g&x2
H o4 [ v100 [ {g^>cef#gb<}2   (50 ]2 r1 ]2
H o4 [ v100 [ {d^g>df#a>d<<}2 (50 ]2 r1 ]2

それでは、上から順番に読んでいきましょう。

1 行目: コメント

# Ubiquitous Letters - mewlist

# で始まる行は無視されます。曲のタイトルや作者名のメモに使えます。; 以降のコメントも同様です。

テンポ設定

A T135

チャンネル A に T135 でテンポ 135 BPM を指定しています。T はスタンドアローン再生時に BPM スライダを変更するコマンド。DAW の中で使うときは無視され、DAW 側のテンポが優先されます。

全チャンネル共通の初期化

ABCDEFGH {=*} PC $glissando=32 $BendRange=2

ここがポイント。チャンネル名を連結すると、その全部に同じコマンドを適用できますABCDEFGH の後にスペースを置いて続けるコマンドが、A〜H 全部に効きます。

トークン 何をしているか
{=*} 調号を全リセット(C メジャー扱い)
PC パンをセンターに
$glissando=32 グリッサンドのデフォルトステップを 1/32 に
$BendRange=2 ピッチベンドレンジを 2 半音に

各チャンネルの初期設定

A L16 Q1 PL64 $Accent=On V100 v60
B L16 Q8 LV12 $accent=on V60  v30
C L16 Q8 LV12 $accent=on V50  v30
D L1  Q8                 V127 
E L1  Q8                 V100
F L1  Q8                 V64
G L1  Q8                 V32  K7
H L16 Q1                 V127 PR64 

チャンネルごとに「デフォルト長さ・ゲート・パン・ベロシティ」をまとめて設定しています。

コマンド 効果
L16 デフォルト長さ = 16 分音符
L1 デフォルト長さ = 全音符(ロングトーン用)
Q1 ゲートを最短(スタッカート、1/8)
Q8 ゲートを最長(フルゲート)
PL64 パン 左 64(左寄り)
PR64 パン 右 64(右寄り)
$Accent=On アクセントモード ON → 大文字=V、小文字=v のベロシティを使い分け
V100 v60 アクセント時 100、非アクセント時 60
LV12 ( ) で増減するときのステップ量を 12 に(デフォルト 8)
K7 キーを 7 半音上げる(G チャンネルだけ移調)

$accent=on のように小文字で書かれている箇所もありますが、設定値は同じ意味で通ります。

マクロ(エイリアス)の定義

% SeqA !Xxrx ) rxXx ) rrXr ) rxXr ( Xxrx ( rxXx ( rxxr rXxr

% で始まる行は エイリアス(マクロ)の定義SeqA という名前で、16 音分のリズムパターンを 1 つにまとめています。

中身を分解すると:

トークン 意味
!X 変数 X を展開(後で各チャンネルで違う音名を入れる)
x 直前と同じ音程で再発音(小文字 x は非アクセント側)
X 同じく再発音(大文字 X はアクセント側)
r 休符(小文字 r
) ベロシティを LV 分(ここでは 12)上げる
( ベロシティを LV 分下げる

つまり「X / x / r」を組み合わせたリズムを、ベロシティを ) ) ) ( ( (だんだん大きく → だんだん小さくしながら鳴らす、というクレッシェンド/デクレッシェンド付きのパターンになっています。

チャンネル A: 主旋律 + スラー

A o3 [C ^g >d E <E ^b >g  D<]4
A o3 [C ^g >d E <E ^b >g  D<]4
A o3 [C-^g >d E <E ^b >a  G<]4
A o3 [C-^g >d E <E ^b >g- D<]4
  • o3 で開始オクターブを 3 に(小文字 o でも通ります)
  • [ ... ]4 で 4 回繰り返し
  • ^スラーC ^g は「C を弾いて、そのままアタックなしで g に繋ぐ」イメージ
  • > < で音符ごとにオクターブを上下
  • C- は C♭(フラット)。- は音名の後ろに付ける(g- なら g♭)
  • 同じパターンを少しずつ変えながら 4 行並べることで、長いフレーズの中に微妙な変化を作っています

チャンネル B, C: 変数とマクロでリズムパート

B o5 !X{D}  [%SeqA]4
C o5 !X{E}  [%SeqA]2
C o5 !X{G}  [%SeqA]1
C o5 !X{G-} [%SeqA]1
トークン 意味
!X{D} 変数 X に D を代入(インライン定義)
%SeqA 先ほど定義したエイリアスを展開
[%SeqA]4 SeqA を 4 回繰り返す

これにより、SeqA 内の !X がそのチャンネルの音名(D / E / G / G♭)に置き換わって展開されます。変数はチャンネルごとに独立なので、B の X と C の X は別物として扱われます。

C チャンネルは [%SeqA]2[%SeqA]1[%SeqA]1 と、途中で変数を EGG♭ と入れ替えながら 4 周分のフレーズを変化させています。

チャンネル D, E: ロングトーン + ピッチベンド

D o2 a1+1  x_4>c1+1 <b1+1  x_4>d1+1
E o3 e1+1  x_4 g1+1  g1+1  x_4 a1+1

ここで初登場のトークン:

トークン 意味
a1+1 長さ 1+1 = 全音符 + 全音符(2 小節分のロングトーン)
x 直前と同じ音程で再発音
x_4>c1+1 x からピッチベンド開始 → 4 分音符の時間で >c1+1 へ移行(全体は 1+1 の長さ)

つまり「2 小節伸ばす → 次の音に向かってベンド → また 2 小節伸ばす」を交互に繰り返す、ベースラインらしい動きです。

ピッチベンドの構文は 起点音(遅延) _ (遷移時間) 目標音(全体長) というルールで、ここでは:

  • x = 起点音(直前と同じ音程)
  • _4 = 遅延 = 4 分音符(実は「全体長 − 遷移時間」の流れで読むと、4 分の時間でベンドする、と解釈してもよい)
  • >c1+1 = 目標音

詳しい構文は MML リファレンスのピッチベンド節を参照。

チャンネル F, G: グリッサンド付きパッド

F o4 <a2  x_4>c1+1  x_4e1+1  d1+1 ~ f#&x2
G o4 <a2  x_4>c1+1  x_4e1+1  d1+1 ~ g&x2

新しい記号:

トークン 意味
~ グリッサンドd1+1 ~ f#&x2 は「d を全音符 2 つ分鳴らした後、f# までグリッサンド」
& タイf#&x2 は f# と次の x を繋げる($TieMode=Slur の場合、再アタックなし)
f# f+ と同じ(F シャープ)

G チャンネルには冒頭で K7 が指定されていたので、書かれている音名から 7 半音上にシフトして鳴っています。F と G で同じ音型を書いても、結果として F は元のキー、G は完全 5 度上で重なる仕掛けです。

チャンネル H: タプレットによる高速アルペジオ

H o4 [ v100 [ {g^>cef#gb<}2   (50 ]2 r1 ]2
H o4 [ v100 [ {d^g>df#a>d<<}2 (50 ]2 r1 ]2

ここのキモは タプレット(連符){ }

トークン 意味
{g^>cef#gb<}2 中身の音を全部合わせて 2 分音符の長さ に押し込める
g^>c g からスラーで >c に繋ぐ(タプレット内でも ^ & は機能)
> < タプレット内のオクターブ変更は { } の外にも持続
(50 ベロシティを 50 下げる(その場限りの強い減算)
r1 全音符の休符

外側の [ ... ]2 2 重ループで、「アルペジオ x2 → デクレッシェンド → 全休符」を 2 回繰り返す構造になっています。同じパターンに対して、音型を少し変えた 2 行目を書くことで、A セクション / B セクション的な切り替えが生まれます。


この曲で使われている機能の早見表

ここまで読めば、以下のコマンドは一通り体感できているはず。詳しい仕様は MML リファレンス で確認できます。

構造系

  • 複数チャンネル同時記述ABCDEFGH ...
  • 繰り返し [...]N、入れ子可
  • エイリアス % Name 内容%Name で展開
  • 変数 !X{値} でインライン定義、!X で展開(チャンネル独立)

音程・長さ系

  • オクターブOn / < / >
  • 臨時記号C+ C# C- C=
  • 長さ加減算1+14-32 など
  • 同音再発音X / x(アクセント対応)
  • 休符R / r

表現系

  • スラー ^ — フルゲートで連結
  • タイ &$TieMode で挙動切替
  • ピッチベンド _ — 起点・遷移時間・全体長を柔軟指定
  • グリッサンド ~ — クロマティック補間
  • タプレット {...}N — 連符

設定系

  • デフォルト長さ Lゲート Qパン P / PL / PR / PC
  • キーシフト K調号 {=*} {+f} {-eab}
  • アクセント $Accent=On + V / v の使い分け
  • 増減ステップ LV (= lv)、( ) で増減
  • ピッチベンドレンジ $BendRange
  • デフォルトグリッサンド $glissando

次のステップ

サンプルを写経して動かしたら、以下を試してみてください。

  • テンポを変える: T135T90T180
  • 音色を変える: ヘッダの Settings から各チャンネルの波形と ADSR を変更
  • キーを変える: K7 の数値を K3K-5 にして響きの違いを楽しむ
  • マクロ書き換え: % SeqA ... の中身を書き換えると 4 チャンネル分のリズムが一気に変わる

慣れてきたら、自分で短いマクロや変数を組み合わせてリズムパターンを作るところから始めると、構造化された MML が書けるようになります。