ソフト作ってます
ソフト作ってます
ということで、今出来ている音源(BD, SD, HH, RimShot)だけでも鳴らすべく、コントローラのソフトウェアを書き始めた。
といっても週末にやったのは使うであろうペリフェラルに関する部分やらヘッダファイルをいじった程度で、本線系の記述はまだまだ。これまではATmega88で良く書いていたものだから、ATmega128で例えばA/Dのところを見て「レジスタ名が違う」「トリガソースを選べない」「デジタルインプットを無効にできない」とか微妙な違いに戸惑っていたり。
音源の制御としては、
- 単純に約2msecのトリガパルスとベロシティ値を出せばいいもの(BD, SD, LoTom, MdTom, HiTom, RimShot, HandClap, CowBell)
- 約2msecのトリガパルスとベロシティ値と選択信号を出すもの(HH ← ClosedHH/OpenHH)
- 音声信号とカウンタ値とベロシティ値とゲート信号を出すもの(RIDE, CRASH)
の3種があって、1.はベロシティ出力にシリアル(I2C)DAC利用、2.はベロシティ出力にPWM利用、3.はベロシティ出力にはPWM、音声信号とカウンタ値出力にパラレルDAC利用 ― と、イロイロあって面倒くさい。どのようにプロパティとメソッドを持ったら綺麗かを考え中。
MIDIをパースしたあとに音源制御に振るときも、switch~caseで分岐すると後半に記述した音源に不公平なので、ラウンドロビンで回そうかとか要らぬことを考え始めて週末が終わった。
ところで、ATmega128のポートをかなり使ってしまった。もしUIを拡充するとして、LCDやらロータリエンコーダやらスイッチやらをつけるとしたら、ポート配置がずいぶん汚いことになるかそもそも足りないかと微妙な状態。やるとしたら別マイコンに振るか。ということでSPIを空けておくことに決定。