2019年01月01日

SequencialArpeggiatorのクロックを、Sequencerに設定したTempoと同期させる

インターフェイスの処理を行っているMainLoop上では、SequencerやArpeggiatorを駆動するタスクの処理を行っているが、この部分のif構文に拠る総当りな条件分岐をSwitchによる選択制に変更し、処理のステップを軽減することを思いつく。

Screen Shot 2018-12-29 at 18.27.56.png

要は、mode3の切り替えに応じてSwitchした後、そのルーチンでArpeggiatorの設定とステップの計数を行うようにコードを改変している。タスク終了後には総当りしていた計数ルーチンをすっ飛ばして次のタスクに移行する。 

処理の軽減が進んで余裕が出てきたので、SequencialArpeggiatorのクロックをSequencerに設定したTempoと同期させる機構を実装してみた。 

これは、非同期なArpeggiatorの推移のズレがSequencerで設定したループのタイミングが外れる度に生じてしまう違和感を解消するための施策で、当初はフリーランに拠る「自由度」を期待したものの、あまり効果的な用法を編み出せず弊害の方が気になりだした為に当初の方針を変更することになった。

手当を行った後は、これまでのフリーランの結果生じていた字余りっぽい挙動がある程度は軽減された模様。

WS001553.JPG

その後、クロックを同期するための割り算の精度を小数点以下8桁から13桁に上げた結果、発音のヒゲ(字余りの軽度なもの)の発生頻度を改善することが出来た。 

拍子に合わせた分散和音を展開できるようになるのはSequencerの用法としては正解だろう。

WS001554.JPG

拍子の「刻み」に誤差が出てしまうのは「3拍子」の表現を行うために「割り切れない数字」を扱うためだが、これはどうしても行わざるをえない折衷案だ。 

WS001550.JPG

Sequencerには、先に思い付いた「和音のシーケンスを行う機能の実装」を実現できず現在作業はペンディング中だが、必ずしも演奏に必須な機能ではないのでこのまま放置する展開もあり得る。

WS001555.JPG

和音の同時発音には少数点以下の数値を扱うデータアレイの実装が必要だが、現時点では何故かデータの読み出しを失敗してしまう。 コードを構成する和声のアレイ化は問題なく行えているのだが、それらを統合するアレイの構築法が判らない。 多分桁の扱いが問題なのだろうが、現時点では最適な用法を思いつくことができていない。

Screen Shot 2018-12-30 at 4.52.11.png
posted by Yasuski at 21:49| LaVoixski