2019年06月10日

チューニング・モードを新設する

オシレーターのチューニングを行う過程で、「キャリブレーション」という言葉がどうにもミスマッチで、誤解が生じる原因となっているようだ。 

この機会に、楽器を新規に導入する際の最初のハードルとなり得るこのモードの在り方を今一度考え直すことにした。

現状はスイッチを長押しする毎に

1:Pitchオシレーターの素の音
2:Volumeオシレーターの素の音
3:Aにあたるピッチの確認

と、モードが変遷する。

次のスイッチ短押しで

4:通常モード

に復帰する。

実装された機能を正確に表現すると、Pitch/Volume双方の素の音を拾うモードは、行為の実態を表して ”Monitoring the real Frequency” 等といった文言に改定すべきだろう。

一方、3番めに設定されているAピッチをモニターするモードだが、現状はあくまでも確認を行うだけのモードで、パラメーターを設定することが出来ない。 

そこで、ここに、Sequencerのルート音が設定出来る機構を組み込むことにしたのだが、既存のパラメーターは44.1kHzのサンプリングレートに対応させた数値に固定されているので、サンプリングレートを切り替えた場合に、当然ながらピッチが変化してしまう。 楽器をスタンドアロンで使用する場合にはある程度の誤魔化しが効きそうだが、他の楽器と絡むことを考えるとチューニングの機能は必須となってくる。 

以上の考察から、「キャリブレーション・モード」という呼称を「チューニング・モード」に改称することにした。

今回の改修では、先に解説した目玉スイッチの長押しで起動するサブルーチン3番めの長押しで選択されるモードに、Sequencerのルート音のチューニング機構を追加している。 

WS001866.JPG

対応するノブは上側の緑で、C1(仮称)の値を調整する。 

要は”ド”に合わせれば良いのだが、わざわざ業界標準な”A”にしなかった理由は、SequencerのC#SVのC0から始まるピッチ配分の仕様を優先した結果による。
posted by Yasuski at 21:01| LaVoixski

Envelopeの選択メソッド

ChoppingArpeggiatorの分岐処理を、総当りを強いられるif構文から、対象を選別後にバッサリとbrakeするswitch構文に切替えて処理時間の短縮を図ってみたが、効果はイマイチだった模様。

WS001862.JPG

条件分岐にOR(||)を使うと、処理に時間を取られることが実証されているが、これをswitchに書き換えると、記述が冗長になる一方、総当りで参照しない分だけ処理の行程が単純化される。

オプティマイズをFastestに変更した場合、コンパイル時間が1/4以下になったが、動作の違いは全く感じなかった。

WS001863.JPG

期待していた割にリザルトはイマイチどころか、96kHzのオーディオクロックを選択した場合には、ChoppingArpeggiatorが動作不能に陥っている。

Fastest + LTO + PureCodeに設定を変えて比較実験を行ったが、結果はFastest + LTOの勝ち。 Fastest + LTO + Purecord はメモリーの使用量が増えるうえに、劇的に処理が遅くなって96kHzでの運用が全く行えず、この選択肢は論外だった。

void の前に FASTRUN を記述すると若干のスピードアップが望めるということだったが、大容量のキャッシュを持つTeensy3.6ではほぼ効果は無かった模様。

結局、オプティマイゼーションのリザルトは Fastest + LTO が最速で、96kHz運用のベンチマークを難なくこなせた。 データの使用量はFastestよりも若干増えるようだ。

WS001864.JPG

Fastest + Purecord は未だ試していないが、過去の経験からあまり御利益があるようには思えず。 暇な時に実験を行ってみるか。

Pitchのオフセット固定に関しては、今のところ破綻は発生していない。
posted by Yasuski at 01:49| LaVoixski