MML reference: Echo

定義(Define)

        ECdelay,volume(,length)
        EC*

引数(Inputs)

引数の替わりに`*'を指定することで、疑似エコーを無効化できます。(Default: Disable)

delay

何音前のノートを、エコーとして発音するかを指定します。
0(直前のノート)〜255(255個前のノート)で指定してください。

volume

疑似エコーで鳴らす音符の音量、もしくはモードを指定します。
-1 … 直前のノートのエンベロープをそのまま引き継ぎます(スラーで繋げます)。
0 〜 15 … 指定の音量で発音(Key on)し直します。

length

疑似エコーで鳴らす音符の音長、もしくはモードを指定します。
-1 … 休符が疑似エコーに置き換わります(パラメータ省略時のデフォルトです)。
1 〜 … 前の音符の音長を指定分だけ減らし、指定の音長の疑似エコーに置き換えます。r ,w コマンドは休符になります。

内容(Contents)

疑似エコーです。
休符(rコマンド)が記述された箇所を、疑似エコーに置き換えます。
r-コマンド及びr+コマンドが記述された場合は、指定通りの休符となります。
MMLコンパイラの疑似命令であり、シーケンス上は、
・音符コマンド
・音量コマンド
・相対オクターブコマンド
により、疑似エコーのシーケンスを作成します。

注意(Notes)

※疑似エコーは、MMLコンパイラ側実装のコマンドです

ドライバ側実装のコマンドと組み合わせた際に、意図通りの動作にならない可能性がございます。

例えば、リピートコマンドはドライバ側の実装となります。
従い、"v12 g4 EC1,3 [2 cr dr : er ] gr "といったMMLは、"v12 g4 [2 v12 c v3 g v12 d v3 c : v12 e v3 d ] v12 g v3 e"と同等のデータに変換される旨、留意してください。
対応策としては、リピートの開始位置、終了位置、分岐位置をうまく調整する、 もしくは、リピート開始時及び終了時に、EC-コマンドにて疑似エコーのバッファをリセットしてください。

また、リピートコマンド内において、リピート毎に以下のような変化がある場合、正常に疑似エコーのシーケンスを作成できない旨、留意してください。

  1. 相対音量コマンドにより、音量変化がある場合
  2. 相対移調コマンドにより、移調度の変化がある場合
  3. 相対オクターブにより、オクターブの変化がある場合

※タイ(^)使用時における注意

第3パラメータlengthの指定時、休符には疑似エコーを生成しませんが、 タイ^についても疑似エコーは生成しません(タイはスラー及び休符コマンドにコンパイルするため)。
例えば、#TieModeが0の条件下において、"EC- EC1,3,%3 v12 l16 c^^^ d^^^ e^^^"といったMMLは、タイの前の音符に対して疑似エコーを生成してしまうため、
"v12 l16 c^^^ d16-%3 v3 c%3 ^^^ v12 e16-%3 v3 d%3 ^^^"と同等のデータに変換される旨、留意してください。
音長を加算したい場合は、+演算子により音長を加算してください。
なお、#TieModeを1にすることで、^はタイではなく、音長加算の演算子として動作します。
この場合、上述のMMLは"v12 l16 c4 d4-%3 v3 c%3 v12 e4-%3 v3 d%3"と同等のデータに変換されます。

※サブルーチン使用時における注意

サブルーチン内で使う場合は、音量を指定し直して下さい(MMLコンパイラに現在の音量を通知するため)。

例(Sample)

	v15	EC1,2	//疑似エコー有り
	l16	crdrerfrgrarbr>	crdrerfrgrarbr `cr brargr frerdrcr < brargrfr erdrcr "br c1	
		EC*	//疑似エコー無効