(2024/10/19追加)当記事の内容を動画でも解説してみました
(2024/10/13追加)実際に演奏した楽曲をYouTubeにアップしてみました
以前、Arduino用のYM2151シールドというのをネット上の貴重な情報を元に作りました。
YM2151とYM2413のArduino用シールドを作ってみた話 #Arduino #YM2151 #YM2413 #YAMAHA
それだけでも感謝感謝なのですが、Arduino UNOベースですといかんせんスペックが少し不足なので、例えばSDカードからVGMデータを読み込んで演奏とか、外部から楽曲データを送信してもらってメモリに貯めてそれを演奏とか、そういうのがちょっと苦しい感じなんですよね。
SDカードから直接読み込んで演奏させるのはArduinoでもギリギリ出来たことは出来たんですが、たぶん曲数増えるとオーバフローしそうで、なんとも危なっかしくて。
ということで同様の仕組みをRaspberry Pi picoで作れば良いのではないかと思い立って作ってみたというわけです。はっきり言って性能的にはRaspberry Pi picoはどこをとってもだいたいArduino UNO R3の上位互換でしかないので、力業で解決できるだろうという算段です。
そのためには、Raspberry Pi picoのピン配置をArduinoシールドに変換できなくてはいけませんので、まずそのシールドを作ってみました。
といっても、汎用性を重視してピンの接続はジャンパピンで行うことに。これが後で功を奏するわけですが。
それ以外に、最近何でもGrove接続するおじさんになっている中の人的には、I2CとUARTはGroveで繋ぎたいということで、Groveコネクタを2つ増設。こちらは、ピンはいったん決め打ちにしてしまいましたが、ゆくゆく差し替えられるようにしたいところ。
microSDカードスロットは、以前Arduino用に用意していた自作シールドの配列を変更して対応。
あとはファームウェア(Raspberry Pi picoに入れるプログラム)なんですが、ご存じの通り、Raspberry Pi pico は Arduino言語(C++の独自拡張言語)でも動かすことができます。なので、もともとArduino用にひろましゃ氏が作成されていたarduino-vgmplayerをベースにRaspberry Pi pico対応+SDカード読み出し対応など手を加えて、完成させました。
とりあえずで、microSDから直接読み出しながらYM2151に信号を送るというなかなか性能的にキツそうな作りにしてみたんですが、ほぼほぼ遅延なく演奏できてしまったので、もうこれでいいか、ということにしましたw
ソースコードは、GitHubに上げております。
これに、ダイソーの300円スピーカーをつなげると、なんともいえない味のあるジュークボックスが出来上がります。
ちなみに、さすがにYM2151シールドをゼロからユニバーサル基板で配線はしんどい、という方向けにはオレンジピコショップさんで基板の取り扱いありますのでおすすめです。
Z80 FM音源 YM2151 ボード (KZ80_YM2151) 専用プリント基板(オレンジピコショップ)
中の人も入手したもののまだ組んでないのですが、時間を見つけて2つめのYM2151シールドを作ってみようと思っています。
コメント
コメントを投稿