NSDL(NES Sound Driver Library)

MML reference: Envelope

定義(Define)

        E@voice_envelope
        Evvolume_envelope
        Emfrequency_envelope
        Ennote_envelope

引数(Inputs)

voice_envelope

音色エンベロープのパターン番号を指定して下さい。
音色エンベロープを無効にする場合は、`@'コマンドを使ってください。

volume_envelope

音量エンベロープのパターン番号を指定して下さい。
数値の替わりに *を記述する事で、エンベロープを無効にできます。

frequency_envelope

ピッチ・エンベロープのパターン番号を指定して下さい。
数値の替わりに *を記述する事で、エンベロープを無効にできます。

note_envelope

ノート・エンベロープのパターン番号を指定して下さい。
数値の替わりに *を記述する事で、エンベロープを無効にできます。

内容(Contents)

Envelop()記述ブロックにて定義したエンベロープパターンを指定します。

注意(Notes)

エンベロープ定義において、リリース後のパターンを指定しない場合、キーオフ後もそのエンベロープが継続されます。
これは、音量エンベロープでも同じです。
音量エンベロープでリリースのパターンを指定せずに音量でキーオフを行いたい場合は、 Rmコマンドでゲートタイム時の処理を指定し、 それと同時に、r(休符)コマンドでは臨時記号`-'か`+'を付けてください。

ファミコンの内蔵音源で音程を変化させる場合、レジスターのMSBが更新されると位相がリセットされプチノイズが発生します。
レジスターのMSBの更新が近い音程としては以下です。
エンベロープの数値とディチューンの数値の総和を以下表の許容幅の範囲内に留めると、音程レジスタMSB更新によるプチノイズを回避できます。
(ただし、数値の絶対値が16を越える場合は、音程レジスタMSBが更新される場合があります。)

音程許容幅
o1b1 〜
o2d 〜 -2
o2f 〜 0
o2a 〜 -2
o3d 〜 -2
o3a 〜 -2
o4a 〜 -4

例(Sample)

// frequency envelop "Volume table"
Envelop(0){ 15 D10 14 13 12  L 11 11 10 10 9 9 10 10 R 9 8 7 6 5 L 4 4 3 3 2 2 3 3 }

// frequency envelop "LFO"
Envelop(100){ L 0 1 2 3 3 2 1 0  -1 -2 -3 -3 -2 -1 }

// for Voice Envelop
Envelop(200){ L 2 1 R L 2 }

// for Mote Envelop "Major code"
Envelop(1000){ L 0 4 7 }

BGM(0){
    l1 o4 v15 u2.	Ev0	Em100 En1000 E@200	cdefgab> En*	Em*	Ev*	c1,2
}