uCApps MIDIbox SID — Wavetable Sounds Tutorial #1 (Thorsten Klose)

author Thorsten Klose
date undated (written for MIDIbox SID V1; page footer "Last update: 2026-05-17", © 1998–2026)
article Wavetable Sounds Tutorial #1 — ripping C64 drum sounds by viewing waveforms and by tracing SID register changes
created 2026-08-30 · updated 2026-08-30

Thorsten Klose's tutorial for the MIDIbox SID (a DIY MIDI synthesizer built around real SID chips) shows how to take a drum sound out of a SID tune and rebuild it as a "wavetable" — in the C64 sense of the word: "a synthesis method, where the waveform and frequency of a SID voice is modulated so fast, that the resulting output sounds like a new waveform, which is originally not provided by the soundchip itself. The parameter changes are stored in a table … the technique is not related to 'wavetable synthesis', which is based on audio samples." The example is the bass drum of rob-hubbard's Auf Wiedersehen Monty ("this tune impressed me so much in the 80s, that I was never be able to forget those groove drums"). The MIDIbox-specific parts — CC numbers, the wavetable-rate formula, the siddump_convert.pl script, the SID-D drum firmware — are only sketched here.

Key claims#

  • Frames: "In SID tunes, wavetable sequences are mostly divided into frames of 20 mS", because the players "are called from a rasterline interrupt" at the screen refresh rate — 50 Hz on PAL; frame number ≈ 50 × seconds.
  • Method 1 — look at the waveform: play the tune in the old SIDPLAY, which can mute voices (View → Mixer) and write the emulated output to a .wav; sidplay2 is more accurate (it uses Dag Lem's reSID engine) but "doesn't allow to mute channels". The bass drum (0:38, channel 2) "begins with a triangle wave, which is active for 20 mS", then "a short noise part for 20 mS", and "ends with a pulse wave, the frequency and amplitude gets lower". A first reconstruction, transposes guessed by ear: triangle, noise, pulse, then pulse with the gate released and the transpose stepping down by 7 three times; a longer release on the envelope makes it fade.
  • Method 2 — trace the registers: siddump V1.0 "from covertbitops.c64.org … processes the .sid file by emulating the C64 CPU, and dumps SID register changes to STDOUT" (siddump.exe Auf_Wiedersehen_Monty.sid > dump). The trace of channel 2 (columns Freq · Note/Abs · WF · ADSR · Pul; the Pul and filter columns are cut from the page):
frameFreqnote (Abs)WFADSR
19370EA3A-3 (AD)11 — triangle + gate08F8 → attack 0, decay 8, sustain F, release 8
193840A3B-5 (C7)81 — noise + gateunchanged
19390B23E-3 (A8)41 — pulse + gateunchanged
19400923C#3 (A5)40 — pulse, gate releasedunchanged
194103CEA#1 (96)unchanged (gate still off)unchanged

Relative steps from the Abs column: +$1A, −$1F, −$03, −$0F semitones — "All numbers are in hexadecimal format — it's useful to have a calculator which supports this". Some empty rows follow "in order to allow the note to fade out properly".

  • MIDIbox translation notes (for the record): the wavetable must be slowed to 20 ms per step (rate 115, from period = 2 × (127 − rate) × 0.819 mS); transpose is a biased parameter (40 = middle, and MBSID-D starts from C-3, so the first value is 3C); siddump's A-3 is MIDIbox's A-2; the two WF nybbles are swapped in the CCs; ADSR values ×8; perl siddump_convert.pl dump -track 2 -time 0:38 -lines 100 does the arithmetic; a final End 7F step "resets the envelope registers in order to avoid 'ADSR hick-ups', which can happen due to a silicon bug in the SID soundchip" — MIDIbox's hard-restart.
  • The ADSR delay bug, seen from a synthesizer: in the hardware recording "the triangle waveform is not visible! This is due to anoying ADSR delay bug of the SID. The bug has several effects, which have been reverse engineered by Dag Lem, and documented in the source code of reSID … The gate is delayed by up to ca. 30mS!" Setting the release rate to 0 eliminates the delay completely but loses the fade; hence "most preset sounds of the 'common' MIDIbox SID don't use release", or the MIDI notes are played 30 ms early (easy with a sequencer, "difficult if played live"), or drums are sampled and the delay cut off.
  • Drum kits: the common firmware plays one patch (one 3-track, 32-step wavetable) per SID, too slow to switch between drum sounds, hence the MIDIbox SID-D firmware; the ripped Auf Wiedersehen Monty drums are in its preset library. Related links: hvsc, SIDPLAY / SIDPLAY 2, siddump, siddump_convert, Perl.

Practical takeaways#

A Hubbard bass drum is five frames: one of gated triangle, one of high noise, one of pulse, then pulse with the gate off while the pitch keeps falling (about 26 semitones up, then 31 down, 3 down, 15 down), ADSR 08F8. As a tracker wave table that is one row per frame with absolute pitches, and the rows after the gate-off are what the release fades out. Register dumps beat listening — by ear "the frequencies (transpose values) have to be determined by ear (e.g. by comparing frequencies)". Expect the first frame of a drum to be swallowed by the envelope's delay unless the release is 0 or the voice was gated off in time (hard-restart).

Notable quotes#

"The term 'wavetable' is used by the C64 community for a synthesis method, where the waveform and frequency of a SID voice is modulated so fast, that the resulting output sounds like a new waveform."

"The gate is delayed by up to ca. 30mS!"

Relevance#

The wiki's first frame-by-frame drum from a real Hubbard tune, with register values; the definition of "wavetable" the wiki uses; and an independent account of the envelope delay for hard-restart and adsr-envelope.

Pages touched#

wavetable-programming · instrument-design · hard-restart · adsr-envelope · siddump · instrument-tables · rob-hubbard · monty-on-the-run · hvsc · sid · goattracker · sid-player-routine · vice

source file wiki/summaries/s-ucapps-wavetable-sounds-tutorial-1.md · graph