[1chipMSX]
拡張WAVE音源の不都合修正3
※情報の正確さは保証できません。
SCCの出力波形は、scc_wave.vhd で計算されますが、演算結果は 15bit (SccMix) あります。
しかし、これを emsx_top.vhd にある全音源のミキサーへ 8bit で接続しています。
つまり、下位 7bit の情報を捨ててしまっています。
全音源のミキサーは、SCC音源の音量(SccVol, キーボード操作で変更できる音量値) を掛けているため、
SCC出力波形のゲインが増加します。増加した分、桁上げになるわけですが、そこには 0 が詰まります。
たとえば、音量が 5 だとすると、2.322 bit 程度桁上げになります。
本来、情報としては、小数点以下に 7bit の有効情報があったわけですが、scc_wave を出たところで捨てられている
ために、レベル方向の分解能が粗くなってしまいます。
実際に、1chipMSX で出力した SCC波形を拡大してみると、階段状に量子化ノイズのような現象を確認できると思います。
問題は、必要な情報を捨ててからそれを使おうとしている点にあるので、必要な情報をしっかり使ってから、不要部分だけ
捨てるように書き換えてやれば解決します。
数式的なイメージでは、
出力 = int( SccMix >> 7 ) * SccVol
これを、下記のように修正します。
出力 = int( SccMix * SccVol) >> 7
※修正したソースは、上にある最新ダウンロードに含まれています。
[▲上へ]