[HN Gopher] Game Boy Advance Audio Interpolation
       ___________________________________________________________________
        
       Game Boy Advance Audio Interpolation
        
       Author : ibobev
       Score  : 57 points
       Date   : 2026-02-09 17:44 UTC (5 hours ago)
        
 (HTM) web link (jsgroth.dev)
 (TXT) w3m dump (jsgroth.dev)
        
       | dleslie wrote:
       | The originals sound better. The aliasing provides a crunchiness
       | and sharpness to the final output that drives emotional energy.
       | That zero mission rhythm isn't intended to sound smooth and soft,
       | the driving hard beats are an emotional tool for eliciting
       | anxiety and anticipation from the player.
       | 
       | But this is a bit like those who use smoothing filters. It's
       | ultimately about taste, but it should be recognized that unless
       | the filter is attempting to accurately recreate the original
       | hardware of the era then the original design intent is not being
       | adhered to, and so something may be lost in the "enhancement".
        
         | asdff wrote:
         | A friend had this killer basement setup with a projector into a
         | huge canvas dropsheet. Plus the game cube, and the GBA dock for
         | it, so we were projecting those games meant for a 2 inch screen
         | maybe 10-15 feet wide.
        
         | CyberDildonics wrote:
         | _The originals sound better._
         | 
         | I don't think so, I think you're just getting a high end that
         | isn't in the original audio. In the places where there are high
         | frequencies the aliasing and the hiss just gets in the way.
         | 
         |  _that drives emotional energy_
         | 
         | Seems like a hyperbolic rationalization.
        
           | RASBR89 wrote:
           | The 'improved' versions sound muffled like I have water in my
           | ears. Plus I'd rather hear the game as it was designed,
           | artefacts and all.
        
         | ErroneousBosh wrote:
         | > The originals sound better. The aliasing provides a
         | crunchiness and sharpness to the final output that drives
         | emotional energy.
         | 
         | In the mid-1980s the first really affordable sampler was the
         | Ensoniq Mirage, which used the Bob Yannes-designed ES5503 DOC
         | (Digital Oscillator Chip) to generate its waveforms. It played
         | back 8-bit samples and used a fairly simple phase accumulator
         | that didn't do any form of interpolation (I don't count
         | "leftmost neighbour" as interpolation). Particularly when you
         | pitch it down, you get a rough, clanky, gritty "whine" to
         | samples, that the analogue filters didn't necessarily do a lot
         | to remove.
         | 
         | Later on they released the EPS which had 13-bit sampling. Why
         | 13-bit? I don't know, I guess because the Emulator I and II
         | used 8-bit samples but m-law coding, giving effectively 13-bit
         | equivalent resolution. It also used linear interpolation to
         | smooth the "jumps" between samples, and even if you loaded in
         | and converted a Mirage disk the "graininess" when you pitched
         | things down was gone.
         | 
         | I'm currently writing some code to play back Mirage samples
         | from disk images, and I've actually added a linear interpolator
         | to it. Some things sound better with it, some things sound
         | worse. I think I'll make it a front panel control, so you can
         | turn it on and off as you want.
        
       | dietrichepp wrote:
       | This is great stuff... basically, an easy way to get much higher
       | quality audio out of a GBA emulator.
       | 
       | I'll add some context here--why don't more games run their audio
       | at 32768 Hz, if that's such a natural rate to run audio? The
       | answer lies in how you fill the buffers. In any modern, sensible
       | audio system, you can check how much space is available in the
       | audio buffer and simply fill it. The GBA lacks a mechanism to
       | query this. Instead, what you do is calculate this yourself, and
       | figure out when to trigger additional audio DMA from the VBlank
       | interrupt. You know the VBlank runs every 280896 cycles, and you
       | know that the processor runs at 16777216 Hz, so you can do some
       | math to calculate how much data is remaining in the audio DMA
       | stream.
       | 
       | A lot of games simplify the math--it's easier to start a new
       | audio DMA in your VBlank handler, but that means running at a
       | lower sample rate, which will sound pretty crispy.
       | 
       | YMMV, some people like the crispy aliased audio. If the audio
       | weren't crispy, the sound designers probably would have adjusted
       | the samples to compensate. Other factors being equal, I'd rather
       | listen to what the original artists heard when they were testing
       | on real hardware, because that is _probably_ closer to what they
       | intended, even though it has a lot of artifacts in it.
        
         | ErroneousBosh wrote:
         | > why don't more games run their audio at 32768 Hz, if that's
         | such a natural rate to run audio?
         | 
         | I've written some code to play back 8-bit samples (and indeed
         | to wavetable, FM, and VA synthesis) on 8-bit Arduinos using the
         | PWM to output 8-bit audio. That runs at 31373Hz which is a
         | pretty crazy sample rate.
         | 
         | Why?
         | 
         | Because the chip is clocked at 16MHz, and if you program the
         | PWM for no prescaler and "phase correct" PWM where it counts up
         | and back down, so you get a widening pulse in the middle of a
         | "burst", then it counts 510 "steps" of the counter. It's an
         | 8-bit counter so it counts from 0 to 255, then the next step
         | counts back down to 254, and so to 0 again, when the next step
         | takes it to 1.
         | 
         | And 16000000/510 is 31372.55 ;-)
        
       | joefourier wrote:
       | The reason the nearest neighbour interpolation can sound better
       | is that the aliasing fills the higher frequencies of the audio
       | with a mirror image of the lower frequencies. While humans are
       | less sensitive to higher frequencies, you still expect them to be
       | there, so some people prefer the "fake" detail from aliasing to
       | them just been outright missing in a more accurate sample
       | interpolation.
       | 
       | It's basically doing an accidental and low-quality form of
       | spectral band replication:
       | https://en.wikipedia.org/wiki/Spectral_band_replication which is
       | used in modern codecs.
        
         | Sesse__ wrote:
         | It's actually the other way round: Aliasing fills the lower
         | frequencies with a mirror image of the higher frequencies. So
         | where do the higher frequencies come from? From the upsampling
         | that happens before the aliasing. _That_ makes the higher
         | frequencies contain (non-mirrored!) copies of the lower
         | frequencies. :-)
        
           | joefourier wrote:
           | Oh yes you're correct, imaging would be the correct term for
           | what's happening I think (aliasing is high -> low and imaging
           | is low -> high)?
        
       | bitcraft wrote:
       | The crispy aliasing of the audio has always felt cozy to me. It's
       | also a bit of a signature of the system, like the wobbly polygons
       | on PS1. I appreciate that there are ways to change the sound, but
       | it feels a bit rude to label it broken or defective.
        
       | MBCook wrote:
       | Impressive.
       | 
       | Audio was the thing I could never figure out on my Gameboy
       | emulator. I couldn't get it to pass basic tests, even without
       | bothering to output sound on the computer.
        
       | functionmouse wrote:
       | The original sounds so much better...
        
       | soulofmischief wrote:
       | The loss in high-frequency information is not worth the
       | interpolation. Bass loses its crunch. Percussion fades into the
       | background.
       | 
       | Besides, I personally prefer to play my vgm at the original
       | sample rate, and my soundcard adjusts to the correct rate for
       | each song through fb2k plugins.
        
       | QuadmasterXLII wrote:
       | I suspect that without nostalgia, the fixed interpolation would
       | absolutely sound better. Unfortunately, nostalgia. The lesson I'm
       | taking away here is that, oh, the terrible resamplings are the
       | aspect of faithful emulation that makes it sound like a GameBoy
       | and not just sawtooths.
        
       | aappleby wrote:
       | I don't quite understand why the author is doing special handling
       | for PSG versus PCM audio.
       | 
       | My GameBoy emulator generates one "audio sample" per clock tick
       | (which is ~1 mhz, so massive 'oversampling'), decimates that
       | signal down to like 100 ksample/sec, then uses a low-pass biquad
       | filter or two to go down to 16 bit / 48 khz and remove beyond-
       | Nyquist frequencies. Doesn't have any of the "muffling"
       | properties this guy is seeing, aside from those literally caused
       | by the low-pass.
        
       ___________________________________________________________________
       (page generated 2026-02-09 23:00 UTC)