以前はオプティマイズ・メソッドの変更で改善が見られたが、今回はどうやってもアウト。 attatchInterruptのルーチン内に集約したDACへのデータ転送ルーチンが規定時間内に終了出来ず、Loop処理を行っているパートにタスクが侵食している模様。
一方、Loop処理内に展開している「アルペジエーターの駆動を行うパート」にはインターラプト・マスクを施しているが、これらの影響でピッチの管理を行っているルーチンに破綻が生じている可能性がある。
ということで、関連するマスクを全て除去したところ、ピッチの変動に改善が見られた。
新しく導入するボードでは、より高速なDACの採用によってデータトランスファーに要する時間が圧縮できるので、現在置かれている怪し気な状況は好転すると思われる。
今回のピッチが変動するケースは、MCUの処理能力のマージンがほぼ限界に達していることを示唆する現象なので、今後はコードのダイエットを進めていかなければならない。
追記:
LaVoixskiの音声出力・CH3にはオシレーターの単独出力を固定でアサインしているが、ここにオシレーター選択機構を実装してみることにした。
オシレーターを選択するパラメーターは、ChordEditModeのみで使用している「チューニング・ノブ」に割り当てている。

これといったエラーもなく切り替え機能を実装できたものの、発音関連のタスクが増加した影響で、SequencerModeの音のズレが再発してしまった。
やはりこの辺がTeensy3.6の性能限界ということで、今後新たに機能を追加する場合には「出音を4voiceに減らす」か、実装済みの機能のうち「使用頻度の低いものを端折る」か、機能を削る選択を迫られることになる。
折衷案としては、SequencerModeの出音のみを4Voiceに制限する方法も考えられるので、一度このダイエット法を実験してみよう。
追記2:
Pitchに生じるドリフトがLEDの点滅とあからさまに連動しているのが怪しかったので、点滅機構周りのプログラムを精査したところ、不要な条件分岐を行っていたことが発覚した。
これは、対象する全てのチャンネルのORを取るという間抜けな仕様で、この分岐構文を排除して回路を単純化した結果、SequencerMode選択時に生じていたピッチの変動を抑えこむことに成功した。

同時に、サブ出力チャンネルの選択機構を稼働させることにも成功、

ついでに、ピッチ検出機構の if() 構文をより負荷が少ない switch() 構文に変更している。
