nesaudio · Ricoh 2A03

NES sound, from the actual chip

This runs the real 2A03 algorithm in your browser — duty sequencers, the 15-bit noise shift register, the 32-step triangle, 4-bit envelopes and the hardware's non-linear mixer, at the 1.789773 MHz NTSC clock. No samples, no model. Dial something in, then copy the Python to do it at scale. Source on GitHub.


Voice

12.5% spreads energy over eight harmonics and thins the body; 50% has a strong fundamental and no second harmonic.

Only 16 pitches exist. Low index = bright hiss, high = low rumble. Metallic mode is the short loop — pitched and ringing.

Shape

Retrigger re-attacks the note every N video frames. This is the texture control — a driver writes the registers 60 times a second and the chip holds each value, and that staircase is most of what makes chip audio sound alive. 0 turns it off.

Output

The same thing in Python


  

Why this exists

The 2A03 is five fixed voices with published arithmetic. A generative audio model approximating it produces something listeners immediately hear as “too digital”, and no amount of prompting fixes it — the failure is structural. Running the real algorithm is correct by construction, faster, and reproducible.

The Python library adds a tracker for music, analysers that recover channel, pitch, tempo and key from existing chip audio, and the verification checks. pip install -e . from the repo.

Built from nesdev.org/wiki/APU · MIT licensed