Craptuneの書式
※書きかけです!
全体的な書式
@ヘッダ @ヘッダ @ヘッダ #コメント テキスト テキスト テキスト .トラック名 テキスト テキスト テキスト テキスト .ソング名=ソング定義 .ソング名=ソング定義
空行とコメントは解析時には全て無視されます
実はヘッダとテキストだけで動きます(その場合、全体がデフォルトトラック扱いになります)
更に、本当に試すだけならテキストだけでも大丈夫です
ヘッダ
ヘッダに指定できる要素についてはおのおののページを参照して下さい
そのうち拡張可能にする予定
- Waveform?
-
楽音、つまり音量やピッチが変わる波形
必要に応じて必要な長さの一周期分の波形が生成され、繰り返しコピペされます@w1=waveform:param1:param2
- Samplet?
-
打楽器など、音量変化とかを行わない波形
これも一回生成されたら毎回同じ物がコピペされます@s1=samplet,param1,param2
- Effector?
-
Waveformにエンベロープかけたりビブラート付けたりする機能
複数のエンベロープを並列してかけることができます@e1=effector,param1,param2 @e2=waveformref;effector,param1,param2;effectorref
絶賛開発中なので一部の機能は動いたり動かなかったり無かったりします
テキスト
書式
書式はmckっぽい
A abcdefg
Aはチャンネル文字(半角スペース以外の任意の文字が指定可能)
abcdefgがテキスト
ノート長指定に使える文字の一覧
0123456789 ノート長を指定 . 付点 ^ タイ ノート長は省略可能。省略時はデフォルトのノート長が適用されます。
テキストに書ける文字の一覧
abcdefg(+-)(ノート長) ノート再生(+-はピッチ変更、省略可能)
r(ノート長) 休符
< オクターブ下がる
> オクターブ上がる
o(数値) オクターブ直接設定
l(ノート長) デフォルトの音長設定
t(数値) テンポ設定
@@(数値) ベースエフェクタ変更
@i(数値) ベースエフェクタ変更
@w(数値) ベースエフェクタをただの波形に変更
~(数値) ベースエフェクタをただの波形に変更
@(数値) エフェクタスタックにプッシュ
`(数値) エフェクタスタックからポップ
v(数値) 音量指定
[cdefg](数値=2) 繰り返し(最後の数値を省略時には2回繰り返し、入れ子できます)
[cde | fg](数値=2) 最後の繰り返しだけ途中まで再生して終了
{cdefg}(ノート長) 連符(指定したノート長に等間隔で全てのノートを納める、入れ子できません)
ベースエフェクタとエフェクタスタック
エフェクタリストというものがあって、EffectorかWaveformを入れる事ができます
| ベースエフェクタ | エフェクタスタック | エフェクタスタック | ... |
MMLからベースエフェクタのみの入れ替えと、エフェクタスタックの操作(末尾への追加と、末尾の要素の削除)が行えます
ちなみに、エフェクタリストの初期状態はこんな感じ
| デフォルトWaveform | (スタックは空) |
ドラム用のトラックでは@@コマンドで最初から入ってるWaveformを置き換えてやる必要があると思います
ベースエフェクタ
ベースエフェクタは曲中で頻繁に変更しないような楽器の変更に使います
@w か ~ ベースエフェクタをWaveform番号で指定できます。何の変化もしない音を出すトラックのに使います @@ か @i ベースエフェクタをEffector番号で指定できます。共通のエフェクトをかけたいトラックやドラムトラックなどに使います
EffectorやWaveformは前もってヘッダで定義しておく必要があります
エフェクタスタック
エフェクタスタックにはビブラートとかトレモロとかアルペジオとかなどの、一時的に適用したいエフェクトに使います
@ エフェクトを使い始める時に書きます ` エフェクトを使い終わる時に書きます
Effectorは前もってヘッダで定義しておく必要があります
トラックとソング
ピリオドで始まる行はトラック定義とソング定義です
つまり1つのMMLに複数曲を格納できるということです
※ヘッダは共有です
トラック
テキストの最小単位です
MML上で最初に現れるトラックのトラック名は0で、このトラックはデフォルトで再生されます(他にトラック名0のトラックがあれば、上書きされます)
ソング
再生時のトラック名としてソング名を指定すると、複数トラックを連続再生できます
ループもできます!
書式
トラック名やソング名には制御用に使われてるものを除くほとんどの文字が入ります
つまりイコールとカンマとセミコロンはダメっぽいです
.(トラック名) この行の次の行からはトラック名(トラック名)のトラックになります .intro1 テキスト .intro2 テキスト .loop1 テキスト .loop2 テキスト .loop3 テキスト .(ソング名)=intro1,intro2;loop1,loop2,loop3 これがソング定義です、最後まで再生したらセミコロンの所まで戻ります
この場合はintro1,intro2,loop1,loop2,loop3,loop1,loop2,loop3,...の順で再生されます
※セミコロンを省略したり、ループ部分に何も書かないとループせずに終了します
注意点
内部的には8bit/44100Hzモノラル固定です。そのため、音量を大きくしすぎると音割れが発生します!
目安としては、(vによる音量指定)×(@@や@によってかかっているエフェクタの音量倍率)×(同時発音数)±(丸めの誤差)が 127を超えてしまうと、8bitの限界を超えた音が発生してしまいます。特にライブラリ側で制限などはかけていませんので、音量指定は適切に行って下さい。

