1990年代の多くのアーケードゲーム機に搭載されていた音源チップ YAMAHA YM2151 を Arduino からこの手でどうしても発声させてみたい。
電子工作を始めて Lチカもそこそこに製作を始めた”未来ガジェット”のひとつです。
結構前につくったものでしたが、どのように製作したか忘れぬよう github に Arduino スケッチと参考させていただいた資料・回路図のリンクを掲載してみました。
本スケッチでは VGM Format と呼ばれる、音源チップに流すデーターダンプ形式を、そのまま YM2151 に write して発声させる方式を採っています。
このことから Arduino のスケッチは 100行ほどの単純なものになり、まずは発声させてみたい方にはちょうど良い規模感のプログラムになっています。たとえば PSG を同時に鳴らしたい、なんて時も数行足してもらえれば実装できると思います。
演奏データとなる VGM ファイルは mml2vgm を使わせて頂き MML (Music Macro Language)で作成しました。MML の書き方は体が覚えていることでしょう 😀
https://github.com/kuma4649/mml2vgm
[概要]
このツールは、ユーザーが作成したMMLファイルを元にVGM/XGMファイルを作成します。[機能、特徴]
[VGM]
・メガドライブ2台分の音源構成(YM2612 + SN76489 + RF5C164)*2にそったVGMを生成します。
(他にYM2151,YM2203,YM2608,YM2610B,SegaPCM,HuC6280に対応しています。)
github 上のサンプルは次のようにしてみました。(カエルの歌の3声輪唱です)
'@ M 110 AR DR SR RR SL TL KS ML DT1 DT2 AME '@ 022,005,000,004,005,041,000,001,005,000,000 '@ 016,008,008,008,002,000,001,002,005,000,000 '@ 031,018,000,004,010,044,000,008,009,000,000 '@ 031,009,007,008,002,003,001,001,009,000,000 ALG FB '@ 004,007 'X6 T160@110l4 r1r1r1r1 cdefedcrefgagfercrcrcrcrc8c8d8d8e8e8f8f8edc 'X7 T160@110l4 r1r1 cdefedcrefgagfercrcrcrcrc8c8d8d8e8e8f8f8edc 'X8 T160@110l4 cdefedcrefgagfercrcrcrcrc8c8d8d8e8e8f8f8edc
このテキストファイルを mml2vgm により .vgm 化して、Arduino のスケッチから PROGMEM で Flash メモリーに書き込んでいます。(music/vgmsample.h)
曲の大きさによっては Arduino の 32KByte Flash に載りきらないため、作例では EEPROM を接続し書き込んだデーターを演奏させることもしています。(ちなみに EEPROM を単純に 1Byte 読みすると速度が追いつかなかったため、先読みのリングバッファのような実装を入れました)
ハードの方は Arduino UNO のシールドで実装しています。(まずはブレッドボードで動作を確認した方が良いと思います)
足の数に対して基板が結構小さく、おまけに全部ビニール線で繋いだため結構大変でした。。とはいえ、初心者の自分が、2日くらいハンダ付けをがんばれば完成しましたので、おそらくみなさまいけるかと思います。(部品は AliExpress で入手しています)
さて完成した機械から奏でられた音色は…
[tegaki]リーディングシュタイナー発動…!!![/tegaki]
苦労した甲斐もありまして、無事タイムリープに成功。 😀
子供の頃からゲームの音楽と言えば FM 音源で、なんとかいい音で聴こうと PC からラインを引っ張り出してステレオコンポに接続して、何度も何度も聴いていたことを思い出します。
この機械は、電源を入れればすぐ楽曲が奏でられますので「古の電子オルゴール」として現在も活躍中です。
2019/4 追記。 github 上のサンプルデーターをパッヘルベル カノンに差し替えました!
ピンバック: YM2151 VGMファイルプレーヤ – Kuninet Blog