Skip to content

Instantly share code, notes, and snippets.

Created February 9, 2018 13:43
Show Gist options
  • Save anonymous/975e4cf634c2b156621e662b5fd12e4a to your computer and use it in GitHub Desktop.
Save anonymous/975e4cf634c2b156621e662b5fd12e4a to your computer and use it in GitHub Desktop.

Reference (対象change set 11884)

 

目次

はじめに
音程関連
音長関連
音量関連
制御関連
音色関連
発音数関連
付加情報関連
マクロ機能詳細

 

はじめに

FlMMLの演奏データはプレーンテキストで記述します。
大文字、小文字の区別はありませんが、半角で記述してください。
ただし、コメントエリア内は全角を含んでいてもOKです。

重要な区切り文字と、トラック定義

FlMMLでは、セミコロン「;」が重要な区切り文字としての役割を果たしています。
ccc;
eee;
ggg;
このように書くと、ドミソの和音を3回発音させます。

すなわち、テキスト先頭から最初のセミコロンまでが第1トラック、さらにその次のセミコロンまでが第2トラック、といった具合に定義されます。これを続けることで、次々とトラックを増やすことが出来ます。

演奏データ記述方法

演奏データで定義する内容は、大きく分けて3種類あります。
・MML(実際に発音させる内容)
・マクロ
・メタデータ

演奏データは、再生要求を受けて、コンパイルされてから演奏されます。
コンパイルされるうち、時間ごとにシーケンスされるのは上記のうちMMLの部分だけで、
それ以外の部分はMMLコンパイル前の処理(プリプロセッサ)により、波形データに変換されたり、
文字置換されたりするため、直接シーケンスデータには なっていない点に注意してください。

MML定義について:
cdefgab;」というように、実際に発音させたい内容を書いてトラック定義します。
MML定義内では、前もって定義したマクロを「$名前」で参照することが出来ます。
MML定義内容をマクロ参照だけで満たしても構いません。
ひとつの発音トラックは、基本的に単音(和音にならない)フレーズを鳴らす内容になります。
しかしながら、ひとつの発音トラックで和音を鳴らす、特別な定義方法もあります。

マクロ定義について:
$名前=内容;」という書き方をすると、マクロとして定義されます。
行頭から「$」で始めて「=」で間をつなぎ、「;」で締めることで定義されたマクロは、それ以降に記述された
トラック内にて「$名前」で参照され「内容」に置き換えられます。
セミコロンによるマクロ定義終了までの間が複数行であっても良いので、長いフレーズでも定義可能です。
すでに定義されたマクロを、以降のマクロ定義で参照するような、入れ子的なマクロ定義も可能です。
マクロ定義はセミコロンで締め括りますが、トラック定義とは別物と考えてください。
マクロは、MMLが解釈される前に置き換え(文字展開)処理されるので、
MMLが解釈される時には既に無かったことにされているからです。(トラックとして認識されていません)
マクロの詳細については後述します。

メタデータについて:
メタデータとは、データのためのデータ、のことです。
MMLのモード設定や、波形データのユーザー定義など、付随情報全般をサポートする記述です。
メタデータの定義は、必ず行頭から書き始める条件で、「#」を付けたコマンドで行い、
セミコロンによる区切りは使用しません。メタデータ定義の多くは、改行を定義終端として認識しています。
メタデータを記述する位置は、トラック定義の前でも後でも大丈夫です。
これは、MMLコンパイル前に、メタデータ文字列は情報取得されてすぐ、除去されるからです。

 

記述方法の詳細

下記表の中の[n] というところは、例えば T150 のように具体的な数字を書いてください。
[desc] では独自な記述を行います。

 

