なんとなくMIDIクロックジェネレーターを作っちゃった①
行き当たりばったり式・電子工作
家のおもちゃ箱には、いつか何かを作ろうと思って買った部品やら、いつか役に立つだろうと揃えた工具やら計測器やらが転がっている。
最近、ヒマな時間を使い、おもちゃ箱から部品を引っ張り出しては、思いつきで何かを動かしてる。
「こんなもの作れるかなー?」「ええい、やっちゃえ!」
…と、上手くいくという目処もなく、行き当たりばったりで進めちゃうのだ。動いたらめっけもん。動かなかったら方針転換。完成するかどうかは神のみぞ知る。
そんなことを繰り返していたら、いつの間にかMIDIクロックジェネレーター(MIDI Beat Clock Generator)ができてしまった。自分でも驚いた。こんなに簡単なのか!?って。いやホント、マジでカンタンなんだから。
まずは「Lチカ」から
「LEDをチカチカさせる」から「Lチカ」。いまや「電子工作といえばLチカ」と云われるほどの、初心者向け定番実験だ。
おもちゃ箱にLED10本入りの袋が転がっていたんで、4本を順番に点灯させることにした。プログラムを書くのも久しぶりなんで、肩慣らしだな。
ちなみに使っているマイコンは「Teensy」。Arduino IDEで開発できるけれど、Arduinoよりもコンパクトで速くてメモリも多くて使いやすいのだ。
抵抗を繋いでるけど、値とかはテキトー。特に計算もしてないし、ひょっとしたら要らないのかもしれないけど、抵抗がおもちゃ箱に転がってたから、なんとなく挿してあるだけだ。
この時点ですでに、上手くいったらクロックジェネレータ―にしようと考えていたんで、BeatPerMinutesという変数を持ち、そこからインターバルタイマー割り込みでLEDを順次点灯させている。
インターバルタイマーのライブラリを参考にしたら、あっという間にできてしまった。Arduino IDEってカンタンだなあ。
7セグでBPM表示
年寄りにとって、BPMを表示するのは7セグだと決まっているのですよ。そのために、秋月の「7セグメントLEDシリアルドライバキット」をブレッドボードに並べてみた。
ちょうど参考になるような動画(よみやチャンネルさん)がYouTubeに上がっていたんで、そのまんま作っただけなんだけどね。
秋月のパーツは、YouTubeとかで検索すると制作例が見られることが多いんで、本当にありがたい。
とりあえず、数字の表示はできた。Teensyは3.3V動作なので、この7セグ表示器(4~6V動作)だと暗いんだけど、まあそれは後でどうにかしよう。
プログラムも、よみやチャンネルさんのプログラムと、Arduino IDEにあったサンプルプログラムを参考にしたら、何も考えずにできてしまったよ。
ロータリーエンコーダでBPMを上げ下げ
かりにも「クロックジェネレータ―」を名乗るんなら、BPMの上げ下げぐらいはできなければイカンだろう。プッシュスイッチで上下することも考えたんだけど(カンタンだから)、たまたま秋月の「LED付ロータリーエンコーダ」が転がってたから、これを使うことにした。何のために使うつもりで買ってあったのかは覚えてないけど、これはラッキー。
ロータリーエンコーダのプログラムは、Teensyのサンプルプログラムから引っ張ってきた。念のため、割り込みがなくとも使えるものを選んだ。これをイチから作るとなったら、絶対に挫折してるだろうなあ。
というわけで、先の7セグ表示プログラムに、ロータリーエンコーダ読み取りのコア部分を移植して、エンコーダをくるくる回すとBPM(予定)の数字が上下するところまで完成。
ここに、いちばん最初のLチカを合体。ロータリーエンコーダのライブラリは割り込みを使っていないものを選んだのは、Lチカでタイマー割り込みを使っているからだ。なので、何も考えることなくコピペで完了。
クロックをMIDIで出力
ここまでくれば、後はカンタン。Teensyは古くからUSB MIDIが使いやすかったためか、MIDI関係のライブラリや作例が見つかりやすいんだよね。プログラムを作る能力よりも、検索する能力の方が役に立つ。今回も「uClock」という、まんまMIDIクロックジェネレーターを作るためのライブラリが見つかったんで、これを使うことにする。
今まで作ったプログラムと合体。というか、大抵は「ヘッダファイルをinclude」して、「サンプルプログラム通りに初期化」すれば動いちゃうんだよね。
ほーら動いちゃったよ。
ちなみに動作確認は、Windows用の「MIDI-OX」というアプリを使っている。これもまた、先人の礎のおかげで、本当にラクさせてもらっているなあ。
Lチカは、インターバルタイマーではなく、uClockの割り込みを使って点灯するように改造。あと、秋月のロータリーエンコーダにはスイッチとLEDが付いているので、これを使ってMIDIクロックの「START」「STOP」「CONTINUE」機能も付けておいた。これにて完成。
ジェネレーターに同期させて曲を流してみる
何年か前に買った、KORGの「nanoKEY Studio」という製品にバンドルで付いてきた「Reason Limited」というDAWソフトがある。もうバンドルしていないようだし、俺の持っているのもかなり古いバージョンではあるけれど、立ち上げたら問題なく動作した。
調べたところによると、このReasonはMIDIビートクロックに追従して、リアルタイムでオーディオファイルを伸び縮みさせる機能があるらしい。なんと。それができるのって、Ableton LIVEぐらいかと思ってた。
というわけで早速試してみた。クロックジェネレータ―をマスターに、Reasonをスレーブにして、サンプルソングを流してみたら…
動作するじゃん! 同期するじゃん! そうそう、こういうことをやりたくて、MIDIクロックジェネレータ―を作ったんだよ!
Reasonを使ってこんなことができるのなら、ライブとかでも使えそうな気もするね。ブレッドボード上の実験だけじゃもったいないんで、プリント基板も作って、ちゃんと形にしようと思う。
実は設計はもう済んでいるんで、次回はその辺りを書いていくことにしよう。
(次回に続く)