実装案メモ
実装案メモ
今回のTR909用CPUボード、DACがたくさん載っていることから既に皆さんお察しかと思いますが、コントローラのATmega128ではMIDI-to-Triggerにとどまらず、その大容量を生かしてPCMデータを抱えてこれを再生しようと考えております。
analogさん基板を利用するのでハイハットはこちらにお任せとし、今回対象としているのがRIDEとCRASHでそれぞれ32Kワードのテーブルを持ち、これらをマイコンからパラレルDACで出力しようというわけ。
オリジナルでは振幅方向にエンファシスのような
コンプレッション処理をされた1ワードあたり6bitデータがROMに収められていて、CMOS発振回路で周波数可変のクロックを発生してカウンタを回してROMのアドレスにした上で、カウンタ値上位をD/AしてそれをCVにVCAでデエンファシス
エクスパンジョンするような形で再生波形を得ている。
そういうわけでオリジナルではピッチ可変でRIDEとCRASHを再生できるのだけれども、マイコンでクロック可変は難しい。どうせ出力レートはタイマ割り込みなんだから割り込み時間を制御すれば良いと考えてみたら、16.9344MHzで32kHzは529ck。1/2~2倍ピッチぐらい可変しようとすると厳しい側では264ckぐらい。264ckでテーブルから引いてきてDACに送るとなるとちょっとつらそうだし、ピッチによって他の処理が割を食うし、RIDEとCRASH独立コントロールはさらに難しいし、ということで出力レート固定でテーブルポインタを位相アキュームレータ方式で更新する方法にすることにした。と、日記には書いておこう。
あとは割り込みサービスルーチン内で位相の算出・テーブル参照・DAC出力 をすると重いので、割り込み部と実演算部とを分けてセマフォで同期を取ろうか*1、しかし位相アキュームレータはたぶん32bitぐらいになってアトミックじゃないので要所で割り込み禁止を入れたりしないと…
いやそれ以前に各音源のVelocity値をシリアルDACに送るのに使うTWIが初体験なのでドライバを書かなきゃいかんだろう、とかやること目黒のサンマもとい目白押し。
さらにはオリジナルには無いチョーク奏法というほどでもないがシンバルの発音途中で音を止めるようにしたいなぁとかハイハットのフットクローズはできないものだろうかとかいう野望系もあったり。こちらはどう実装するかまだ考えていないのだけれども。
*1:言ってみたかっただけ。実質はフラグ