argentum384 / flmml-on-html5

Porting of FlMML to HTML5
BSD 3-Clause "New" or "Revised" License
29 stars 8 forks source link

モジュールFM切り替え直後の440Hzのノートが極めて低くなる事象の対応 #54

Closed argentum384 closed 1 year ago

argentum384 commented 1 year ago

の修正

原因

全音色共通でオシレータ周波数の初期値に https://github.com/argentum384/flmml-on-html5/blob/9c9f568592bca1f9a5002ec87130e4dfcb4d8122/src/flmml/MOscMod.ts#L16 の通り440Hzが与えられているが、モジュールFMのみ周波数指定時 https://github.com/argentum384/flmml-on-html5/blob/9c9f568592bca1f9a5002ec87130e4dfcb4d8122/src/flmml/MOscOPM.ts#L304-L307 の通り周波数に変更がなければ fmgen のレジスタ書き込み処理を行わないようになっていたため。

対処

FMモジュールのオシレータのみ初期化後に周波数を0Hzで上書きし、最初のノートの周波数にかかわらず fmgen のレジスタ書き込みが行われるように修正

※早期 return をなくすのは同音連打時などにも不必要な書き込みが発生し挙動が変わってしまうので不採用