音程関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 CDEFGAB 音名。ドレミファソラシに対応します。
音名の直後にプラス(+)またはシャープ(#)をつければ半音上がります。
音名の直後にマイナス(-)をつければ半音下がります(フラット)。
ダブルシャープ、ダブルフラットの記述も受け付けます。
シャープ・フラット(+,#,-)の後に数字をつけると、音長を指定できます。
音長の後にピリオド(. )を付けると付点音符になります。
複数の付点の記述も受け付けます。

[例1]
8分音符のド#: C+8
16分音符のソのダブルシャープ:G++16
付点16分音符のラ♭: A-16.
付点を2個付けた場合は、指定音長の1.75倍です。
A4..A4&A8&A16 は同じ音の長さです。

[例2] かえるのうた
t60 L8 o5
cdefedcr
efgagfer
crcrcrcr
c16c16d16d16e16e16f16f16edcr;

[備考]
上級者向けですが、C%96 のように%付の数字により、音の長さを tick カウントで指定することも出来ます。
FlMMLでは全音符の tick カウントが 384 になっているので、
4分音符のticks数 = 384 ÷ 4 = 96
8分音符のticks数 = 384 ÷ 8 = 48
384分音符のticks数 = 384 ÷ 384 = 1
となります。
16分音符のド#は、C+%24 と書くことも出来ます。
 R 休符。
これも音名同様に長さを指定できます。
 O[n] オクターブ指定。範囲は 0~8 。デフォルトは O4。
[注]
FM音源モジュール(@14)の有効音域は、O1C+ から O8B までです。
 < オクターブを相対的に1だけ上げます。
 > オクターブを相対的に1だけ下げます。
 NS[n] 絶対ノートシフト。
例えば CDE NS-1 CDE NS-1 CDE と書くと、
二度目のドレミは半音下がります。三度目も半音下がったドレミです。
 @NS[n] 相対ノートシフト。
例えば CDE @NS-1 CDE @NS-1 CDE と書くと、
二度目のドレミは半音下がり、三度目は更に半音下がります。
 #OCTAVE REVERSE 相対オクターブ変更記号の機能反転。
メタデータとして #OCTAVE REVERSE と記述すると、オクターブ上げ下げ(不等号)の機能が反転します。
 @D[n] デチューン。cent 単位でピッチを調整します。プラス・マイナスどちらも可能。
cent とは半音の音程差を100分割した単位なので、@D100 で半音上げ、@D-100 で半音下げになります。
 @L[n],[n],[n],[n],[n],[n] LFO。
@L に続けて数字をカンマで区切って引数を指定します。
depth、width、form、delay、time、dest の順で指定します。

depth :
揺らす対象の振幅。音程の場合の単位はcent 。

width :
1周期の長さ。単位はticks 。

form :
変化パターンの波形。
音色指定に対応した波形番号で変化パターンを指定します。
波形番号の前にマイナスを付けると上下が反転した波形になります。
0:サイン波
1:ノコギリ波
2:三角波
3:パルス波(デューティー比50%固定)
4:ホワイトノイズ
5:FCパルス波(デューティー比50%固定)
6:FC三角波
7:FCノイズ
8:FCショートノイズ
9:FC DPCM
10:GB波形メモリ音源
11:GBノイズ
12:GBショートノイズ
13:波形メモリ音源
14:無効
注1:10-0 や、13-15 のようにして、自作波形を採用することも可能。
注2:2-1 と指定すると変位0から始まる三角波。-2-1 とすれば上下逆転。
注3:波形番号14は、LFO向けの変位出力を行わないため、効果はありません。
例1: @L20,30,0,60,0,0
例2: @L20,30,-2-1,60,0,0
例3: @L20,30,13-15,60,0,0

delay :
遅延。発音からこのticks経過後にLFOがスタートします。

time :
回数。ここで指定した回数が終わったらLFOなしに戻ります。0で無限繰り返し。

dest :
LFOで揺らす対象。
0:音程
1:音量
2:フィルタカットオフ周波数
3:パルス幅
4:FM入力レベル
5:パン

※form、delay、time、dest は省略可能で、
省略した場合は後ろから順に省略したものとみなされます。

 

 

音長関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 L[n] デフォルト音長の指定。範囲は 1~384。デフォルトは L4。
本コマンドにより、音名の後の音長指定を省略した場合の音長を指定できます。
指定の際、384より大きい数字や、384分音符の整数倍の音長にならない数字を指定してもエラーにはなりませんが、丸め処理が行われるため、正確な音長指定にはなりません。
384分音符の整数倍となる正確な音長指定とは、384, 192, 128, 96, 64, 48, 32, 24, 16, 12, 8, 6, 4, 3, 2, 1 です。
 Q[n] ゲートタイムの割合の指定。範囲は 0~16。デフォルトは Q15。
ある長さの音を再生するとき、実際には指定された音長の [n]/16 だけを発音し、残りの時間は休符とします。
 @Q[n] ゲートタイムの絶対指定。デフォルトは@Q0。
Qで指定されたゲートタイムからさらに、全音符の [n]/192倍 の長さを引いたゲートタイムにします。
 & タイまたはスラー。
タイは、同音程で音長を延長します。
スラーは、異なる音程で発音しますが、なめらかに切れ目なく(ゲートタイムも一時無効になりつつ)発音します。

[例1]
A4&16&8
タイの記述です。
4分音符のラを、16分音符分延長し、さらに8分音符分延長します。
この場合、ゲートタイムの設定は合計音長に対して作用します。
仕様上、L でデフォルト音長を指定した際に省略できる音長記述は、音名表記直後の音長だけになります。

[例2]
C4&D4&E4
スラーの記述です。
CとD、DとEの間が切れ目なく(ゲートタイム一時無効で)発音されます。
この場合、E にのみ、ゲートタイムが指定通り作用します。

[例3]
A4&A16&A8
この記述はタイのように見えますが、スラーの記述と見なされます。
タイとの違いは、ゲートタイムが最後の「A8」にしか作用しない点です。 
 { ... } 連符指定。
通常の音長指定では割り切れない音長による連符(5連符や7連符)を演奏します。
 {音程データ群}音長 のように記述すると、音長分の長さが合計になるよう、それぞれの音程データに均等に音長が割り振られます。
音長を省略するとデフォルト音長が使用されます。

[例1] {CEG}4
4分音符が合計の音長になるよう、CEG を均等な長さで演奏します。
この場合、1つあたり12分音符の長さになります。

[例2] {CDEFGFEDC}1
全音符が合計の音長になるよう、CDEFGFEDC をほぼ均等な長さで演奏します。
この場合、1つあたりの音長 tick カウントが整数にならないため、近似処理され、
はじめから順に 43,42,43,43,42,43,43,42,43 ticks になります。
※あまりにも無茶なデータは正しく演奏しない場合があるのでほどほどに。

注1: { }内では * コマンド(ポルタメント)は使用できません。
注2: 連符を引数付きマクロの引数に使う場合は " " で括って指定してください。
(マクロ定義)
$MACRO{ARG} = %ARG;
(マクロ呼び出しの際、次のように " "  で括る)
$MACRO{"{CDEFG}4"}

 

 

音量関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 V[n] 大まかなベロシティ(音量)指定。範囲は 0~15 。
内部管理は@Vのみなので、(指定値× 8 + 7) に変換されます。
V0 は @V7 相当となります。
 @V[n] 細かいベロシティ(音量)指定。範囲は 0~127。デフォルトは@V100。
タイやスラーの途中では変更されません。
 @X[n] エクスプレッションの指定。範囲は 0~127。デフォルトは@X127。
ベロシティは発音時の音の強さですが、エクスプレッションは音の抑揚をつけるのに使われます。ですから、スラーの途中でも変更可能です。
 X[n] 音量モードの指定。範囲は 0~2。デフォルトは X0 。
エンベロープ・ベロシティ・エクスプレッションの音量スケールに影響します。

0 のとき線形の音量指定。

1 のとき非線形の音楽的な音量指定。
(ダイナミックレンジ48dB。@Vが8減ると約-3dB。@V0のとき特例で0倍)

2 のとき非線形の音楽的な音量指定。
(ダイナミックレンジ96dB。@Vが4減ると約-3dB。@V0のとき特例で0倍)
 @P[n] パンポットの指定。範囲は 1~127。デフォルトは@P64。
音の定位を指定します。小さいほど左、大きいほど右で、中央が64。

[備考1]
64を中心に、左右63段階を持つ計算になります。
@P64 を基準に、[左]1倍、[右]1倍 とすると、
@P63 のときは、[左]64/63倍、[右]62/63倍。
@P65 のときは、[左]62/63倍、[右]64/63倍。
@P1  のときは、[左]126/63倍、[右]0/63倍。
@P127 のときは、[左]0/63倍、[右]126/63倍。

[備考2]
パンポット処理は、音声波形をレンダリングする直前に処理されています。
前提として、音声レンダリングバッファは -1.0 ~ +1.0 の浮動小数点数で 1サンプルを左右交互に表現することになっています。
一方、音源モジュールから受け取る波形も -1.0 ~ +1.0 のモノラル浮動小数点数で用意していますから、レベル調整しないと複数トラックであっという間に音割れが発生してしまいます。
パンポットの処理時には、@P64のとき、基準になる振幅は左右とも最大音量設定の 0.25倍 になる実装になっています。例えば、サイン波モジュールを最大音量で @P64 とした場合、4トラックまでは音割れしませんが、5トラック以上になると音割れしてしまいます。同様に、サイン波の最大音量で @P127 のトラックが3トラック以上存在しても音割れすることなります。
音割れを防ぐためには、音量設定、パンポット、トラック数による最大振幅の計算結果に注意する必要があります。
 ( ベロシティ(音量)を相対的に1段階上げます。
直前に使った音量コマンドが V か@V かによって変化量が変わります。
数字を添えて (5 とすると、5段階上がります。
 ) ベロシティ(音量)を相対的に1段階下げます。
直前に使った音量コマンドが V か@V かによって変化量が変わります。
数字を添えて )5 とすると、5段階下がります。
 #VELOCITY REVERSE 相対ベロシティ変更記号の機能反転。
メタデータとして #VELOCITY REVERSE と記述すると、ベロシティ上げ下げ(括弧)の機能が反転します。

 

 

制御関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 T[n] 1分間における拍数(BPM)によるテンポ指定。
ただし、4分音符を1拍としています。
デフォルトは T120 。
小数点以下第二位まで指定できます。
 ; (セミコロン) 次のトラックへ移ります。
和音を出したいときに使います。
マクロ定義の終了(区切り)にも使用します。
 /:[n] … / … :/ 繰り返しの指定。
/:」から「:/」の間を [n] 回繰り返します。
最終ループのとき、「 / 」があればループを抜けます。「 / 」は省略可能。
 [n] 省略時の繰り返し回数は2です。

[例]
/:3 cde / fg :/
この記述は、
cde fg cde fg cde
と同じになります。

[備考]
この繰り返し機能は、MMLコンパイル前のプリプロセッサにより処理されます。
つまり単純なコピーペーストのような処理なので、無限リピートは出来ません。
 /* ...... */ コメントエリア。
/* と */ に囲まれた文字列はコメントとして読み飛ばします。
コメントエリア内は全角文字を含んでいてもOKです。
 * (アスタリスク) MML風ポルタメント。
音名を * で繋げるとポルタメントになります。

[例1] C*<C4
ドからオクターブ上のドまで4分音符の長さで滑らかに変化させます。
[例2] C1&C*<C4&C2.
ドを全音符分鳴らした後、オクターブ上のドまで4分音符の長さで変化させ、
その後符点2分音符の長さで鳴らします。
[例3] C*<C1&1&1&1
全音符以上の長さで変化をさせたい場合は音長のみのタイで実現できます。
例3では、全音符4つ分の長さで、ドからオクターブ上のドまで変化させています。

<次のような記述は出来ません>
[例4] C*<C4*>C4
この場合はエラーになります。
 @U0 MIDIデータ風ポルタメントをOFFにします。MIDIで言う所のCC#65に相当します。
 @U1 MIDIデータ風ポルタメントをONにします。MIDIで言う所のCC#65に相当します。
 @U2,[n] MIDIデータ風ポルタメントの音程変化割合を指定します。範囲は 0~127。
0 が早く、127 がゆっくり音程が変化します。MIDIで言う所のCC#5に相当します。
[例] @U2,40 @U1 CG<C
 @U3,[desc] MIDIデータ風ポルタメントの開始音程を指定します。
MIDIで言う所のCC#84に相当します。
通常の音程変化は直前の音程からのスタートですが、@U3,[desc] を指定すると変化開始音程を指定することが出来ます。
有効になるのはこのコマンドが指定された直後の音程のみで、その次からはまた直前の音程からとなります。
[desc]による変化開始音程の指定方法は2種類あります。
音程番号を直接指定する方法と、音程を文字として指定する方法です。
[例1] @U3,48
o4c からの音程変化。
[例2] @U3,O3A-
o3a- からの音程変化。
文字指定の場合は オクターブ記号(O)、音名(A~G)、フラット・シャープ(-,+,#)のみが使用できます。
相対オクターブ変更記号は使用出来ないので注意してください。

 

 

音色関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
基本の音源モジュール:@0 ~ @4
 @0 VCOの波形パターン(音色)を、サイン波にします。
@0 (又は@0-0)と記述すると、通常のサイン波になります。
@0-1 と記述すると、半波整流されたサイン波になります。
@0-2 と記述すると、全波整流されたサイン波になります。
 @1 VCOの波形パターン(音色)を、ノコギリ波にします。
@1 (又は@1-0)と記述すると、変位最大から位相スタートするノコギリ波になり、
@1-1 と記述すると、変位0から位相スタートするノコギリ波になります。
 @2 VCOの波形パターン(音色)を、三角波にします。
@2 (又は@2-0)と記述すると、変位最大から位相スタートする三角波になり、
@2-1 と記述すると、変位0から位相スタートする三角波になります。
[注] @2-1 と記述する方が、ノートオン時のプチノイズが低減します。
 @3 VCOの波形パターン(音色)を、パルス波にします。
@3 と記述すると、パルス波になります。
続けて、後述する @W[n] を記述すると、パルス幅(デューティ比)を [n]% に指定することが出来ます。
トラックごとに、@3 のパルス幅は、あらかじめ @W50 に初期設定されています。
 @4 VCOの波形パターン(音色)を、ホワイトノイズにします。
@4 と記述すると、ホワイトノイズになります。
続けて、後述する @N[n] を記述すると、ノイズ周波数を指定することが出来ます。
トラックごとに、@4 のノイズ周波数は、あらかじめ @N0 に初期設定されています。
FC音源モジュール:@5 ~ @9
 @5 VCOの波形パターン(音色)を、FCパルス波にします。
@5 と記述すると、FCパルス波になります。
続けて、後述する @W[n] を記述すると、パルス幅(デューティ比)を [n]×12.5% に指定することが出来ます。
トラックごとに、@5 のパルス幅は、あらかじめ @W4 に初期設定されています。
 @6 VCOの波形パターン(音色)を、FC三角波にします。
@6 (又は@6-0)と記述すると、変位最大から位相スタートするFC三角波になり、
@6-1 と記述すると、変位0から位相スタートするFC三角波になります。
[注] @6-1 と記述する方が、ノートオン時のプチノイズが低減します。
[備考]FC三角波は普通の三角波とは異なり、16段階の変位で作られるので波形がガクガクしています。
 @7 VCOの波形パターン(音色)を、FCノイズにします。
@7 と記述すると、FCノイズになります。
@7 では、音程が直接ノイズ周波数の指定になります。
範囲は o0c ~ o1d+ の16種類です。
o0c が一番高いノイズ周波数で、音程を上げるに従って低周波ノイズになります。
数値でノイズ周波数を指定したい場合、ノートシフトを使う方法があります。
[例] @7 o0 ns7 ccc ns3 ccc ns0 ccc
[備考]
FCノイズは、ホワイトノイズのようにランダムな変位によって作られるものではなく、
パルス波の位相を擬似ランダムで細かく変更することによって作られます。
 @8 VCOの波形パターン(音色)を、FCショートノイズにします。
@8 と記述すると、FCショートノイズになります。
@8 では、音程が直接ノイズ周波数の指定になります。
範囲は o0c ~ o1d+ の16種類です。
o0c が一番高いノイズ周波数で、音程を上げるに従って低周波ノイズになります。
 @9 VCOの波形パターンを、FC DPCM にします。
@9 では、後述する #WAV9 [n],[desc] ([n]は波形番号) によって定義した波形データを参照します。
@9-0 や、@9-15 の要領で波形番号をつけて記述しします。
o0c が一番低いDPCM再生周波数で、音程を上げると16段階までのピッチ変更が出来ます。
GB音源モジュール:@10 ~ @12
 @10 VCOの波形パターン(音色)を、GB波形メモリ音源にします。
@10 では、後述する #WAV10 [n],[desc] ([n]は波形番号) によって定義した
「1周期分の」波形データを参照します。
@10-0 や、@10-15 の要領で波形番号をつけて記述し、音色を指定します。
 @11 VCOの波形パターン(音色)を、GBノイズにします。
@11 と記述すると、GBノイズになります。
@11 では、音程が直接ノイズ周波数の指定になります。
範囲は o0c ~ o5d+ の64種類です。
o0c が一番高いノイズ周波数で、音程を上げるに従って低周波ノイズになります。
 @12 VCOの波形パターン(音色)を、GBショートノイズにします。
@12 と記述すると、GBショートノイズになります。
@12 では、音程が直接ノイズ周波数の指定になります。
範囲は o0c ~ o5d+ の64種類です。
o0c が一番高いノイズ周波数で、音程を上げるに従って低周波ノイズになります。
unsigned 8bit 波形メモリ音源モジュール:@13
 @13 VCOの波形パターン(音色)を、波形メモリ音源にします。
@13 では、後述する #WAV13 [n],[desc] ([n]は波形番号) によって定義した
「1周期分の」波形データを参照します。
@13-0 や、@13-15 の要領で波形番号をつけて記述し、音色を指定します。
FM音源モジュール:@14
 @14 VCOの波形パターン(音色)を、FM音源にします。
@14 では、後述する
#OPN@[n] {[desc]} ([n]は音色データ番号)
もしくは
#OPM@[n] {[desc]} ([n]は音色データ番号)
によって定義した音色データを参照します。
@14-0 や、@14-15 の要領で音色データ番号をつけて記述し、音色を指定します。
[注]
FM音源モジュールでは、ひとつのトラック内で、4オペレータ使用したFM変調音声を生成しています。後述する複数トラックを使用したFM変調機能(@o や @i など)とは別のものと考えてください。
 @MH[n],[n],[n],[n],
[n],[n],[n]
FM音源モジュール専用LFO指定。
機能的には、OPMハードウェアLFO相当です。
音色データ側でも当コマンド相当の指示情報を持つことが出来ますが、
MML中で逐次変化をつけたい場合に使用してください。

引数は、@MH に続けて数字をカンマで区切って指定します。
wf、lfrq、pmd、amd、pms、ams、sync の順で指定します。

wf :
LFOで使用する波形を選択。範囲は 0~3 。デフォルトは 0 。
0: のこぎり波
1: 矩形波
2: 三角波
3: ランダム波(ノイズ)
lfrq:
LFOの周波数。範囲は 0~255 。デフォルトは 0 。
pmd:
音程LFOの出力レベルを指定。範囲は 0~127 。デフォルトは 0 。
amd:
音量LFOの出力レベルを指定。範囲は 0~127 。デフォルトは 0 。
pms:
音程LFOの変調度指定。範囲は 0~7 。デフォルトは 0 。
ams:
音量LFOの変調度指定。範囲は 0~3 。デフォルトは 0 。
sync:
同期機能(未実装)

記述例: @MH2,80,127,0,3,0,0

※wf 以外は省略可能で、省略した場合は
後ろから順に省略したものとみなされます。
各音源モジュール関連機能
 @W[n] VCOの波形パターン(音色)に、パルス波を指定している場合に、
パルス幅(デューティ比)を指定することが出来ます。

@3 指定後に定義した場合:
パルス幅(デューティ比)を [n]% に指定することが出来ます。
指定範囲は -100 ~ 100 です。トラック先頭におけるデフォルトは @W50 です。
通常は正の数で、デューティ比をパーセント数で指定します。
0% や 100%と指定した場合は、DCにはならず、1% や 99%に丸められます。
負の数で指定した場合は、MIXモード(ノイズ混じりの音)として認識され、
指定数値の絶対値がパルス幅のパーセント指定になります。
MIXモードで使用するノイズモジュールは@4のホワイトノイズです。

@5 指定後に定義した場合:
パルス幅(デューティ比)を [n]×12.5% に指定することが出来ます。
想定指定範囲は 1 ~ 7 です。トラック先頭におけるデフォルトは @W4 です。
FC音源のパルス幅の種類は、12.5%、25%、50%、75% なので、
対応する @W1、@W2、@W4、@W6 が基本的な選択肢になります。
 @N[n] VCOの波形パターン(音色)に、ホワイトノイズを指定している場合に、ノイズ周波数を指定することが出来ます。指定値が大きいほど低い感じになります。

@4 指定後に定義した場合:
指定範囲は 0 ~ 127 です。トラック先頭におけるデフォルトは @N0 です。

@3のmixモード(@3指定後、@Wに負数指定)で、@N[n]を定義した場合:
@4の場合と同様です。
 @F[n],[n],[n],[n] フィルタ。
@F に続けて数字をカンマで区切って引数を指定します。
switch、amount、frequency、resonance の順で指定します。

switch :
フィルタの種類。
0 のとき フィルタなし
1 のとき 荒いLPF
2 のとき 高品質LPF
-1 のとき 荒いHPF
-2 のとき 高品質HPF

amount :
フィルタエンベロープの影響度。設定範囲は -127 ~127 。

frequency :
基準になるカットオフ周波数。設定範囲は 0 ~127 。

resonance :
レゾナンス(カットオフ周波数付近の音を強調)の量。
設定範囲は 0 ~127 。 127 のときは発振します。

※フィルタには 後述する @E2 のエンベロープが影響します。
 @E1,[n],[n],[n],[n] VCA(音量)のエンベロープ設定。
@E1, に続けて数字をカンマで区切って引数を指定します。
attack、decay、sustain、release の順で指定します。

※現在指定中の音量(V / @V / @X 指定の結果)を「制限音量」と表記します。

attack :
無音から制限音量になるまでの時間([n] × 1/127秒)を指定します。
指定範囲は 0 以上。

decay :
attack 終了後、sustain に達するまでの時間([n] × 1/127秒)を指定します。
指定範囲は 0 以上。

sustain :
attack 終了後に目指す音量レベルを指定します。
指定範囲は 0 ~127 。 0 は無音で、127 は制限音量です。

release :
キーオフした時の音量レベルから、
無音になるまでの時間([n] × 1/127秒)を指定します。
指定範囲は 0 以上。

[注1]
decay と sustain のペアを複数続けて書くことで、エンベロープの制御点を
次々と増やすことができます。
例:
@E1, 0, 10,100,300,20, 60
動作解説:
ノートオン後、時間0でレベル最大(127)、その後時間10でレベル100、
その後時間300でレベル20、その後レベル20を維持。
この流れの中のどこでキーオフになるかは不定だが、
キーオフ時から、時間60で無音になる。

[注2]
FM音源モジュール(@14)には、当エンベロープ機能は無効です。
FM音源モジュールでは、
#OPN@[n] {[desc]}
もしくは
#OPM@[n] {[desc]}
による音色データ定義内のADSRエンベロープをご利用下さい。
 @E2,[n],[n],[n],[n] VCF(フィルタ)のエンベロープの設定。
@E2, に続けて数字をカンマで区切って引数を指定します。
attack、decay、sustain、release の順で指定します。
attack、decay、release の動作の仕様は @E1 と同様です。

sustain は、フィルタの掛かる強度を指定します。
指定範囲は 0 ~127 。0で最も強くフィルタが掛かります。

こちらも、decay と sustain のペアを複数続けて書くことでエンベロープの制御点を次々と増やすことができます。
 @'[desc]' フォルマント・フィルタの設定。人の声が持つ特徴的な倍音を強調することで声のように聞かせます。
@'A' と記述すると、「あ」。
@'I' と記述すると、「い」。
@'U' と記述すると、「う」。
@'E' と記述すると、「え」。
@'O' と記述すると、「お」。
@'' と記述(シングルクオートの中身なし)すると、機能オフ。
複数定義されたトラック間での音声変調をサポートするコマンド: @o @i @r @s
 @o[n],[n] 音声変調のための、パイプへ波形を出力する機能。
引数は、モード、パイプ番号の順で指定します。
モード:
0 のとき、出力しない。
1 のとき、波形を上書き出力。
2 のとき、波形をパイプ内へ加算。
パイプ番号:
出力先のパイプ番号(0 ~ 3)
 @i[n],[n] 音声変調のための、パイプから波形を入力する機能。
引数は、変調感度、パイプ番号の順で指定します。
@i では、対象パイプ内の波形を、FM変調のモジュレータとして入力します。
変調感度:
0 のとき、入力しない。
1~8 のとき、FM変調入力の感度。数値が大きいほど大きく変調。
パイプ番号:
入力元のパイプ番号(0 ~ 3)
[注]
FM音源モジュール(@14)には、当変調入力機能は無効です。
 @r[n],[n] 音声変調のための、パイプから波形を入力する機能。
引数は、変調感度、パイプ番号の順で指定します。
@r では、対象パイプ内の波形を、リングモジュレーション変調の
モジュレータとして入力します。
変調感度:
0 のとき、入力しない。
1~8 のとき、リングモジュレーション変調入力の感度。
数値が大きいほど大きく変調。4のときが通常のリングモジュレーション相当。
パイプ番号:
入力元のパイプ番号(0 ~ 3)
[備考]
リングモジュレーション変調では、自分自身の波形の変位と、モジュレータの波形の変位を掛け算することにより、変調結果を得ます。
 @s[n],[n] オシレータシンク変調のための、
パイプに対し同期信号を出力する、または、パイプから同期信号を入力する機能。
引数は、入出力モード、パイプ番号の順で指定します。
入出力モード:
0 のとき、入出力しない。
1 のとき、対象パイプに対し、オシレータシンク変調の同期信号を出力。
(1 のときは、同期信号を出力しつつ、音声出力も通常通り行われる)
2 のとき、対象パイプから、オシレータシンク変調の同期信号の入力を行う。
パイプ番号:
対象となるパイプ番号(0 ~ 3)
[備考]
オシレータシンク変調では、対象パイプから同期信号を受け取る度に、自分自身の波形の位相をリセットすることにより、変調結果を得ます。
同期信号を出力するモードでは、ノートオン中の波形が1周期を迎えるたびに同期信号が作られ、結果がパイプに出力されます。
たとえば、ある音程が定義されたトラックで同期信号をパイプに出力し、次のトラック定義で丁度1オクターブ低い音程をサイン波の音色でパイプから同期信号を受け取ったとすると、1/2周期で位相リセットされ続けますから、変調結果は全波整流されたサイン波のような波形になります。
[注]
当変調入出力機能は次の音源モジュールに対し無効です。
ノイズ関係(@4、@7、@8、@11、@12)
FC DPCM(@9)
FM音源モジュール(@14)
波形データ定義
 #WAV9 [n],[n],[n],[desc] FC DPCM音源(@9)の波形データ定義。
引数は、波形番号、初期変位、ループ再生フラグ、DPCMデータの順で指定します。

波形番号:
波形番号は、MMLで波形を指定する際に参照されます。
設定範囲は 0 ~ 15 。

初期変位:
初期変位は、DPCM差分計算の初期値になります。
設定範囲は 0 ~ 127 。
変位が0となる中心値は 64  。

ループ再生フラグ:
ループ再生フラグは、ループ再生の可否を指定します。
0 のとき、ワンショット再生。
1 のとき、ループ再生。

DPCMデータ:
DPCM波形データを base64 エンコードした文字列を記述します。
波形定義終了は改行によって検知されます。

[波形データ定義例]
#WAV9 0,64,0,mA==
#WAV9 7,64,0,mA==
#WAV9 15,64,0,mA==
(1バイト分のDPCM($98)を、同内容で波形番号0、7、15 に定義した例)

[備考1]
初期変位は unsigned 7bit で受け付けますが、
再生時は下位 1bit を無視した64段階で変位が変更されます。
[備考2]
DPCMバイナリのデコード処理では、各バイトのLSBから 1bit ずつ読み、
0 なら変位を1段階下げ、1 なら変位を1段階上げています。
[備考3]
変位の内部管理は -1.0 ~ +1.0 の浮動小数点数で行われており、
これに整数値の変位を割り当てています。
変位最低の -1.0 には、 0 。
変位中心の 0.0 には、 64 。
変位最高の +1.0 には割り当てがなく、整数最大の127 は 約 +0.98 。
 #WAV10 [n],[desc] GB波形メモリ音源(@10)の波形データ定義。
引数は、波形番号、PCMデータの順で指定します。

波形番号:
波形番号は、MMLで波形を指定する際に参照されます。
設定範囲は 0 ~ 31 。

PCMデータ:
32サンプルのPCMデータを、1周期分の波形として記述します。
波形定義終了は改行によって検知されます。
1サンプルは、半角1文字の16進数表記で、unsigned 4bit PCMです。
16進数以外の無効な文字は「0」として認識されます。
32サンプルに満たない定義をした場合は末尾に「0」が補われた
32サンプルとして認識されます。
スペース文字は読み飛ばされるので、例えば8サンプルごとに
スペースで区切って記述しても正しく認識されます。

[波形データ定義例]
#WAV10  0,0123456789ABCDEFFEDCBA9876543210
#WAV10  7,ffffffff33333333cccccccc00000000
#WAV10 15,89abcdef fedcba98 76543210 01234567
(波形番号0、7、15 に定義した例。16進数の英字は大文字小文字問わず)

[備考]
変位の内部管理は -1.0 ~ +1.0 の浮動小数点数で行われており、
これに整数値の変位を割り当てています。
変位最低の -1.0 には、16進数 0 。
変位中心の 0.0 には割り当てなし(16進数 7 と 8 の中間のため)。
変位最高の +1.0 には、16進数 F 。
 #WAV13 [n],[desc] 波形メモリ音源(@13)の波形データ定義。
引数は、波形番号、PCMデータの順で指定します。

波形番号:
波形番号は、MMLで波形を指定する際に参照されます。
設定範囲は 0 ~ 31 。

PCMデータ:
最大 1024 サンプルのPCMデータを、1周期分の波形として記述します。
波形定義終了は改行によって検知されます。
1サンプルは、半角2文字の16進数表記で、unsigned 8bit PCMです。
1桁ずつ解釈されますが、16進数以外の文字の桁は「0」として認識されます。
もし桁が中途半端に終わる記述をした場合、最後のサンプルは無効になります。
スペース文字は読み飛ばされるので、例えば2サンプルごとに
スペースで区切って記述しても正しく認識されます。

[波形データ定義例]
#WAV13  0,ff00000000000000
#WAV13  7,ff00
#WAV13 15,ffff ffff ffff 8080 0000
(波形番号0、7、15 に定義した例。16進数の英字は大文字小文字問わず)

[備考]
変位の内部管理は -1.0 ~ +1.0 の浮動小数点数で行われており、
これに整数値の変位を割り当てています。
変位最低の -1.0 には、16進数 00 。
変位中心の 0.0 には割り当てなし(16進数 7F と 80 の中間のため)。
変位最高の +1.0 には、16進数 FF 。
FM音源モジュール用 メタデータ定義
 #OPM@[n] {[desc]} FM音源(@14)の音色データ定義。
[n]には音色番号、そのあとに続く [desc] には音色データを記述します。
音色データ定義開始の「 { 」は、#OPM@ の記述と同じ行に書く必要があります。
音色データ定義終了は「 } 」によって検知されます。
音色データの各パラメータの区切り文字は、スペース、カンマ、セミコロン、改行、タブのうちどれでもよく、いずれも区切り文字として読み飛ばされます。

音色番号:
音色番号は、MMLで音色を指定する際に参照されます。
設定範囲は 0 ~ 127 。
全トラックから共用される音色データ記憶域を128個持っています。
この記憶域へは #OPM と #OPN いずれも同じ128個に対し定義します。
同じ音色番号で #OPM と #OPN 両方を定義した場合、現状 #OPN 優先です。

音色データ:
55個のパラメータ群により音色データを定義します。
そのうち末尾9個は省略可能のため、最少でも46個のパラメータを定義します。
フォーマットは次の通り。(音色パラメータ詳細)

#OPM@音色番号 {
  AL FB
  AR DR SR RR SL TL KS ML DT1 DT2 AME /*オペレータ1*/
  AR DR SR RR SL TL KS ML DT1 DT2 AME /*オペレータ2*/
  AR DR SR RR SL TL KS ML DT1 DT2 AME /*オペレータ3*/
  AR DR SR RR SL TL KS ML DT1 DT2 AME /*オペレータ4*/
/* 以下省略可 */
  OM
  WF LFRQ PMD AMD
  PMS AMS
  NE NFRQ
}

[音色データ定義・利用例]
#OPM@0 {
   2  7
  15 14  0  3  1 25  2  1  3  0  0
  18 14  0  7 15 35  2  7  3  0  0
  15 14  0  3  1 39  2  1  3  0  0
  18  1  1  7  1  0  1  1  3  0  0
}
@14-0 v14 o4cde&e&edcrcdedcd&d&d&d;
 #OPN@[n] {[desc]} FM音源(@14)の音色データ定義。
[n]には音色番号、そのあとに続く [desc] には音色データを記述します。
音色データ定義開始の「 { 」は、#OPN@ の記述と同じ行に書く必要があります。
音色データ定義終了は「 } 」によって検知されます。
音色データの各パラメータの区切り文字は、スペース、カンマ、セミコロン、改行、タブのうちどれでもよく、いずれも区切り文字として読み飛ばされます。
#OPN は #OPM の記述から、オペレータ1~4の「DT2」を省いた定義方法です。
「DT2」が省かれた以外は #OPM と同様です。

音色番号:
音色番号は、MMLで音色を指定する際に参照されます。
設定範囲は 0 ~ 127 。
全トラックから共用される音色データ記憶域を128個持っています。
この記憶域へは #OPM と #OPN いずれも同じ128個に対し定義します。
同じ音色番号で #OPM と #OPN 両方を定義した場合、現状 #OPN 優先です。

音色データ:
51個のパラメータ群により音色データを定義します。
そのうち末尾9個は省略可能のため、最少でも42個のパラメータを定義します。
フォーマットは次の通り。(音色パラメータ詳細)

#OPN@音色番号 {
  AL FB
  AR DR SR RR SL TL KS ML DT1 AME /*オペレータ1*/
  AR DR SR RR SL TL KS ML DT1 AME /*オペレータ2*/
  AR DR SR RR SL TL KS ML DT1 AME /*オペレータ3*/
  AR DR SR RR SL TL KS ML DT1 AME /*オペレータ4*/
/* 以下省略可 */
  OM
  WF LFRQ PMD AMD
  PMS AMS
  NE NFRQ
}

