MMLファイル構成仕様
1曲分のシーケンスデータを記述する.mmlファイルの全体構造と、各セクション
のパラメータ仕様です。演奏コマンド自体(音符・休符・ノート記法等)は
MMLコマンド仕様を参照してください。
ファイル全体の構造
- 独自形式のテキストファイル。拡張子は
.mml。 - コメント行は
#で始まる行(先頭の空白は無視)。空行・空白のみの行も無視されます。 - 先頭行に必ずヘッダ文字列を記載します:
[GoFMML File] - その後に
[global]・[conductor]・[partSetting]・[pcmPartSetting]・各パート本体([part1]〜[part16]、[pcmPartA]〜[pcmPartP])のセクションを並べます。 fileio.LoadMMLFile/LoadMMLFileFS/SetMMLTextDataのいずれかで読み込みます。
[global] — 曲全体の初期設定
YAML形式で記載します。
[global]
tempo: 120
sequenceID: SampleMML
loop: false
volume: 100
startOffset: 1
reverb: false
reverbType: normal
reverbTime: 1.5
reverbLevel: 50
| キー | 範囲・書式 | 説明 |
|---|---|---|
tempo | 数値(BPM) | 曲のテンポ。[conductor]側にテンポ
指定があればそちらが優先されます。 |
sequenceID | 文字列 | このシーケンスを一意に識別するID。
player.Play等に渡すキーになります。 |
loop | true / false | 曲末尾に達した際に先頭(または
startOffset位置/ジャンプポイント)へ戻ってループ再生するか。各パートのうち最も長い
部分が曲の末尾として扱われます。 |
volume | 0〜127 | エンジン全体のマスターボリューム。省略時はフル 音量。 |
startOffset | 全音符個数(整数) | 再生開始オフセット。例えば
1なら各パートの全音符1個分の時間をスキップしてから再生開始します(ノート以外のコマンド
はスキップ区間内でも内部的に処理されます)。未設定・無効値は無視されます。loop:trueで
ジャンプポイント未設定の場合、ループ時の巻き戻し先もこのオフセット位置になります。 |
reverb | true / false | マスターリバーブを使用するか。falseまたは 未記載ならバイパス。 |
reverbType | simple / normal |
simple=Schroeder型(軽量)、normal=FDN型(高品質・やや高負荷)。 |
reverbTime | 0.5〜3.0秒(小数第一位まで) | リバーブの残響時間。 0.5以下はバイパス、3.0を超える値は3.0に丸められます。 |
reverbLevel | 0〜127 | ドライ音に対するリバーブ音量。0ならドライ のみ。 |
各パートで
reverbSendを設定していても、[global]の
reverbがfalseの場合はリバーブはかかりません。[conductor] — コンダクターパート(任意)
ループ時のジャンプ地点や、曲中のテンポ変化を設定する特別なパートです。1曲に1つだけ設置可能で、 記載自体が無くても構いません。
[conductor]
[conductorPart]
R1 R1 J
T120 R4 T115 R4 T110 R4
T80
[conductorPartEnd]
| コマンド | 説明 |
|---|---|
T数値 | テンポを指定値へ変更(小数点は無視)。パートの先頭に記載されて
いれば[global]のtempoより優先されます。曲の途中に記載すれば、他の全パート
を含め曲全体のテンポをその時点から逐次変更します。 |
R+数字 | 休符(コンダクターパートの時間経過用)。2=2分音符、
.で付点、3連符は6/12/24で指定。 |
J | ジャンプポイント。[global]のloop:true時、
曲末尾に達すると先頭(またはstartOffset位置)からではなく、このジャンプポイントの位置
からループします(イントロ1回+ループ部分、という構成に使えます)。1曲に1個のみ有効(複数記載時は
2個目以降を無視)。 |
[partSetting] — FM音色パート初期設定
YAML形式。最大16パート(partNo: 1〜16)。
[partSetting]
part:
- partNo: 1
voiceID: 0
volume: 100
pan: 0
reverbSend: 30
transpose: -12
mute: false
solo: false
| キー | 範囲・書式 | 説明 |
|---|---|---|
partNo | 1〜16 | パート番号。[partN]本体セクションと
対応します。 |
voiceID | 整数 | 使用するFM音色のID。メモリ上に存在しないIDの場合 はデフォルト音色で代替されます。 |
volume | 0〜127 | パート音量。 |
pan | -16(左)〜16(右) | パン定位。0が中央。 |
reverbSend | 0〜127 | マスターリバーブへのセンドレベル。127で 100%wet。 |
transpose | -36〜36(半音単位) | パート全体の移調。1で半音、12で 1オクターブ。未設定・範囲外は無視されます。 |
mute | true / false | trueでこのパートを無音化します。未設定・ 無効値はfalse扱い。 |
solo | true / false | trueにすると、このパート(およびsolo:true の他パート)のみが再生され、他の全パートは自動的にミュートされます(主にデバッグ用途)。 |
[pcmPartSetting] — PCM音色パート初期設定
YAML形式。FMパートとの区別のため、パート番号はA〜P(最大16パート)を使用します。
[pcmPartSetting]
pcmPart:
- partNo: A
voiceID: 0
partType: oneShot
volume: 60
pan: 0
transpose: 2
mute: false
solo: false
reverbSend: "C1: 5, E1: 30, F#1: 15"
- partNo: B
voiceID: 1
partType: long
volume: 100
pan: 5
reverbSend: 40
| キー | 範囲・書式 | 説明 |
|---|---|---|
partNo | A〜P | パート番号。[pcmPartX]本体セクション
と対応します。 |
voiceID | 整数 | 使用するPCM音色のID。 |
partType | oneShot / long | そのPCM音色
のvoiceTypeと一致させる必要があります(oneShot指定パートにはoneShot音色のみ設定可)。 |
volume | 0〜127 | パート音量。 |
pan | -16〜16 | パン定位。partTypeがoneShotの場合はこの設定は 無視され、音色側(voiceSetting)のpanが優先されます。longでは通常通り使用されます。 |
transpose | -36〜36 | FM音色パートと同様。longのみ意味を持ちます。 |
mute | true / false | FM音色パートと同様。 |
solo | true / false | FM音色パートと同様。 |
reverbSend | partType依存(下記) | マスターリバーブへのセンド レベル。 |
reverbSendの書式がpartTypeで異なります:
partType: long の場合は、FM音色パートと同じ単一の数値(0〜127)を指定します。partType: oneShot の場合は、WAV割り当てノートごとに個別のセンドレベルを設定するため、
"ノート名: レベル, ノート名: レベル, ..."という文字列(ダブルクォーテーションで囲む)
で記載します。記載のないノートはリバーブがかかりません(センド0扱い)。
各パート本体:[partN] / [pcmPartX]
| セクション | 開始タグ | 終了タグ | 対象 |
|---|---|---|---|
| FM音色パート | [part1] 〜 [part16] |
[part1End] 〜 [part16End] | FMシンセシスコアで発音 |
| PCM音色パート | [pcmPartA] 〜 [pcmPartP] |
[pcmPartAEnd] 〜 [pcmPartPEnd] | WAVサンプルで発音 (voiceTypeにより oneShot / long でコマンド体系が異なる) |
開始タグと終了タグに囲まれた部分に演奏コマンド(MML文字列)を自由に改行・空白を入れて記載できます (読み込み時に空白・タブ・改行は除去され1本のコマンド列として連結解析されます)。具体的なコマンド 仕様はMMLコマンド仕様を参照してください。
[part1]
O3 C4D4E4F#4
G8A8B8
O4 C16C#16D16e16 F2R4G8
[part1End]