honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

呼び込み君音源カードの技術情報

このブログにはあんまり出てきませんでしたが、私の家には呼び込み君が2体います。

Image

 

世の中にはこの呼び込み君に魂を奪われてしまった人、特に子供が多く、

 

 

どういうわけかうちの息子もその術にはまってしまい

 

日々家の中で呼び込みサウンドが鳴り響いているのです…

 

そんな呼び込み君、仕様についてはまず適当な動画でも見てもらうことにして

基本的な機能としては、音源カードに内蔵された2曲のうちの一曲(もしくは無音)と、録音ボタンを押しながら吹き込んだアナウンス2本のうち一本、を延々とループ再生する機能があります。

呼び込み君の特徴的な「ポポーポポポポ」は、背面に差し込む音源カードに内蔵された曲で、このカードを抜いてしまうと聞くことができません。

 

初期状態のシステムで、子供たちが大好きなドン・キホーテBGMに合わせたアナウンスを再現するためには、録音ボタンを押しながら携帯などでドン・キホーテの曲を流しながらアナウンスを録音する必要があり、結構めんどくさいです。
実際のドン・キホーテの店頭の一部では、特注で製造される専用BGMの入った音源カードを使用しており、これを使うとBGMとは別に単体でアナウンスを録音することができます。

しかし、特注ですから子供たちが簡単に手に入れることはでき…ないはずなんですが、

なぜかメルカリで結構売っているようです…なんで?闇?

そんな子供たちのあこがれ特注BGMカード、うちの息子も絶対に欲しいと言ってききません。かといってこのような闇取引に手を出すのはいかがなものか

というわけで、ドン・キホーテの曲にとどまらず、自分で好きな音源を録音できる音源カードを自作できるようにしてしまえばいいじゃないかプロジェクト~~!

 

↓これはどっかの店で見たAdoの曲と一緒に録音されたアナウンスを再現しようとする息子

 

まずは、既存の音源カードについて調べることにします。

音源カードの中身です



IC1~IC4まで実装パターンがありますが、実際に実装されているのはIC1のみでした。

IC1はMicrochip製のSPIフラッシュメモリ 32MBit(4メガバイト) 26F032 です。
この中に音源データが入っているはずです。
ピン配置とパターンを追って模式回路図を書いてみました。

呼び込み君では一つのICに入った曲2曲の選択式ですが、
基板の端子にはあと3つのICを選択できるような拡張があるようです。
この端子を使う場合、IC5に74138が実装されるように見えます。

呼び込み君ではIC1しか使用されないため、J1で直接選択することで
74138の実装を不要としているようでした。
しかし、この拡張を使った機器、他にあるんですかね…?

吸い出すために、Arduino XIAOで読出しプログラムを作ってテキストでダンプし、
これをシリアルで受信してからバイナリファイルに落とすことにします。

Flashの上限電圧が3.6Vですので、5V系Arduinoは使用できませんので注意です。

無事バイナリファイルができましたので、ざっと眺めながら解析していきます。

ファイルの先頭部分のヘッダ部分に情報が詰まっていそうです。

解析を楽にするため、ImHexというソフトを使ってみることにしました。

 


構造体定義を書いていくことで、ファイル全体を構造体として解析できる優れものです。

 

解析を進めていった結果、構造体定義は以下のように書けることがわかりました。

struct songheader_t{
    u32 magic;
    u16 unknown1;
    u16 unknown2;
    u32 addr_start;
    u32 addr_stop;
};

struct song_t{
    songheader_t header;
    padding[0x400-16];
    u8 songdata[header.addr_stop-header.addr_start+1];
};

struct globalheader {
    u32 magic;
    u32 val1;
    u32 val2;
    u16 u1;
    u16 u2;
    u32 songaddr[2];
    padding[0x40-24];
    
    song_t song1@songaddr[0];
    song_t song2@songaddr[1];
};

globalheader data@0;

この構造体定義にて読み込むと、以下のようなテーブルが生成され、中身が一目瞭然です。

4MByteあるフラッシュメモリ中、使用しているのは2578432バイト、2.5MBほどのようです。

音源データ部のフォーマットはどうなっているでしょうか。

普通の非圧縮フォーマットであれば無音部分は0やFFなどが続くはず。それが無いということは何らかの圧縮フォーマットである可能性が高いです。
しかし、再生に使用しているのはかなり小スペックのマイコンであり、そんなに複雑ではないはず。ええいADPCMに違いない、とあたりを付けてGoldwaveであれこれ開いていると、ついに正解を見つけました!

全くノイズのない、生のポポーポポポポを手に入れたのです。

 

それを手に入れてもしゃぁないねん。

いや、ここまでわかったということは、これと同じフォーマットでここに自分の好きな音源を書き込んでやれば、好きな音源のカードが作成できる、という技術の裏付けができました。

しかし、このFlashメモリに音源を書き込むためには専用の回路やエンコード用のソフトを作らなければなりません。できるだけ低コストで、さらにユーザーフレンドリーに仕上げるため、設計を進めていきたいと思います。

 

いや、誰が使うねん!!!!!!

 

(※ある程度、少人数ですが需要はあると思います。しかし、部品代、基板製造代、など子供のお小遣いの範囲に納まる気はしません…)

 

書き込み機の作成の記事はこちらです!

honeylab.hatenablog.jp