November th, 2018

New ZX Spectrum Beeper Engine: StringKS

Wow, a whole year has passed without me writing a new 1-bit driver! Time to rectify that situation. StringKS is based on an idea that I’ve been toying around with for some time. Since “Synthesis” was released on C64 I’ve been wondering: Can the ZX beeper do physical modelling synthesis, too? And, as you might have guessed, I’m not accepting “no” as an answer. So here we are. It’s a two-channel engine with Karplus-Strong inspired string synthesis. Extending the original Karplus-Strong idea, StringKS can operate on various source data, including noise, rectangular, and saw waves. For most generators, 3-bit volume control is supported. In addition, you can also play PWM samples on one of the channels. The implementation is far from perfect: frequency counters are 8-bit only, and on high notes decay will kick in very quickly, leading to rather short sounds. Still, I think it’s a technique worth exploring further.