リスト2は、dpad2の後編に当たる連載第19回で紹介したお絵かきソフトを、今回のミュージックシーケンサーに対応させるために改造した箇所を示しています。お絵かきソフトが8×8のドットに対応していたのに対して、主に8×16に対応させるための変更を加えています。
3: reg [7:0]regs[15:0]; 4: reg [28:0] counter; 5: reg [2:0] x; 6: reg [3:0] y; 7: assign leds[0]=~y[3];
3行目で、8ビットのレジスタを16個用意しています。4行目と5行目は変更ありません。6行目のyは4ビット長になっています。16行分にアクセスできるようにするため1ビット拡張しました。
7行目では、Tang Nano 9Kの基板上にあるオレンジのLEDをyの最上位ビットで点灯させています。8×8のLEDドットマトリクスで16行を表現するためにページ切り替えを用いているのですが、LEDドットマトリクスに映し出されているのが1ページ目に当たる0〜7行目なのか、2ページ目に当たる8〜15行目なのか分からなくなると困るので、このLEDが点灯しているときは2ページ目であることを示すためにこの処理を設けました。
12: if(rst==0) {regs[0],regs[1],regs[2],regs[3],regs[4],regs[5],regs[6],regs[7],regs[8],regs[9],regs[10],regs[11],regs[12],regs[13],regs[14],regs[15],x,y}=0;
あと12行目ですが、リセットボタン(Tang Nano 9KのUSBコネクターを左側に向けた状態でコネクターの上側にあるタクトスイッチ)を押すと、regs[8]からregs[15]もクリアされるよう書き換えました。
図4は、今回作成したミュージックシーケンサーで演奏している様子で、YouTubeにアップしたサムネイルです。まず、ブレッドボードの上側に刺さっている青色のジャンパ線ですが、これはプレイモード/演奏モードではUSBコネクター下側のタクトスイッチを押しっぱなしにする必要があるのですが、動画撮影のため両手が使えるようにこのジャンパ線で常時プレイモードにしています。LEDドットマトリクスの右下に見えるICクリップはミュージックシーケンサーの出力をギターアンプにつなぐためのものです。
実際のFPGAミュージックシーケンサーによる演奏の様子は、以下のYouTube映像をご確認ください。
いかがでしたでしょうか。筆者もYouTube映像を再確認したのですが、四半世紀以上前からあるお誕生日カードの平べったい圧電スピーカーから流れる安っぽい音にしか聞こえませんでした。これからはFPGAならではの特徴を生かして、前例のない音楽に挑戦する所存です。
今筆者は、「FPGAで音楽」というテーマにかなり入れ込んでいますので、試したいことはまだまだありますし、書きたいこともたくさんあります。読者の皆さんの中にこのテーマにご興味がある方は、編集部までどしどしご要望をお寄せください。もし反響が大きければこのテーマで新連載が開設されるかもしれません。そうなれば筆者としては思うつぼです。読者の皆さまのご協力を切にお願い申し上げます。
Copyright © ITmedia, Inc. All Rights Reserved.