[音色データ定義・利用例]
#OPN@0 {
   2  7
  15 14  0  3  1 25  2  1  3  0
  18 14  0  7 15 35  2  7  3  0
  15 14  0  3  1 39  2  1  3  0
  18  1  1  7  1  0  1  1  3  0
}
@14-0 v14 o4cde&e&edcrcdedcd&d&d&d;
 #FMGAIN [n] FM音源モジュール全体への音量利得を設定します。
設定範囲は -127 ~ 127
127 のとき、+20dB 。
0 のとき、0dB 。
-127 のとき、-20dB 。

デフォルトは 91 。(+14.3dB)

 

 

発音数関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 #USING POLY [n] [desc] ポリフォニックモードを宣言します。
後述するMML定義内の @pl と組み合わせて使用します。

[n] には最大発音数を記述します。
[desc] に「force」と記述すると @pl がなくとも強制的にすべてのトラックにポリフォニックモードを設定します。

[解説]
ポリフォニックモードとは
1つのトラック定義で複数の音を同時に鳴らすモードです。
長いリリースの音でも途切れずに(重ねて)再生させることが出来ます。
#USING POLY の宣言がない場合は、通常モード(1トラックあたり単音)です。
後述の和音記法を用いると、1トラックで和音を奏でることも可能です。

