5 |
BSVによるサウンドFSMの再設計 (6) |
サウンドデータ修正手順
ゲームサウンドの改良のため、サウンドROMの内容を修正します。サウンドROMの作成法は記載していなかったので、その備忘のためでもあります。以下に手順の大略を示します。
- オリジナルサウンドを(http://www.classicgaming.cc/classics/space-invaders/sounds)で入手する。Player shootingとKilled Space Invaderのサウンドの表示が誤って入れ替わっているようです。
- Windows上のサウンドツールである Audacityにより適宜音量を調整する。そのままだと歩行音とのバランスが悪く歩行音が聞こえにくいため、歩行音以外の音量を下げて平均化する。ただし後述のように、頻繁に鳴る音でなければ多少大き目でも良い。
- waveを8bitに圧縮変換する。コマンドは
$ ffmpeg -i input.wav -ac 1 -ar 11025 -acodec pcm_u8 -fflags +bitexact -flags:v +bitexact -flags:a +bitexact output.wav
ここで、拡張子に.wavが必要。
- サウンド毎の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 - wcによりエントリアドレスを調べておく。エントリアドレスは、直前のROM累積サイズ+16。
- make_coe(以下)コマンドにより、バイナリからVivadoの読めるCOEファイルに変換する。
#! /bin/bash
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 (自機爆発音) ---- 若干延長してフェードアウトエンベロープを加えた。
- Code1 (自機弾発射音), 3 (インベーダ爆発音), 9 (自機増加音) ---- 歩行音とのバランスで音量を下げすぎたため、音量を若干上げた。
頻繁に鳴る音、例えばインベーダ破壊音が大きめだとうるさく感じますが、まれな音、例えば自機増加音や自機破壊音は大きめでも問題ないことがわかりました。ゲームバランスと言われますが、音量にもバランスがあるようです。
修正後のサウンドROM構造
Channel | Code | Sound | Start | Size [bytes] | Entry=Start+16 |
---|---|---|---|---|---|
自機音 チャネル(#0) |
1 | 自機弾発射音 | 0 | 3,422 | 0+16 |
2 | 自機爆発音 | 3,422 | 12,728 | 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となります。