シンセ開発ログ 2016-09-22
Arduino用シンセのVRA8シリーズで、Timer1割り込みが生きていた問題。
noInterrupts()を追加したところ、VRA8-Pを4音ポリで動かせた。
※2016-09-23追記:Timer0割り込みが正しい。VRA8シリーズでは、プリスケーリングなしでPWM出力に使用しているので、CPUパワーをスゴク無駄にしていたと思われる。
発音数を増やすと、ゲイン(ダイナミックレンジ)を小さくしないといけないので、今のところは実験のみ。
CPUパワーにはまだまだ余裕がありそうなので、誤差拡散などを使ってダイナミックレンジを確保してもよいかもしれない。
きちんと整理できていないけれど、割り込みの影響は「128クロック以上の遅延」以上のものがあったようだ。
今回の件は、VRA8-Mで「__attribute__((always_inline)) を指定しないと、関数がインライン展開されない」と気付いたのと、同じくらいのインパクトがありそうである。
可能性が広がるなー。(何で見落としていたかなー)
自作シンセ第6弾も、VRA8シリーズになるような気がしてきた。
とりあえず、Digital Synth VRA8-P 1.0.1をリリースした。(過去作品もdevelopブランチでは修正)
説明書きは「Improve the stability」としてある。
「Arduino IDE 1.6.8 + Arduino Uno R3」でCPUパワーがギリギリ足りていたのが、
「Arduino IDE 1.6.11 + 互換ボード」でBUSY LEDが点灯するようになった(実害は不明)のも解消された。
先ほど突然、GitHub Desktopが動かなくなった。アップデートの影響っぽい。