[例1]
#USING POLY 3
@pl @e1,0,0,127,127 cdefgfedcegec;

[例2](@pl が無いトラックにも有効)
#USING POLY 3 force
@e1,0,0,127,127 cdefgfedcegec;

[注1]
ポリフォニックモード適用トラックでは、パイプ処理を伴うコマンド(@o @i @r @s )の使用は避けてください。
ポリフォニックモード、#USING POLY [n] では、通常1シーケンストラックにつき1音声トラックであるところ、1シーケンストラックに [n] 本の音声トラックを確保し、さみだれ式に発音要求を送ることでリリース音が重なって発音されるよう、自動処理しています。
その結果として、パイプ出力も内部トラック群で、さみだれ式に発生することとなり、パイプ入力での受け取りが難しくなっています。

[注2]
ポリフォニックモード適用トラックでは、音色設定(@)と音量モード(X)以外のコマンドは、受け付け次第、自動確保した内部トラック群の全てに同時通知される仕様になっているので、注意が必要です。
例えばリリースが残っているうちに @W でデューティー比変更をした場合、リリースで発音中の音に @W 指定内容が影響し、音が変わります。
@V は元々ノートオンに同期して動作しますから問題ありませんが、@X は、やはり残ったリリース中の音に影響します。
その他、連続してポルタメントを行った場合など、同様に、残ったリリース中の音に対し影響するため注意が必要です。
 @pl[n] ポリフォニックモードを有効にします。
