ブレッドボード上で作られていた3和音オルゴールをきちんと基板上で製作しました。
オリジナル開発者の傾斜スイッチギミックも取り入れました。
きちんとしたケースに格納すれば完成です。
表面実装部品が手持ちに多いので基板はとても小さくまとまりました。ジャンパ線が一箇所あるのが少し残念です。
オーディオアンプも音量調整用ボリュームも付けたのでかなり大きな音も出せます。
スピーカーはダイソーで買った100円の耳元スピーカー。そういえば300円のUSBスピーカーも3個ほど陳列されてました。
64kバイト(512Kbit)のEEPROMに10曲格納しましたが、13kバイト程度なのであと40曲くらいは入れられそうです。
EEPROM先頭ページに曲数、各曲の先頭アドレスを書くようにしたので、曲の追加の際にプログラムの変更は不要です。
プログラムはEEPROMの先頭ページにあるインデックスを読んで、演奏する曲を決めるわけです。
毎回最初から再生するのでは芸がないので、PIC側にある256バイトのEEPROMに何曲目を再生するか書き込んであります。電源を入れるときやスイッチの割り込みで次の曲からの演奏になります。
傾斜スイッチON→OFFの動作で、楽曲スタート。
もう一度ON→OFFで途中停止。
さらにON→OFFで次の楽曲スタート。
ほうっておけば次々に曲を演奏して最初の曲に戻る。
ということです。
音楽データを1MHzのI2Cで1音分読み込むのに22us程度どうしても必要なので、PWM設定間隔32usには間に合いません。
ですので音と音の切れ目で32バイトまでの先読み(プリフェッチ)を行います。平均的には8音分(16バイト)の先読みが起きていて1音目をPWM値を設定するまでに255usかかりますが、1秒の1000分の1のさらに4分の1程度の発音遅れは気がつくことはできない領域です。
プリフェッチされた音どうしは遅延なく32us以内にPWM設定されるので和音がずれたりすることなく滑らかにつながります。傾斜スイッチでの演奏途中停止もプリフェッチされたデータが無くなったところで行われます。
音の切れ目(たいていは小節の切れ目にきます)にデータ読み込みが起きるよう音楽データを工夫したことがポイントです。
音データ仕様
このデータ仕様に基づき、ナウシカオープニングの以下楽譜は、
こんな風にコードされます。
MUSEで3和音までの楽譜入力が終わっていれば、上記コードは別プログラムで生成されます。
この別プログラムが一番凝った作りになっていて、MUSEデータを解釈するだけでなく音の切れ目を上手に探して変換生成してくれます。
曲目(演奏順不同)、
・ジプシーの旅(ドラクエ4)
・星の界
・序曲Overture(ドラクエ4)
・風の谷のナウシカ・オープニング
・きみを乗せて(天空の城ラピュタ)
・もののけ姫
・いつも何度でも(千と千尋の神隠し)
・世界の約束(ハウルの動く城)
・いのちの記憶(かぐや姫の物語)
・テルーの唄(ゲド戦記)
3曲目まではうちに楽譜があったのでそれを打ち込み、4曲目からはYouTubeで公開されている楽譜を打ち込みました。




