マクロと変数 — MML 連載 #7

Published: May 24, 2026 by mewlist

MML 連載シリーズ の 7 回目です。本シリーズで扱う MML 記法は MewMMLPad(VST3 / スタンドアローン / ブラウザ版) のものです。記事内の例はすべて MewMMLPad の Web プレイヤー上で動かしながら確認できます(PMD / FMP など他環境の MML とは方言が異なる箇所があります)。

今回は フレーズに名前を付けて再利用する 仕組みを扱います。% Name(マクロ)と !X{...}(変数)です。前回 の繰り返し [...]N が「その場で連続反復」だったのに対し、マクロと変数は 離れた場所でも同じフレーズを呼び出せる のが違いです。

マクロ % Name の基本

マクロ(エイリアス)は、MML の断片に名前を付けて、あとから名前で呼び出す 仕組みです。% 名前 内容 で定義し、%名前 で展開します。

% Riff c d e g
A T120 o4 L8 Q4
A %Riff %Riff

% Riff c d e g で「c d e g」というフレーズに Riff という名前を付け、A チャンネルの %Riff %Riff で 2 回呼び出しています。展開すると次のようになります。

%Riff %Riff  →  c d e g  c d e g

定義行はチャンネル行より前に、% で始まる行として書きます。名前は英数字で付けられます。同じフレーズを何度も打ち込む代わりに、定義をひとつ直せば呼び出し先がすべて変わるのが利点です。

なお、マクロ展開中の演奏位置カーソルは %Riff を呼び出した位置に固定されます(展開後の音を 1 音ずつ追いかける表示にはなりません)。

任意の MML をマクロにできる

マクロの中身は音符だけではありません。音量やオクターブなどのコマンドを含めて、任意の MML をまとめられます。

% Lead V100 o5 c d e f
A T120 L8 Q4
A %Lead %Lead

% Lead V100 o5 c d e f は、音量 V100・オクターブ o5 の設定ごとフレーズに名前を付けたものです。%Lead を呼ぶたびに設定とフレーズがまとめて展開されます。

%Lead %Lead  →  V100 o5 c d e f  V100 o5 c d e f

リフレインや決まり文句のフレーズ、音色の設定セットなどを 1 か所にまとめておけます。

変数 !X{...}

変数はマクロに似ていますが、1 文字の名前で、チャンネルごとに独立 している点が違います。!X{値} で定義し、!X で展開します。

A T120 o4 L8 Q4
A !X{c e g} !X !X

!X{c e g} で変数 X に「c e g」を代入し、続く !X !X で 2 回展開します。インライン(同じ行)で定義してそのまま使えます。

!X{c e g} !X !X  →  c e g  c e g

変数は チャンネルごとに別物 です。A!X{c e g}B!X{e g b} と定義すれば、同じ !X という記述でもチャンネルごとに違う中身が展開されます。

組み合わせて短い演奏にしてみる

マクロの中に変数を仕込んでおくと、同じマクロを、チャンネルごとに中身を変えて使い回せます。これが 2 つを組み合わせる一番の旨味です。マクロ・変数に、これまでの繰り返しも組み合わせた実演を見てみます。

% Arp Q2 L16 !X8. ^ !Xr > !Xr < !X8. ^ !Xr > !X < !X8.
A T120 o4 V80
A !X{e} [%Arp]4
B      o3 V120
B !X{a} %Arp !X{g} %Arp !X{f} %Arp !X{d} %Arp

マクロ Arp は、変数 !X の音を軸にした 1 小節ぶんのリズムパターンです。Q2(短めのゲート)でスタッカート気味にし、付点 8 分・16 分・休符・オクターブの上下(> <)・スラー(^)を組み合わせています。可変なのは !X の部分だけで、リズムの形は固定です。!X{e} を入れると次のように展開されます。

%Arp (X=e)  →  Q2 L16 e8. ^ e r > e r < e8. ^ e r > e < e8.
  • A チャンネルは !X{e} [%Arp]4e を軸にした同じパターンを 4 小節繰り返します。
  • B チャンネルは !Xagfd と 1 小節ごとに差し替えながら %Arp を 4 回。上声部が同じ音型で回り続ける下を、ベースが下降していきます。

パターンの形はマクロ 1 行ぶんだけ。あとは変数を差し替えるだけで、固定の上声部と動くベースが同じ定義から組み上がります。

% Nameどのチャンネルからでも呼べる共通フレーズ!Xチャンネルごとに中身を差し替えられるプレースホルダ です。マクロ本体に変数を仕込めば、1 つのパターン定義から各チャンネルで少しずつ違う演奏を展開できます。打ち込みの重複を減らし、あとからまとめて直せるのが利点です。

次回

次の #8「パンとプログラムチェンジ」 では、P / PL / PR / PC(定位)と @n / @bank:slot(音色切替)を扱います。

連載全体の目次は シリーズ一覧 からどうぞ。

Share