Posts Issued on September 5, 2022

posted by sakurai on September 5, 2022 #501

サウンドデータ修正手順

ゲームサウンドの改良のため、サウンドROMの内容を修正します。サウンドROMの作成法は記載していなかったので、その備忘のためでもあります。以下に手順の大略を示します。

  1. オリジナルサウンドを(http://www.classicgaming.cc/classics/space-invaders/sounds)で入手する。Player shootingとKilled Space Invaderのサウンドの表示が入れ替わっているようです。
  2. Audacityにより適宜音量を調整する。そのままだと歩行音とのバランスが悪く歩行音が聞こえにくいため、歩行音以外の音量を下げて平均化する。ただし後述のように、頻繁に鳴る音でなければ多少大き目でも良い。
  3. waveを8bitに圧縮変換する。コマンドは

ffmpeg -i input.wav -ac 1 -ar 11025 -acodec pcm_u8 -fflags +bitexact -flags:v +bitexact -flags:a +bitexact output.wav

ここで、拡張子に.wavが必要。

  1. サウンド毎のwaveバイナリが作成されたので、チャネル毎にwaveをcatでまとめ、ROMイメージのバイナリファイルを作成する。
     Ch.0 --- Code 1, 2, 9
     Ch.1 --- Code 3
     Ch.2 --- Code 4, 5, 6, 7
     Ch.3 --- Code 8, 10
  2. wcによりエントリアドレスを調べておく。エントリアドレスは、直前のROM累積サイズ+16。
  3. make_coe(以下)コマンドにより、バイナリからVivadoの読めるCOEファイルに変換する。

export input=\$1.bin
export output=\$1.coe
echo 'memory_initialization_radix=16;' > \$output
echo -n 'memory_initialization_vector=' >> \$output
od -An -t x1 -v < \$1.bin >> \$output
echo ';' >> $output

修正点

  • Code2 (自機爆発音) ---- 若干延長してフェードアウトエンベロープを加えた。

図%%.1
図501.1 修正後の自機爆発音

  • Code1 (自機弾発射音), 3 (インベーダ爆発音), 9 (自機増加音) ---- 歩行音とのバランスで音量を下げすぎたため、音量を若干上げた。

頻繁に鳴る音、例えばインベーダ破壊音が大きめだとうるさく感じますが、まれな音、例えば自機増加音や自機破壊音は大きめでも問題ないことがわかりました。ゲームバランスと言われますが、音量にもバランスがあるようです。

修正後のサウンドROM構造

表501.1 ROM構成表
Channel Code Sound Start Size [bytes] Entry=Start+16
自機音
チャネル(#0)
1 自機弾発射音 0 3,422 0+16
2 自機爆発音 3,422 16,150 3,422+16
9 自機増加音 16,150 5,500 16,150+16
合計 [bytes] (32KB ROM使用率) 21,650 (66%)
インベーダ音
チャネル(#1)
3 インベーダ爆発音 0 4,622 0+16
合計 [bytes] (32KB ROM使用率) 4,622 (14%)
インベーダ音
チャネル(#2)
4 インベーダ歩行音 1 0 1,266 0+16
5 インベーダ歩行音 2 1,266 1,570 1,266+16
6 インベーダ歩行音 3 2,836 1,570 2,836+16
7 インベーダ歩行音 4 4,406 2,180 4,406+16
合計 [bytes] (32KB ROM使用率) 6,586 (20%)
UFO音
チャネル(#3)
8 UFO爆発音 0 25,968 0+16
10 UFO飛行音 25,968 1,846 25,968+16
合計 [bytes] (32KB ROM使用率) 27,814 (85%)

ROMのエントリポイントは上記のとおりStartアドレスから+16となります。


左矢前のブログ 次のブログ右矢