テキトーに知らべてみた。1. GAS2HTML
いくつかのGBAゲームのサウンドをMIDIで再生できるSappyプレーヤーを利用していく中で、GBAサウンドエンジン部の処理をチェックするのにバイナリエディタだけではさっぱりなので、バイナリデータをHTMLファイルに出力するツールを作成。Bouche氏によるサウンドデータ解析情報を元にテキトーに色分けして出力するので、具体的な処理が一目瞭然。ただ、色分け判定の作りが若干いい加減なので、不正確な表示をする場合があったりなかったり。(^^;
2. サウンドエンジン
SappyプレーヤーはNintendo純正(?)のサウンドエンジンの再生のみ対応しています。つまり、再生できない別のサウンドエンジン搭載GBAゲームが色々と存在する訳です。たとえば、「Super
Mario Advance 1」はSappyで再生可能であるのに対し、「Super Mario Advance 2
- 4」については再生不可。SappyのReadmeによると、これらのゲームはエンジンが異なるとのこと。と言うわけで、早速解析ー。バイナリエディタとにらめっこしつつ、あれこれ色々とやってみる。いかんせん何の情報もないので苦労しましたが、何とかサウンドのデータにあたるものを発見。以下がサウンドテーブルのアドレス値になります。
^^)/
These games has another engine. The following is the offset address of sound table.
- [AA2J] Mario Advance 2 ... Music $2DAB38 , Voice $252268 , SE $??????
- [A3AJ] Mario Advance 3 ... Music $307B20 , Voice $?????? , SE $??????
- [AX4J] Mario Advance 4 ... Music $3C93E8 , Voice $?????? , SE $??????
それぞれ音楽/音声/効果音、$??????はまだ発見できず。と言うか、正確にはめんどくさいので調べていないだけだったりします。効果音については音楽とは別の場所に置かれているのは間違いないのですが、どこにあるのかさっぱり検討がつかず。(^^;
ちなみに、音楽と音声でそれぞれサウンド処理のスタイルが全く異なっており、共通しているのはサウンドテーブルが4バイト単位となっているところでしょうか。
これを受けたROMハックとして、「Super Mario Advance 2」の最初のオープニング音楽をゲーム内の別の音楽に変更する1例。分かる人には分かると思いますが、バイナリエディタかメモリー書き換え可能なエミュレータでも使って以下のような感じにします(これは改造コードではありません)。
2DAB38 0C 4C
2DAB39 01 4D
これの改造コード(PAR)でも作れればいいなと思い、勉強ついでにちょっとチャレンジしてみるも、いまいちよく理解できず。日常的に改造コードを全く利用していないというのもありますが、ゲームの改造というと、かつてバイナリエディタでエミュレータのリアルタイムセーブデータをセコセコと書き換えていた人間には、高級な機能はよー分かりません。(^^;
これと若干関連性があるのが、海外のエミュレータニュースサイトZophar's Domainに「Advance Sound Razor」なるツールです。Sappyの作者さんによるもの。
3. MIDIの再生を行うミュージックエンジン
上記で挙げたものとは別のサウンドエンジンを搭載しているGBAゲーム(ゲームコードAZWJ)には、MIDIファイルのデータそのものがファイル内部に含まれているとのことです。テキトーにリッピングツールを作って調べてみると、1300個ほどある感じ・・・。(o_O)
This game has about 1300 MIDI files in the game file. If you search, you can get many
characters of header such as "MThd"(type) or "MTrk"(track).
- [AZWJ] Made in Wario (J)
ちなみに、とある情報筋(?)によると、GBAには少なくとも10種類ほどのサウンドエンジンが存在する?そうな。
|