2020年01月25日

TransitionMode下で発生するエンヴェロープの遅延に対処する

5Voice/PresetTuneModeでTransitionModeの特定の波形プリセットを選択した場合に、オシレーター2のエンヴェロープが遅延する謎現象が再発している。 いまのところ解決策は発見できておらず、問題が発生する発音パターンのプリセットを回避する対症療法を行うしかなさそうだ。

Screen Shot 2020-01-25 at 7.36.04.png

トラブルの発生はMCUの処理能力をオーヴァーした結果なので、これからシステムのダイエットを行っていくことになるのだが、まずは正攻法としてトラブルが発生する発音パターンを把握して原因を解析した後に、発音数を減らす方向で調整を行ってみたが、効果は全く無かった。

システムダイエットの過程で、コンパイラ頼りで適当なデータ型に記述していた箇所、例えば16bitでデータをハンドリングしているところにFloatを突っ込んでいたりするのがマズそうなので、データをキャストして辻褄を合わせることにした。

まず、取り扱うデータ幅を拡張するために、受け側のデータ幅を32bitに設定し直す。 

Screen Shot 2020-01-25 at 7.34.51.png

Pitchデータは16bitでハンドリングしているので、Floatを乗算した後に

Screen Shot 2020-01-25 at 7.35.19.png

データ型のキャストを掛けている。

あと、ステップ数でディテクタの結果を補完するタイミングを切り替える機構を廃止して、

Screen Shot 2020-01-25 at 7.36.21.png

Screen Shot 2020-01-25 at 7.36.36.png

Screen Shot 2020-01-25 at 7.37.29.png

Screen Shot 2020-01-25 at 7.37.49.png

代わりに元データを16bit幅で丸めていた各Transitionの制御信号を32bit精度に変更し、結果をbitshiftする方式にVolumeコントローラーの構造を変更している。

Screen Shot 2020-01-25 at 7.37.01.png

改変のリザルトはマアマアで、グリッチは相変わらず発生するもののエンベロープの遅延を無くすことができた。

削除したステップ数による切り替え機構は有効なので、Teensy4ではこれを復活させることになるだろう。


posted by Yasuski at 22:28| LaVoixski