#USING POLY が宣言されている場合に、このMMLコマンドを記述すると、
現在のトラックに対してポリフォニックモードが有効になります。

[n] には最大発音数を記述します。
ただし、#USING POLY 宣言の最大発音数でリミットされます。

[n] 省略時は #USING POLY 宣言の最大発音数が適用されます。

#USING POLY が宣言されていない場合、@pl は無視されます。
#USING POLY が宣言されていても、@pl がない場合は通常モードのままです。
#USING POLY [n] force が宣言されている場合は、全てのシーケンストラックに対してポリフォニックモードが有効になります。
 [ ](大カッコ) 和音記法。

#USING POLY が宣言されていて、
使用トラックで @pl が記述されている場合に、
音符を [ ] で括ると、複数音を同時に鳴らすことが出来ます。
Rコマンドによって、カッコ内での発音タイミングをずらすことも出来ます。

【機能制限】
・スラー使用不可。(使用した場合の動作は未定義)
・連符記述は使用しても意味を成さない。(分割された音符が同時に発声)
・パイプ処理非推奨。

【使用例】
    L4 ceg
            *ピアノロール*
            g                   --------
            f       
            e           --------
            d       
            c   --------

    L4 [ceg]
            *ピアノロール*
            g   --------
            f       
            e   --------
            d       
            c   --------

    L8 [c4.eg]d. 
            *ピアノロール*
            g   ----
            f       
            e   ----
            d               ------
            c   ------------

    L8 [c4.rerg]d.
            *ピアノロール*
            g           ----
            f       
            e       ----
            d               ------
            c   ------------

    L8 [c4.re4.rg]d.
            *ピアノロール*
            g           ----
            f       
            e       ------------
            d                   ------
            c   ------------

    L8 [c4.egrfare]d.
            *ピアノロール*
            a       ----
            g   ----
            f       ----
            e   ----    ----
            d               ------
            c   ------------

 

 

