Skip to content

GBA sound demos for testing different sample rates and bit depths

License

Notifications You must be signed in to change notification settings

velipso/gba-sound-demo

Repository files navigation

GBA Sound Demo

These demos allow you to experiment with different sample rates and bit depths on the Game Boy Advance.

The GBA is notorious for having bad sound. Using these demos, you can verify that the GBA hardware is quite capable of good sound, but it takes special care to setup the timing correctly to produce a 32K sample rate.

The source code is included, as .gvasm files.

Read the technical details for more information on how this works.

Playing the Demos

The .gba files are in the repo, so you can download them directly:

Both demos have a blinking indicator in the bottom left -- this is used to verify that timing is correct when using timer based sample rates (16K, 32K, 65K). Blinking indicates that the VBlank and Timer IRQ fired at the same exact time.

Rates Demo

rates.gba

The rates demo will play a tone, and allow you to switch the sample rate, bit depth, dithering, and hardware sample rate.

Controls:

  • L/R - sweep tone
  • Start - set tone to 256Hz
  • Select - set tone to 4096Hz
  • D-pad - change settings
  • A/B - change between top or bottom settings (for quick comparison)

The top number is the sample rate of the generated tone.

The bottom numbers are the bit depth and hardware sample rate (set via SOUNDBIAS), along with whether dithering is used when generating the tone.

Song Demo

song.gba

The song demo will play a song at two sample rates -- the top is controlled via vblank, the bottom is controlled via timers.

Controls:

  • Start - restart song
  • Anything else - swap between sample rates

How to Build

You will need gvasm v1 to assemble the .gvasm files into .gba files.

After install gvasm, run:

gvasm make rates.gvasm

In order to build the song demo, you must first download some music.

Here's what I did:

  1. Installed youtube-dl

  2. Installed sox

  3. Downloaded the Super Mario 3 Medley:

youtube-dl -x --audio-format wav -o song.temp --prefer-ffmpeg \
  'https://www.youtube.com/watch?v=5Nu6BxCnyE0'
  1. Convert it to 13K/8-Bit and 32K/8-Bit:
sox song.wav -r 13379 -b 8 -c 1 song-A.wav
sox song.wav -r 13379 -b 8 -c 1 song-A.raw
sox song.wav -r 32768 -b 8 -c 1 song-B.wav
sox song.wav -r 32768 -b 8 -c 1 song-B.raw
  1. Build the .gba file:
gvasm make song.gvasm

Releases

No releases published

Packages

No packages published

Languages