2019年03月15日

Gride機能にハーモナイズド・チョーキング風の機能を追加する / PitchBenderの製作

Gride機能にチョークアップする側のEnvelopeを追加した。



具体的な効果としてはハーモナイズド・チョーキングを模したものを目指している。

Screen Shot 2019-03-15 at 17.21.12.png

GrideのRate設定をゼロポイントを超えたマイナス側に回すと、int16_tのMSBからNegativeFlagを感知して、グライド・アップする方向に機能をスイッチする。 

Chronoは負の値を扱えないため、事前にMSBをマスクした数値をパラメーターとして使用するが、このままでは境界を超えた途端に最大値が入力されてしまう。 これを防止するために、マイナスのフラッグが立った場合には  を使って出力値を反転する機構への条件分岐を組み込んでいる。

実際に運用した場合にポットのゼロポイントの境目が判り難かったので、LEDの発色を変えて境界を示すようにインターフェイスを改良している。

追記:

EMAの処理時間を短縮する方法を見つけたので試してみたが、データが荒れて使い物にならなかった。
posted by Yasuski at 18:23| LaVoixski

EnvelopeGeneratorのようなものを実装した

Chronoを使ったトリガーを切欠にAttack=立ち上がりのエンヴェロープをオシレーターのピッチ制御に印加する機能、Envelope Generatorのようなものを実装した。

Lyle Maysな雰囲気を実現するまでの道程は遠いが、まずは第一歩から。

Oberheim名物なLyleMaysの"あの音"を思い出してから脳内再生が鳴り止まず夢にまで出てくる始末で、この日の午後はその実現に向けてひたすらに試行錯誤を繰り返していた。

基本的な構想は、データの極端な変化をサプレッションするEMAアルゴリズムの係数をChronoを使って段階的に変化させる方式で、Chronoによって発生させるトリガーの間隔が長くなると、EMA係数の変化量が抑制され、結果としてGrideTimeが伸びるという仕掛けだ。

最初のこれはおもいっきりコーディングを間違えているのだが、

WS001765.JPG

実装した結果「何となくそれっぽい動き」が観測されてしまい、これが迷路の入り口に入る切欠となる。

次に、実験を繰り返して到達したこの段階では、実用性は乏しいもののPitchをGrideさせる機能の実装がほぼ実現しつつあった。 ただし、変化量が大きすぎたり、Grideさせた結果が超低音になるなど、新たにピッチ制御のために用意した係数、add_vall2 に出力されるデータは正常なものとは程遠い状態だ。

Screen Shot 2019-03-13 at 15.47.24.png

そのうえ、Chronoの調整のためにノブを回していると、突然作動不能となるケースが頻発した。 

このケースには相当悩まされたが、SequencerにStart/Stop機能を実装したコードからそのままの仕組みを再利用して、「トリガーゲートがオフられた時にchrono.stopを使ってChronoの計数をストップさせていた」のが原因だった。 

chrono.stop を排除した結果、トリガーによってEGを発生させる機構の動作を安定させることが出来たが、この段階ではピッチが不思議な挙動を示す原因をまだ特定出来ていない。

その後の数時間に渡る試行錯誤の末に探し当てた、正常に動作するほぼ最終的な案以下に示す。 

機能をまとめてEGとしてサブルーチン化し、それをPitchディテクターのサブルーチン内からコールしている。

Screen Shot 2019-03-14 at 2.32.48.png

結局、発生させていた「Pitchの差分」そのものを add_val2 に代入するPitchデータ出力として取り扱っていたのが間違いで、元データ add_val に「差分を足す」のが正解だった。 これで、Pitchの扱いに関する問題はほぼ解決した。 制御波形の分解能は200だが、これは今後調整を行う必要があるかもしれない。

多分、これもまた「車輪の再発明」に過ぎないのだろう。 が、ひとまずはそれっぽい動作をする仕掛けが組み上がりつつある。

負荷が多いためか出音が微妙に荒れ出したのが危険な徴候だが、出来ればこの機能を外したくはないものだ。

ついでに、操作性を向上させるためにパラメーターの配置を一部変更している。
posted by Yasuski at 11:14| LaVoixski