2019年08月18日

グリッチの抑制とFTM/Detector周りの改装等

先日、テルミン奏者に楽器を試してもらったところ、左手が素早い動きを行った時にグリッチが発生する問題を指摘された。

グリッチは、左手の動作に追従できずに発生したEnvelopeデータの不連続面が原因と思われるが、これが特にピッチが低音の時に悪目立ちしてしまう。

WS001991.JPG

波形を拡大していくとよく判るのだが、サイン波の上に細かなパルスが乗っかっている。

WS001992.JPG

入力した信号は極低周波を再生した時のもので、人間の耳に聞こえているのはグリッチのみ。

WS001993.JPG

グリッチが発生する直接的な原因は、疎になり過ぎたデータによるものだが、アナログオシレーター側にも原因がありそうだ。

WS001994.JPG

プログラム側では対症療法を行うしか無さそうだが、実験の結果、フィルターの値を小さくすることで発生を抑えることが出来た。

ただし、グリッチの抑制と左手の反応速度はトレードオフの関係にあり、実験で最適値を探っていくしか無いのだが、これがなかなかに難しい。

Screen Shot 2019-08-18 at 6.24.55.png

試行錯誤の結果、それっぽく動作するノイズサプレッション機構をなんとか完成させることが出来た。 前述したように、グリッチの抑制と左手の反応速度はトレードオフの関係にあるが、グリッチの発生は特に極低音で目立つことから、出力音程に閾値を設定して閾値以下の周波数を検知した場合によりハードなサプレッションを行う仕掛けを思いついた。

閾値の設定は好みなので出来ればユーザーによって調整できれば良いのだが、パラメーターの配置が難しいのとインターフェイスの構造が煩雑になることから、今のところ機能の実装は行っていない

Screen Shot 2019-08-18 at 6.27.15.png

フィルターの初期設定は暫定だが、折衷案としてこれらの値に収まっている。

Screen Shot 2019-08-18 at 6.26.05.png

作業の過程で、FTM周りの設計を大幅に変更して無駄な条件分岐やオーディオクロックのアップエッジで計数を行うローカルカウンター等を一掃することになった。 オーディオクロックのタイミングに関係なくFTMのデータ取得確定フラッグの立ち上がりで即レジスタにデータを取り込む形に構造を単純化している。

冷静に考えるとフリーラン状態で計数を行うFTMがデータを取得するサイクル(入力によってトリガー発生の間隔が変動する)とWavetableを読みだすオーディオクロックのタイミングは周波数の桁が違ううえに、そもそも同期を行う意味がなかった。

グリッチ音の発生には良い面もあって弦にピックがあたるあの感じが図らずも再現されている。これは作ろうとして出来上がったものではないのだが「ギターっぽいテルミンが作りたかった人」にとっては行幸といえる産物だった。

ただしこれは低音でスローな演奏を行いたい人には邪魔になる音で実際に意識してみるとあまり気持ちの良いものではなかった。そこで折衷案として思いついたのが低い音を演奏した場合にエンヴェロープがスローギア化するこの機能なのだ。
posted by Yasuski at 21:55| LaVoixski