C64 SID Player
Speel meer dan 61.000 SID-tunes uit de High Voltage SID Collection — rechtstreeks in de browser.
SID-tunes: De Iconische Muziek van de Commodore 64
SID-tunes zijn muzikale composities gemaakt voor de MOS Technology 6581/8580 SID-chip (Sound Interface Device), de legendarische geluidsprocessor van de Commodore 64. De SID-chip werd in 1981 ontworpen door Bob Yannes en maakte zijn debuut in januari 1982. De chip combineerde op unieke wijze digitale en analoge technologie en gaf de C64 een geluid dat computers van die generatie ver vooruit was.
De SID-chip: technische specificaties
De chip bood drie volledig onafhankelijk programmeerbare oscillatoren, elk met vier golfvormen:
- Pulsgolf — instelbare pulswijdte (0–100%) voor heldere, scherpe klanken
- Zaagtandgolf — rijke boventonen, typisch voor bas- en leadklanken
- Driehoeksgolf — zacht en fluisterend, voor melodische lijnen
- Ruisgenerator — pseudo-random bitpatroon voor geluidseffecten en percussie
Elke stem beschikt bovendien over een ADSR-envelop (Attack, Decay, Sustain, Release), een ring-modulator voor complexe interferentie-effecten, hard sync voor frequentiemodulatie en een gedeeld multimode filter (lowpass, highpass, bandpass, 30 Hz–12 kHz).
De twee chip-versies: 6581 en 8580
De originele 6581 (1982) draaide op 12 V en had een licht zoemende filterkarakteristiek die door velen als het "echte" C64-geluid wordt beschouwd. De latere 8580 (1987) draaide op 9 V, had een schonere filterrespons en een lagere ruisvloer. Veel klassieke tunes klinken op beide chips merkbaar anders — de 6581 voegt warmte toe die de 8580 mist. Deze player toont het gedetecteerde chip-model rechts in het info-blok zodra een tune geladen is.
Bekende componisten
De demoscene en de spelenindustrie brachten een generatie componisten voort die de limieten van drie stemmen tot het uiterste dreven:
- Rob Hubbard — Commando, Monty on the Run, International Karate
- Martin Galway — Wizball, Arkanoid, Green Beret
- Jeroen Tel — Cybernoid, Robocop 3, Supremacy, That's the Way It Is
- Chris Hülsbeck — Turrican I & II, Giana Sisters
- Ben Daglish — Last Ninja, Deflektor
The High Voltage SID Collection (HVSC)
De HVSC is een van de grootste computermuziekcollecties ter wereld. Opgericht in 1996 en sindsdien onderhouden door een team van vrijwilligers, bevat de collectie inmiddels meer dan 61.000 SID-bestanden van duizenden componisten. Alle nummers zijn gecategoriseerd per componist en inclusief metadata (titel, jaar, chip-model, speelduur). Deze player gebruikt de volledige HVSC-collectie, rechtstreeks bereikbaar via de directory browser.
Technische implementatie
WebSID: cycle-exact WASM-emulatie
Deze player gebruikt WebSID, een cycle-exacte SID-emulator van Jürgen Wothke, gecompileerd naar WebAssembly via Emscripten. Anders dan JavaScript-emulators die per sample benaderen, voert WebSID elke klokcyclus uit zoals de echte 6510-processor die zou doorlopen — inclusief timing-afhankelijke effecten, filtergedrag en envelope-nuances die cycle-exacte nauwkeurigheid vereisen. De WASM-module draait in een Web Audio ScriptProcessorNode en levert 44,1 kHz stereo audio.
ScriptNodePlayer & SIDBackendAdapter
De WebSID-bibliotheek bestaat uit twee lagen:
scriptprocessor_player.js— generieke spelerinfrastructuur: audio-context beheer, buffering, laden via XHR, subtune-selectie en lifecycle-callbacks (onPlayerReady,onTrackReady,onTrackEnd)backend_websid.js— de SIDBackendAdapter die de WASM-module omhult en een vaste API blootstelt
De adapter biedt naast afspelen ook uitgebreide controle over het geluid:
| Methode | Functie |
|---|---|
getSIDRegister(chip, reg) | Lees één SID-register (0–24) live uit de emulator |
readVoiceLevel(chip, voice) | Huidige envelop-amplitude (0–255) per stem |
setStereoLevel(0–32767) | Stereo-verbreding (matrix-stereo algoritme) |
setHeadphoneMode(0/1) | Koptelefoon-crossfeed voor ruimtelijker geluid |
setReverbLevel(0–100) | Digitale galm over de mix |
setPanning(chip, voice, 0.0–1.0) | Per-stem panorama |
enableVoice(chip, voice, bool) | Stem aan/uitzetten (voor muten) |
isSID6581() / isNTSC() | Chip-model en klokdetectie uit SID-header |
Registers lezen voor de visualizer en voice-status
De SID-registerruimte heeft per stem 7 registers, te lezen via getSIDRegister(0, base + offset):
| Offset | Inhoud |
|---|---|
| +0, +1 | Frequentie (16-bit, LSB eerst) |
| +2, +3 | Pulswijdte (12-bit) |
| +4 | Control register (golfvorm bits 4–7, gate bit 0) |
| +5 | Attack (bits 4–7) / Decay (bits 0–3) |
| +6 | Sustain (bits 4–7) / Release (bits 0–3) |
Stem 1 begint op register 0, stem 2 op 7, stem 3 op 14. De golfvorm-bits in het control-register:
0x10= driehoek,0x20= zaagtand,0x40= puls,0x80= ruis- Combinaties zijn mogelijk en worden als gewogen gemiddelde weergegeven in de canvas-visualizer
Elke animatieframe leest de canvas-visualizer de registers uit, berekent een getriggerde golfvorm (fase altijd startend bij 0 voor een stabiel scope-beeld) en tekent deze met een glow-pass en een kern-lijn in de kleur van de betreffende stem.
Voice-status panel
Onder de canvas toont een HTML-panel live de registerinhoud per stem, bijgewerkt via setInterval op 100 ms:
- De gate-LED gloeit mee met de werkelijke envelop-amplitude uit
readVoiceLevel() - Golfvorm en nootnaam worden berekend uit het control-register en de frequentieregisters
- De ADSR-waarden zijn de ruwe nibble-waarden (0–F hex) uit registers +5 en +6
- De ENV-balk toont de smoothed envelop-amplitude als percentage
- Bij het dempen via de canvas klapt het bijbehorende paneel naar 25% opaciteit
Ghost-noot in de canvas
Wanneer een stem actief is (envelop > 3%), wordt de nootnaam als grote, semi-transparante achtergrondtekst gerenderd in de golfvorm-sectie. De transparantie schaalt mee met de envelop-amplitude, zodat noten zachter uitfaden bij een lange release-fase.
Licenties
WebSID is gepubliceerd onder de LGPL v2.1, scriptprocessor_player.js onder de MIT-licentie. Beide bibliotheken worden ongewijzigd gebruikt — de volledige register-API is onderdeel van de publieke interface en vereist geen aanpassingen aan de broncode.