今日は、ChromaticMode と Looper を併用した場合に、処理能力の限界から出力にノイズが混入する事案に対する手当を行っていた。
例の如く、コードを精査する過程で別のバグ( combFilter 周辺の信号ラインの混乱)を発見したので、まずはこれに対処することになった。

これは、バグというよりも構造(関数のネーミング)の問題で、ノイズに対処する過程で行っていた試行錯誤の後遺症と思われる。 最初はネーミングの混乱に端を発していたのが、何時の間にかそれが忘れ去られて、砂上の楼閣を組んでいった結果の大混乱で、前提を間違えた上で現物合わせを繰り返したことが、更なる混乱を招いていたという間抜けなケースであった。
このような凡ミスへの対処は愚直に行うのが正解で、信号ラインを素直な形に組み直し接続を整理して、取敢えずこの問題は解決できた。


さて、Looper 由来と思われるノイズの発生は以前から認識されていた現象で、combFilter の配線が混乱した件は「Looper のノイズ対策への一環」としての試行錯誤の産物なのだった。 現物合わせで対策を行う時に発生する問題は、経験上記述ミスや配置のミスが多く、今回行った改修ではミスを事前に防ぐ目論見として「処理過程のサブルーチン化」を進めていった。

これは、Deepseek 的価値観からすると「唾棄すべき外法」と思われるが、プログラムの構造を視覚的に把握出来るこの方法は侮り難く、特に配置換えパズルを行う際に混乱が生じない点が大きな長所である。



各処理過程をサブルーチン化する過程で、可能な限り「処理の単純化」を行っているが、Looper の重い処理の対価としては焼け石に水で、例えば描画を停止する手法は思った程に効果はなかった。

効果があったのは処理ルーチンの洗い直しで、処理を行う時系列を整理した結果、Looper の配置はL/Rの処理を切換えるオーディオクロックのアップ/ダウン・エッジの近辺、「2番目のタスク」に行うのが正解だったようだ。


改修後にノイズの発生は極力抑えられ、ChromaticMode を稼働させながら Looper の録音/再生を行うことが出来るようになった。
流石に 5voiceMode で複雑なヴォイシングの切り替えを行うタスクと ChromaticMode の並立は無理だったようだが、以前は 5voiceMode 単体の使用で発生していたノイズが抑えられているので、ここら辺りを取敢えずの妥協点とする。
ちなみに、MCU のクロックアップが簡単&最良の選択肢であったが、

MCU の個体差によって LCD の描画が行えなくなってしまうようで、この対処法には「MCU の選別」といった別のハードルの存在が明らかになった。 クロックアップには諸々の弊害が発現してしまう傾向があるので、これは最後の手段と認識すべきだろう。
追記:
ディレイラインの構成が変った影響で、レベルの設定やモジュレータの配置が怪しくなっていた箇所の修正を行った。

Looperの稼働状態。
MCUの処理能力を保全するために、録音が開始されると同時に描画を停止している。
メモリの管理状態が怪しかったときは再生時に稼働するはずのサンプルのフェードが上手く行っていなかったが、メモリの残量に余裕が出来てからは正常に動作しているようだ。
追記2:
Looper の起動に反応して波形表示がいきなり停止する仕様に戸惑うことが多かった(入力のレベル管理が出来なくなる)ので、表示する内容をダウングレードしてMCUの負荷を軽くする仕様に設計を変更した。

モジュレータの「効き」は入力信号のレベルに左右されるが、これは歪の発生と表裏一体で、演奏中に微妙なレベルの推移を監視する必要がある。 Looperを起動した場合には、さらにLooperと演奏のレベルのバランスに注視しなければならず、波形の表示は可能な限り行うべきだろう。
追記3:
ノイズサプレッションの目的で DAC の Mute 端子と楽器側の VoiceMode 切り換えスイッチを連携していたのだが、どうやらこれが逆効果だったようなので、関係を解消した。

それと、Looper の停止スイッチに、ソフトミュート機能を追加している。

こちらの効果も「それなりな感」が強いので、LFO の導入に準ずる形になるが本格的な EG を組み込むべきかもしれない。
追記4:
RAM1の free for local variables に余裕があると、不調だったLooper に仕込んだ自動 Fade In/Out 機能は、、、

設計通りに働いているようだ、、、。

x1/2 再生の場合はフェードを掛けておらず、録音された状態がそのまま再生される。

Loop 再生の記録。 何れの再生モードでも継ぎ目のノイズは認められない。
Loop の先頭は、録音の立ち上がり時にフェードを掛けている。

録音の終了を予測して、ソフトミュートを行っている(つもり)。
posted by Yasuski at 01:19|
LaVoixski