ドラムマシン。
子供の頃、作ってみたかった物の一つです。
なぜ?といわれてもわかりません、電子楽器が高くて手の届かないものだったからかなあ。
とりあえず、半日あがいて「リズムが鳴るもの(編集機能無し)」を作ってみました。
問題はArduino nanoのメモリが32KBと、おそろしく貧弱なことと。
処理能力もこれまた貧弱なこと。
いろいろとダメ元で試してみました。
今回の基板、たったこれだけ。
全部Arduino nanoの自力で処理します。
DAコンバータ MCP4911だけ、音の出口に使います。
PWM出力で工夫すれば、無くても動くでしょう。
ドラムの音データを一つずつ、フリー素材を編集して作ります。
少ないメモリを食わないよう、なるべく小さく短く。かつ聞きやすいよう加工します。
手作業、手作業。
音色は、バスドラ、スネア、ハイハットのオープン・クローズ、シンバル、クラップの6つだけ。
サンプリングレートは、ギリギリ音質が許せる16000Hzにしました。
データは文字列にして、プログラムに直接貼り付けます。
リズムの再生データも、手抜きですが直接プログラムに配列で書きました。
楽譜はないので、ふふんふーん♪と鼻歌で適当に並べます。楽しい♪
プログラムは、この再生データをちぎっては読み、ちぎっては読み。
4チャンネルの再生変数にぶっこみます。
同時に16000分の1秒ごとに、ドラムの音色データを読み込んで、音量調整して加算。
計算値をDAコンバータに投げて、電圧変化でイヤホンを鳴らします。
タイミングはこれまた手抜きで、delaymicroseconds()でウェイトを取っているだけです。
まあテストなので・・・ご容赦を。
結果がこちら。
意外とそれらしく鳴ったと思いました。
DAコンバータのおかげでノイズも少ない。
しかしArduino nanoの処理能力は、もはや限界なのだった。
動作時のメモリ使用量。
32KBメモリのうち、プログラムと音色データで88%を使っています。余裕なし。
2KBのRAMは、リズムパターンの配列に食われています。余裕が少ない。
また処理負荷は、ざっくり計算でdelayを除くと8割くらいプログラム実行にかかっているので
これ以上余計な計算を増やすのは厳しいと思われます。
もっと重たいプログラムを動かしたければ、他のマイコンに移るしかないということか。
子供の頃作りたかった物を作ったと同時に、
なんだか限界が見えて、スッキリした気がします。
おしまい。