Arduino compatible algorithmic 6-bit sound synthesizer
[Scroll down for the video]
Since quite a while, I am fascinated by generating electronic sounds with microcontrollers. What interests me in particular, is calculating sound waves in real time by implementing different kinds of algorithms on minimal hardware. Those algorithms usually leave a few parameters open. The values of those parameters can be influenced manually on the fly with various faders and buttons.
The concepts of my synthesizers are rather unconventional. You won’t find implementations of ADSR envelopes, chromatic scale or sequencers in my programs. Instead, they use patterns in the binary number system and make them audible. Musicians find my instruments hard to play – I enjoy to explore the mathematical nature of sounds with them.
At the beginning, I built fully integrated devices which produce sounds with just one algorithm. But since different algorithms produce different sonic patterns, at some point, I decided to split up the architecture: I started to build playback devices and separated from that, I stored the algorithms on little modules.
Usually, such a playback device contains the power supply, the input interface, an amplifier and a speaker. It takes quite some time to build that part of the hardware and its components are far more expensive than the ones for making a module.
The modules on the other hand are cheap and easy to make. They only contain a microcontroller, which performs the algorithm. So every program is stored on another module, which makes it easy to explore and to compare different approaches of computing sound.
“Micro Monster Modular” is one of those module based algorithmic synthesizers. In that case, I made three modules for it:
The first module is mainly for testing the correct function of faders and buttons. This module calculates a square wave, if you push one button. Two of the faders influence its amplitude and frequency. If you push the other button, the module calculates a sine wave wobble: Two other faders influence the frequency of the sine, and the frequency of the underlying wobble. When you push both buttons, the outcome of the sine wave wobble and the square wave are simply added and stored in an 8bit variable. Depending on the amplitude of the square wave, this can cause the 8bit variable to roll over its maximum value of 254. In that case, rhythmic patterns emerge. It’s a simple module which behaves very predictable. The outcome of the module sounds a bit cheesy, but due to its simple and predictable behavior, you can use it to make music in a traditional sense with it. I played a bit with the faders and recorded the result:
The second module implements the following formula:
output = t* (t >> (poti1>>4) | t >> (poti2>>4) )&((poti3>>3) +16)
“t” is a counter varible. It’ll be continuously incremented by 1 when you push one button, by 16 when you push the other button and by 17 when you push both buttons at the same time. The output of the looped calculations is low pass filtered with a ringbuffer. Poti number four determines the size of that buffer.
While the formula looks a bit cryptic, it calculates results which can range from heavy noise to sequences of tones which comes quite close to a musical composition.
A while ago, Finnish democoder Viznut researched what he called algorithmic symphonies from one line of code
The formula which I used for this module goes in that direction. There are nice online tools which also visualize the output patterns of such formulae. Here’s a derivative of my little code which doesn’t need any poti or button inputs and creates an intersting melody:
( t* (( t>>9| t>>13 ) & 15)) & 129
Copy it, paste it in this online player, hit ‘Generate Sound’ and listen. Change values and mess around with it – it’s fun!
Of course, I also captured a short sequence of the second module while I was playing with the synthesizer. Here is how it sounds like:
The third module contains an Arduino bootloader, but no further code. It has a USB interface built on it, which makes it completely Arduino compatible. It sounds like nothing, yet, but it is ready for easy experimenting.
Which brings me to the reason why I built Micro Monster Modular
The folks of HOLO-magazine ran a very successful Kickstarter campaign for financing the production of their first issue. They needed interesting rewards for their campaign and asked me if I could contribute soething. I promised to build a „surprise device“ as I didn’t want to decide at that time what I’d actually like to make.
The surprise package
There are brave people in this world and Matti Niinimäki from Finland is one of those guys. He backed HOLO’s campaign with a few hundred Dollars, he selected the unknown “surprise device” as reward and I didn’t need to think very long about what kind of surprise I’d like to make for him. Matti is well known for his electronic sound performances (stage name “Månsteri” – English: “monster”) and also for his practical electronic expertise. On top of that, he’s the only Arduino dealer in Finland.
So it was quite clear for me that I’d like to build a synthesizer for him, which he can use in his performances. And at the same time, I wanted to give him something which he can customize to his needs by using his programming expertise. That’s why I left the third module empty.
Just one last thing…
I often received emails about my other synthesizers. People want to know
if I can provide them with plans and schematics. As I build such little devices usually just out of my head, straight on the perfboard, plans do not exist in most cases – and when the device is ready, I’m usually too busy with other things, so I never draw a schematic. This time I did, and I’m happy that I can share it with you. In this zip-archive, you’ll find all the schematics and codes to make your own Micro Monster Modular!
Have fun with it!