付加情報関連

 

コマンド 内容
【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能
 #TITLE [desc] 曲のタイトルを記述します。
 #ARTIST [desc] 歌手・作曲者・編曲者などを記述します。
 #COMMENT [desc] コメントを記述します。
 #CODING [desc] MML作成者の名前を記述します。
 #PRAGMA [desc] 外部ツールが使用するタグです。FlMMLでは当該行を無視します。

 

 

マクロ機能詳細

マクロ機能を簡単にいうと、自由に「あだ名」をつけるための機能です。
一回あだ名を付けてしまえば、後はあだ名を書くだけで意味が通じるので楽が出来ます。

トラック定義でMMLを書き始める前に、「$名前=内容;」という書き方をすると、マクロとして定義されます。
「$」で始めて「=」で間をつなぎ、「;」で締めることで定義されたマクロは、それ以降に記述されたトラック内にて
「$名前」で参照され「内容」に置き換えられます。
セミコロンによるマクロ定義終了までの間が複数行であっても良いので、長いフレーズでも定義可能です。
すでに定義されたマクロを、以降のマクロ定義で参照するような、入れ子的マクロ定義も可能です。

マクロの名前の付け方には次の制限があります。
・名前の1文字目はアルファベット又はアンダースコア( _ )。
・名前の2文字目以降はアルファベット又はアンダースコア( _ )、数字、4種の記号【 + # ( ) 】のいずれか。

