サウンドハック


使用するツール

SE編

戦闘突入SE(120番)の差し替えを例に解説します
  1. 鳴らしたい音声のwavファイルを用意する
  2. wavファイルのサンプリング周波数を10512Hzに変換する
  3. Sappyで差し替える音声を探す
  4. Sampleインポート
  5. 確認して再生時間が短ければ以下の調整を行う
  6. MIDI書き出し
  7. ノート長を伸ばしてmidファイルを保存
  8. MIDI2GBAでsファイルに変換
  9. .sをアセンブルする
  10. ちゃんと鳴るか確認
  11. となりの音声もちゃんと鳴るか確認(ノート長を変えただけなら大丈夫なはず)

→ダメでした.となりの音声もちゃんと鳴るようにするには拡張領域にアセンブルしてそこから読み込むようにする必要がある

Sampleインポート

楽器を置くイメージです

10512Hzで再生するように指定します(もともとROM内にある音声データに合わせて)

ボイステーブル編集

置いた楽器を使うように指示するイメージです

再生時間調整

再生時間が短い場合はMIDIを編集できるソフトでノートの長さ(Gate)を伸ばします


BGM(wav音源)編

SE編の手法を応用して任意のwavファイルをBGMとして鳴らすことが出来ます
自由な選曲が出来る一方で,wavファイルを直接インポートするため容量をかなり多く占有します
またサンプリング周波数を落とす必要があるため,適切に調整されたROM内の音源と比較すると音質は劣ります

大まかな作業手順

  1. wavファイルの調整
  2. midファイルの調整
  3. Sappyによるインポート

wavファイルの調整

鳴らしたいBGMのwavファイルを用意します
今回の方法では曲の途中からループをさせるのは面倒なので,ループ開始位置が曲の先頭のものを使用します
容量を節約するため,鳴らしたい部分1ループだけ切り出すことをオススメします

  1. Audacityなどを用いて,必要な部分を切り出してサンプリング周波数を10512Hzに変換します
  2. WaveToneなどを用いて,曲のテンポと小節数を調べます(midファイルの調整に使います)

midファイルの調整

wavファイルを適切に鳴らすためのmidファイルを用意します
一から作成することも難しくありませんが,Sappyで適当なSEをMIDI書き出しして調整すると楽です

  1. Dominoなどを用いて,midファイルのテンポを調べた値に設定します
  2. 高さC4のノートを置いて鳴らしたい長さに調節します
  3. GBA側でテンポが2の倍数にされてしまうようなので,ループ位置はエミュレータで確認しながら調節する必要があります

Sappyによるインポート

「.sをアセンブルする」でsファイルに変換したmidファイルをアセンブルします

今回は書き込みオフセットを0x800000,ボイスグループオフセットを0x800100としました
指定した0x800100にはまだ何もないので「ボイステーブル編集」で楽器を作っていきます

画像のように値を設定しました
「Sampleインポート」で楽器の音となるwavファイルを0x800200にインポートします


ちゃんと鳴ったらおわりです
ループ位置などは気合で調整してください


BGM(ネイティブ音源)編

別ゲームのBGMを音源ごと移植する方法です

大まかな作業手順

エグゼ3の戦闘曲をエグゼ6の戦闘曲として移植するのを例に解説します
  1. ボイスセットの調整
  2. midファイルの調整
  3. Sappyによるインポート

ボイスセットの調整

Sappyなどで音源を移植したいゲームのソングテーブルのアドレスを調べます

今回使ったエグゼ3 Blackは0x1494A0でした
SappyTransplantAssistant.py でボイスセットを調整します

ファイル名,ソングテーブルのアドレス,移植オフセットを与えて実行します
今回は移植オフセットを0x700000とします
(入力ファイル名)_forTransplant.bin が出力されるので移植先の指定アドレスにペーストしてください

midファイルの調整

Sappyで移植したい曲を「MIDI書き出し」します
書き出したmidファイルを引数に与えてGBA_MIDI_Corrector.pyを実行します
出力された(入力ファイル名)_corr.midをMIDI2GBAでsファイルに変換します
ループさせる場合は(入力ファイル名)_corr.midかsファイルを調整してください

Sappyによるインポート

インポートします

ボイスグループオフセットには使いたいボイスセットの元のアドレス+指定した移植オフセットの値を入力します

正しく再生できたらおわりです