gbt-player
gbt-player copied to clipboard
Ch3 vibrato sounds OK in mGBA, but it's broken on hardware
Issue
Ch3 vibrato sounds OK in mGBA, but it's broken on hardware.
The waveform is a simple Triangle, which looks like this:
Source files
basic - ch3 vibrato.s3m basic - ch3 vibrato.gba
Playback
mGBA Playback (OK)
https://github.com/AntonioND/gbt-player/assets/34793045/b357ca66-d29d-41b1-be1c-f6a1bf57c4e5
Hardware Playback (Broken)
WARNING!! HEAVILY BROKEN NOISE SOUND!! https://github.com/AntonioND/gbt-player/assets/34793045/daed84fd-3deb-4ee5-a8ee-72b64f185cbe
I tried this on 3 different GBAs, but they all have this broken noises.
VisualBoyAdvance and NanoBoyAdvance sound playback is closer to real hardware, if it helps.
VisualBoyAdvance and NanoBoyAdvance sound playback is closer to real hardware, if it helps.
I just tried NanoBoyAdvance, and it has the same clicking issue. Testing the audio with NanoBoyAdvance would be a good option, thanks for pointing it out.
I guess this explains it: https://gbdev.io/pandocs/Audio_details.html#mixer
Avoiding audio pops
Enabling or disabling a DAC (see below), adding or removing it using NR51, or changing the volume in NR50, will cause an audio pop. (All of these actions cause a change in DC offset, which is smoothed out by the HPFs over time, but still creates a pop.)
To avoid this, a sound driver should avoid turning the DACs off; this can be done by writing $08 to NRx2 (silences the channel but keeps the DAC on) then $80 to NRx4 to retrigger the channel and reload NRx2.
The HPF is more aggressive on GBA than on GBC, which itself is more aggressive than on DMG. (The more “aggressive” a HPF, the faster it pulls the signal towards “analog 0”; this tends to also distort waveforms.)
I always remove channels with NR51 (well, the GBA-equivalent register) before changing the volume, frequency, etc.