例えば、

$C=ceg;
$C $C $C;

と書いた場合は、

ceg ceg ceg;

と同じことになります。
入れ子的にマクロを利用する場合は、

$Am   =/:4 a<ce>a :/;
$EonG#=/:4 g#b<e>b :/;
$SOLO =$Am $EonG#;
t150 l16 o5 $SOLO;

といった感じになります。

FlMMLのマクロは単純な文字列の置き換えなので、ちょっと変わった使い方もできます。

$C=cd;
$C2$C4$C8;

このように書いた場合は、

cd2cd4cd8;

と同じこととなり、レの音の長さだけを変えて記述しています。

さらに、引数つきマクロもサポートしています。
定義する場合の書式は

$マクロ名{引数1,引数2, ...}=マクロの内容;

のように、マクロ名につづけて中カッコを書き、その中に引数の名前を書くという形です。
引数につけられる名前の書式はマクロ名と同じです。
そして、マクロの内容定義で、引数を使いたいところでは、「%引数名」と書きます。
例えば、

$m{note} = @V100 %note16 @V64 %note16 R8;
$m{C} $m{D} $m{E} $m{F} $m{G};

このように同じマクロでも%noteの部分を変更しながら使うことができます。

引数は複数指定することもできます。複数指定時の例は、

$m{vol,note} = @V%vol %note;
$m{100, CDE};

のようになります。

【リンク】 はじめに音程音長音量制御音色発音数付加情報マクロ機能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment