Liam Lacey, winner of the Element14 Open Source Music Tech Design Challenge, for his hardware polyphonic digital synthesizer shares 5 pieces of advice for every aspiring DIY hardware synth maker.
For the first four months of 2016, I embarked on an ambitious project for the Element14 Open Source Music Tech Design Challenge where I converted an acoustic vintage wooden toy piano into a standalone, polyphonic digital synthesiser. This project ended up winning me the grand prize of a trip to Music Tech Fest, Berlin, 2016, to showcase the synth.
The ‘Vintage Toy Synthesiser’ – a wooden toy piano converted into a digital synth.
I learnt a lot throughout this project. However, there were many times when I had multiple options for developing certain parts of the synth without knowing which was the best path to take. Therefore in this article I’m going to highlight five of the main technical aspects that you’d need to consider if thinking about developing your own DIY hardware digital synth, providing options and recommendations for the different ways it could be done, based on my experiences developing the Vintage Toy Synthesiser. This is, however, in no way a definitive guide to making hardware digital synthesisers, and mainly applies to developing DIY or prototype synths as opposed to commercial ones.
If you want to see exactly how I developed the Vintage Toy Synthesiser you can see the projects development blog here.
[gallery_page_marker title='The Brain' has_intro='true']
1. The Brain
The brain of your digital hardware synth will be responsible for running the synths sound engine as well as allowing all the separate parts to communicate with each other, and will be in the form of a microcontroller or microprocessor. Here are my top picks for a brain for a DIY digital hardware synth:
- Axoloti Core. For someone new to hardware and software development this may be the best and easiest option for you. The Axoloti Core is a powerful microcontroller board that runs its own graphical audio patcher software environment similar to that of Max/MSP or Reaktor, and includes all the hardware connections you need right out of the box, including audio in and out; MIDI; and USB-MIDI.
- Arduino Uno. Arduino is probably the most popular hardware/software platform for hobbyists to create their own hardware devices, and it’s most common microcontroller board, the Arduino Uno, is perfectly capable of running an audio synthesis engine. It’s not as powerful as the Axoloti Core, you’ll need external components to add audio and MIDI connections, and you’ll need to learn how to write code. However Arduino is cheap, easy, and the community and learning resources around the platform are very extensive.
- Teensy. The Teensy microcontroller is very similar to Arduino; so similar that its software environment is just an add-on to the Arduino software and it is able to run Arduino libraries. However Teensy provides a graphical design tool for developing audio applications, as well as an official adapter board for adding audio connections. It is also faster and more powerful than an Arduino board at the same price. However it’s not as beginner friendly and there aren’t as many learning resources.
- A Linux-based microprocessor. While the previous three boards are microcontrollers that run their own dedicated firmware that can only run a single application at a time, a microprocessor can run a full operating system that can run multiple applications simultaneously. These are generally a lot more powerful and programmable than microcontrollers, and would allow you to develop much more complex and customized synthesis engines. Two of the most popular Linux-based single board computers are the Raspberry Pi and the BeagleBone Black. While the Raspberry Pi is generally more popular and has better built-in audio output connections, the BBB is better in certain performance and connection aspects, and the Bela platform is allowing it to become a great option for developing embedded hardware audio devices. However microprocessors are more complex to develop for and not always straightforward to setup, so may not be the best option for beginners.
[gallery_page_marker title='The Sound Engine Library or Environment' has_intro='false']
2. The Sound Engine Library or Environment
Examples of programming audio software using Pure Data (left) and Maximilian (right)
Next you need to choose an audio synthesis library or environment to use to develop your digital synthesisers audio engine. However your options here greatly depend on the brain board you are using.
If you are using the Axoloti Core, your only option (but a great option nevertheless!) is to use the Axoloti patcher software, and for the Teensy it would make most sense to use its audio graphical design tool. If using an Arduino board there are a few third-party audio and synthesis Arduino libraries available as discussed on the official Arduino website. However the real dilemmas start if using a Linux-based microprocessor.
Here are my recommendations for the different options for creating synthesis applications that can run on Linux-based microprocessors (which are all free to use):
- An audio synthesis environment. Audio synthesis environments usually consist of a programming language (sometimes graphical) and a software environment specifically for developing audio applications. These environments are great for newcomers to software development as they’re generally quite easy to setup and get to grips with, with the exact one best suited to you depending on your preferred programming method. Some of the most popular environments that run on embedded Linux include—Pure Data, a graphical programming patcher environment similar to Reaktor; SuperCollider, a textual programming language with its own GUI editor; and Csound, a simplified textual programming language which has a number of 3rd party GUI editors.
- A C/C++ audio library. As apposed to an audio synthesis environment, a C/C++ audio library is a software toolkit for creating audio applications that uses the existing and widely used C/C++ programming languages as well as standard software development GUI editors. They’re not as easy for beginners to get to grips with, however as they use existing languages and editors it is possible to mix-and-match between the different libraries as well as with other C/C++ libraries if needed. Some of the most popular C/C++ audio libraries that I recommend include Maximilian, STK, Plonk|Plink|Plank, and CSL; all of which can be used to develop extensive audio synthesis applications.
- A general-purpose toolkit. A final option would be to use a general-purpose software toolkit that, while they don’t necessarily specialize in audio, are more than capable for developing audio synthesis applications. Being multipurpose has allowed them to be widely used and documented with extensive learning resources which are great for beginners, however their audio synthesis capabilities usually aren’t as strong or extensive as that of a library or environment designed specifically for audio. Two of the most popular toolkits here are JUCE and openFrameworks, which both use the C++ programming language.
[gallery_page_marker title='Note Input Mechanism ' has_intro='false']
3. Note Input Mechanism
You’ll need to integrate some kind of interface or mechanism into your DIY synth for playing notes, and there are many options available to you here based on the type of notes and performance expression you would like. Here are my top recommendations:
- Push buttons. If you just want to generate simple note-on/note-off messages with no velocity sensitivity, a set of push buttons, such as arcade buttons, would be the easiest option.
- Ribbon sensor. Another option for simple non-velocity note messages would be to use a ribbon sensor, also known as a SoftPot or membrane potentiometer, like that which can be found on the Korg monotron. These are particularly useful if developing a small synth, or when using a brain board with a limit number of inputs (more on this shortly), as a single sensor can be used to trigger multiple notes.
- Piezo sensors. If you are developing a drum synth where you just need simple triggers instead of sustained notes, piezo sensors are a simple and affordable option. These can also provide velocity sensitivity, and are often used in commercial electronic drum trigger pad.
- FSRs. If you want velocity sensitive notes that can be sustained, FSRs (Force Sensitive Resistors) are a good option. As well as velocity-sensitive notes, FSRs can also be used to create polyphonic aftertouch expression, and can be found in many commercial MPC-style instruments.
- Velostat. Velostat is a material that is very similar to FSRs in that it is pressure sensitive, though it is a much cheaper alternative and the material can be cut into any shape or size. However it is a bit trickier to connect Velostat to an electronic circuit compared to using an FSR sensor, and may not always generate consistent pressure results.
- You could choose to have no internal note triggering mechanism and just use an external MIDI keyboard/controller instead. This will require you to build in a MIDI input into your DIY synth, which can be done in a few different ways depending on the brain board you are using.
Another thing you need to consider here is how you are going to connect these controls/sensors to your brain board. If your brain contains enough digital and/or analogue inputs, you could connect your controls directly to it, otherwise you’ll need to use a set of multiplexer components for increasing the number of inputs, and/or use an external microcontroller that communicates with the brain board using a protocol such as serial, SPI, or I²C. Therefore when choosing your brain board you may want to consider its number of inputs along with the number of controls you’ll be using here.
[gallery_page_marker title='Panel/Parameter Controls ' has_intro='false']
4. Panel/Parameter Controls
As well as being able to trigger notes on your DIY synth, you’ll also want to be able to control all the parameters of the synthesis engine for creating different sounds/patches. On commercial synths you’ll usually find these controls on the front panel of the device, with the most common and best controls being the following:
- Potentiometers/Pots. These controls are what users more commonly know as dials/knobs or sliders, and for controlling continuous parameters such as oscillator amount or filter cutoff these are often the best and easiest controls to use.
- Toggle switches. While these can come in many different physical forms, a toggle switch is the perfect control for setting an ‘on/off’ parameter or a setting with only two results such as the common ‘poly/mono’ setting.
- Rotary encoders. These are often known as dials/knobs too. However, compared to a pot a rotary encoder sends a relative value (e.g. increase value by 1, decrease value by 1) instead of an absolute value (e.g. 64, 79). These are a useful alternative to pots if you want your synth to have patch storage (e.g. if you load a patch with a new set of parameter values on a synth with pots, touching the pot will force the parameter to be set to the value of the pot instead of just adjusting it slightly), however they work best when there is also an LCD to show the parameter values.
- Momentary buttons. These are another control that are useful on synths with patch storage as they allow you to trigger a relative change to a parameter value in the backend synthesis engine instead of setting an absolute value. However, in this instance they are best coupled with an LED or LCD to show the parameter values. Momentary buttons are also useful for simply triggering an event, e.g. ‘save patch’.
Like with the note input controls, you’ll also need to consider how you are going to connect these controls/sensors to your brain board.
[gallery_page_marker title='Enclosure Construction and Design ' has_intro='false']
5. Enclosure Construction and Design
Finally you will need to consider what all the electronics of your DIY synth are going to be housed in, and your best option here mainly depends on your budget and how professional you want your finished synth to look:
- Use an existing object. The cheapest option would be to use any suitable existing object you can find, and this could range from using a food container, a VHS tape, or pretty much any kind of plastic or wooden box. Holes for the controls and connections can then be drilled out using a power tool such as a Dremel.
- Buy a ready-made enclosure. If you want something a bit more professional looking without breaking the bank, a ready-made enclosure may be your best option. You can buy enclosures and cases for most popular microcontroller and microprocessor boards, such this one for Arduino or this one for Raspberry Pi, but make sure that these cases are big enough to house all controls of your synth as well. You can also buy multipurpose enclosures or project boxes, and again you’ll probably need to use a power tool to make holes for the controls.
- Design and construct a custom enclosure. The best way to get a professional looking enclosure on a DIY/hobbyist level would be to design a custom enclosure that is then constructed using laser cutting. There are many websites such as MakerCase that allows you to design custom boxes/cases, or more complex designs including holes for all controls and connections can be designed in any CAD software. You then just need to pass the design files onto a laser cutting company, and you’ll have your perfect synth enclosure in no time! Laser cutting could also be paired with laser engraving for labeling all the controls on your synth. Custom enclosure could also be done using 3D printing, which would allow for more complex shapes. However this process is usually more expensive.
Learn everything you need to know about synthesis in the video tutorials here