I grew up listening to the music from my Commodore 64. As time goes by I still find those tunes interesting and I always wonder how did the musicians accomplish those sounds with such a limited hardware.
Last week I did this web experiment that visualizes the state changes in the chip synthetizer during the playback of any SID song.
Visualizing SIDs
Commodore 64 was famous for being one of the first personal computers with a dedicated sound chip able to play several voices simultaneously and with some degrees of freedom to create more interestig sounds that the regular beep sounds.
Thanks to that many games had amazing soundtracks that I still like to revisit (because of nostalgia) but also because of how intrincate they sound for today standards.
Some weeks ago I discovered jsSID, a nice project in github that ports to javascript all the known implementations of the MOS6581 chip synthetizer (from all the C64 emulators).
Messing around with it I discovered that all the data related to the state of the chip was easily accesible, so I decided to create a front-end to visualize the state during the playback.
The problem with SID music is that musicians back in the day used all the tricks available to create new and interesting sounds, and to do so they relied on sending hundreds of messages per second to the sound chip (to fake extra voices or to create new wave forms).
Because of that, visualizing the state of the chip is not so easy, all the values change very fast and without a propper representation over time you would miss the interesting parts.
Thats why I started playing with timeline representations. I still have plenty of room for improvement in the representation but I’m happy to see that all the features in the chip are mapped on the screen so you can see the whole state of the chip.
Playing with the SID
Once I had the representation I thought about allowing the user to interact with the SID in runtime, – what would happend if I change this value? lets find out! – The only problem with interacting with the chip while is playing a soung is that the state keeps being overwritten constanly so any change made will last for less than a second.
To avoid that I tweaked the implementation of the synth so you can block some messages to some parts of the chips, freezing the state to the current one.
From there I kept improving the interface till I thought that it would be nice to hook a MIDI keyboard to the chip, and thanks to the MIDI API I was able to do it very fast.
The problem is still that using a regular MIDI keyboard with a chip sounds bland, to get the full performance of the chip you need to add a layer of control over the synth to transform the notes from the MIDI to interesting sounds in the chip. But that could be a nice project for the future.
Feel free to play with the synth and let me know what you think!
Leave a Reply