Skip to content

Instantly share code, notes, and snippets.

@knight-ryu12
Last active June 16, 2022 05:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knight-ryu12/fc322dcbd8996ee9f9d120f700c6de1c to your computer and use it in GitHub Desktop.
Save knight-ryu12/fc322dcbd8996ee9f9d120f700c6de1c to your computer and use it in GitHub Desktop.

SonaMML Japanese Document

NAME

SonaMMLはmml2sona用のMML記法です。 このドキュメントはmml2sonaV 0.50用です。 このドキュメントはMMLの標準的な記法は書かれていません

SonaMML

MMLチャンネル割り当て

チャンネルは以下の通りに割り当てられています。

チャンネル番号 説明
A-F FM チャンネル 1~6
G-I PSG チャンネル 1~3
J PSG ノイズ
K-L PCM チャンネル 1~2
Z コントロール用

チャンネルZは普通のチャンネルには割り当てられていませんが、全体的に作用するようなコマンド (例えばテンポとかループとか)をほかのチャンネルに作用することなく入れることができます。

MMLコマンド

スペースはオプションで入れることができます。(曖昧にならなかったら)

コマンド 説明
@$ [SFXのみ] チャンネルをロックする。サウンドエフェクト用にチャンネルをロックすることができる。
@ <音色番号> 音色番号をセットする。
l <長さ> 音符のデフォルトの長さをセットする。 (後述)
<音符> または <音符> <長さ> 音符を配置する。 +で半音上げ、-で半音下げできる。 +と-は二重に書ける。 PSGはnコマンドを使用するべき。
n <値> または n <値>,<長さ> 音程をを直接指定する。
FMチャンネルは<0-95>、PSGチャンネルは<24-95>までの値を指定できる。 PSGチャンネル4で使用した時は、値はノイズモード。PCMチャンネルで使用した場合は音色番号。
r または r <長さ> 休符を入れる。長さはオプション。
s または s <長さ> キーオンキーオフせずに待ち時間を入れる。 長さはオプション。
o <オクターブ> オクターブを指定する。 FMチャンネルは<0-7>、PSGは<1-6>。
< オクターブを1つ下げる
> オクターブを1つ上げる
k <セミトーン> トランスポーズを<セミトーン>分だけする。 このコマンドは絶対値を取る。 <セミトーン>はマイナス値も取る。 k0でリセット。
K <セミトーン> トランスポーズを<セミトーン>分だけする。 このコマンドは相対値を取る。 <セミトーン>はマイナス値も取る。
v <ボリューム> 音量をセットする。 範囲は<0-15>、0がミュート、15が最大音量。
( または ( <値> 音量を1上げる。<値>でいくつ上げるかをセットできる。
) または ) <値> 音量を1下げる。<値>でいくつ下げるかをセットできる。
- 次の音符はキーオンをしないようにする。
& 次の音符は待ち時間にする。 (sコマンドで同様の動作が可能)
p <設定> パンを指定する。(後述)
L ループポイントをセットする。
[ ループポイントをセットする。 (回数指定)
] <カウント> ループを<カウント>分する。
t <テンポ> [BGMのみ] テンポを指定する。デフォルトは120(60Hz)。(l1は128ティック)
y <レジスタ>, <値> YM2612レジスタ直接書き込み。バンク1は<0-255>、バンク2は<256-511>でアクセスできる。
yFB <値> チャンネルのFBレジスタに<値>を書き込む。
yDM <オペレーター> , <値> <オペレーター>のDMレジスタに<値>を書き込む。
yTL <オペレーター> , <値> <オペレーター>のTLレジスタに<値>を書き込む。
yKA <オペレーター> , <値> <オペレーター>のKAレジスタに<値>を書き込む。
yDA <オペレーター> , <値> <オペレーター>のDAレジスタに<値>を書き込む。
ySR <オペレーター> , <値> <オペレーター>のSRレジスタに<値>を書き込む。
ySL <オペレーター> , <値> <オペレーター>のSLレジスタに<値>を書き込む。
ySE <オペレーター> , <値> <オペレーター>のSEレジスタに<値>を書き込む。
@# <バイト1> , <バイト2> , <バイト3> ... ストリームに直にバイト羅列を書く。 SonaMML未実装コマンドを使うのに便利。
@ { <書き込み先> = <読み込み元> } VM
@ { <書き込み先> += <読み込み元> } VM
@ { <書き込み先> -= <読み込み元> } VM
@ { <書き込み先> &= <読み込み元> } VM
@ { <書き込み先> |= <読み込み元> } VM
@ { <書き込み先> ^= <読み込み元> } VM
| バーセパレーター。何もしない。
!<A-Z> または !<a-z> または !<0-255> マクロコマンド

### 長さコマンドについて 長さは 1,2,4,8,16,32,64,128を取る。(実際には1/<長さ>の値がセットされる)

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