主にMSX関係のコンテンツが置いてあります。

フェードアウト

フェードアウトの主な処理は、各チャンネル処理の前に実行されます。

E280H)b0[フェードアウトフラグ]が1の場合、(E296H)[フェードアウトインクリメントカウンタ]を+1します。

[フェードアウトインクリメントカウンタ]と(E294H)[フェードアウト速度値]が違うならチャンネル処理へ戻ります。

同じ場合、[フェードアウトインクリメントカウンタ]は0に戻され、(E297H)[フェードアウト減算値]が+1されます。

[フェードアウト減算値]と(E295H)[フェードアウト終了値]が違うならチャンネル処理へ戻り、同じならフェードアウト終了です。

フェードアウト終了処理は(E280H)b0[フェードアウトフラグ][フェードアウトインクリメントカウンタ][フェードアウト減算値]を0にし、PSG Ch.BとPSG Ch.Cが同じ曲を演奏しているかを調べます。

同じ曲を演奏している場合、SEのない8ch使った曲演奏のみの状態なので、全てのチャンネルの演奏終了サブルーチンを呼び出し、SEがある場合は、SE用のPSG Ch.CとSCC Ch.Aを除いたチャンネルの演奏終了サブルーチンが呼び出されます。

演奏終了サブルーチンは、曲番号、優先値、区間ループカウンタ、分周比データ、音量データ、及びフラグの(+0DH),(+0EH),(+0FH)が0になります。

PSGの場合は更に、(E29CH)[PSGフラグ]の関係するチャンネルのフラグ箇所を初期化します。

適用

チャンネル処理の前に上記内容で、フェードアウトのカウント処理が行われ、実際に適用されるのは音を出すタイミングになります。

SEでなく曲を演奏しているチャンネルで、フェードアウト中なら[マスターボリューム]から(E297H)[フェードアウト減算値]が引かれて、それを[チャンネルボリューム]とします。

そういう仕様なので滑らかに音量が下がっていく訳ではなく、1音単位で音量が下がります。

またフェードアウトの効果は、[チャンネルボリューム]のみに作用し、エンベロープの下限などのパラメータには作用しません。

その結果、以下のサンプルのように少し独特のフェードアウトとなります。

設定方法

フラグとワークエリアに必要なデータを書くとフェードアウトが始まりますが、ゲーム中は曲番号を使って設定しています。

曲番号84H番をセットすると、速度25H,終了値0AHのフェードアウトが開始されます。