How to resurrect early electronic music with Arduino?

This project is inspired by early electronic music and sound effects created by the BBC’s radio studio in the 1960s. Before synthesizers were commonplace to hear unprecedented sounds, they used a combination of industrial test equipment and magnetic tape tricks. The test generators and “found sounds” produced raw audio that was looped, reversed, accelerated and decelerated with multiple tape recorders to produce eerie, unnatural sounds that accompanied radio and television programs of the time.

In my project, using an Arduino microcontroller, I modeled three vintage test generators; the whole project can be put together for less than £ 15 [около полутора тысяч рублей]… The performance lacks the aesthetic charm and analog sound of real things, but I have retained the tactile hand control that software plugins do not have, and by its very nature, all the giblets of the project can be hacked, repaired and updated.

Recently, documentaries about Delia Derbyshire and the radio studio have sparked a surge of interest in how early electronic music was written. At the same time, contemporary artists such as Hainbach record tracks using vintage equipment and equally old methods. The renewed interest inevitably increased the demand (and prices) for used test equipment. Devices that were nearly useless a few years ago are now changing hands at auctions for over £ 200.


  • One Arduino X microcontroller. I used the Nano, but any compatible controller should work.
  • 2 resistors 1M Ohm.
  • 3.9K ohm resistor.
  • Capacitor X 4.7 nF.
  • Audio out jack (6.3mm or 3.5mm).
  • 6 linear potentiometers 10K.
  • 3 10K logarithmic potentiometers.
  • 2 single-pole, unidirectional switches.
  • USB power cable.
  • Perforated Veroboard.
  • Female block (optional).

You will also need a computer with the Arduino IDE installed to download the software. The circuit is simple enough for manual point-to-point wiring using an inexpensive punched board. AudioPhonic Workbench works well on USB power, so no special power supply is required.

Step 1. Getting Started

There are a minimum of components in the project, which makes it cheaper and simplifies the design. With the Arduino Nano board, you can run three oscillators at the same time. In addition, the oscillators can cross modulate each other and produce a wide range of sounds due to their simple design.

The early electronic music pioneers used devices such as wobblers and ring modulators in their creations. The wobbler used one oscillator to change the pitch of the second oscillator, a form of frequency modulation (FM). At low frequencies, this produces a vibrato effect, more and more discordant at high frequencies. A ring modulator allows one oscillator to change the volume of the other, a process known as amplitude modulation (AM). At low frequencies, this creates a tremelo effect, which, again, becomes more discordant as the modulation frequency increases. Audiophonic Workbench provides both amplitude and frequency modulation.

Shown above is the Audiophonic Workbench front panel. The top row of knobs controls the pitch of each oscillator, while the bottom row controls the volume. The two knobs in the middle row control modulation. The first controls how Oscillator 1 modulates Oscillator 2. Turning clockwise increases amplitude modulation, and turning counterclockwise increases frequency modulation. The second knob in the middle row controls how Oscallator 2 modulates Oscillator 3. When these knobs are centered, there is no cross modulation. The last two controls are the oscillator speed switches. They allow Oscillators 1 and 2 to act as Low Frequency Oscillators (LFOs), creating the vibrato and tremelo effects I described above.

Step 2. Iron

The schematic diagram of the project is shown above. It consists of 8 potentiometers connected to the 8 analog inputs of the Arduino, and 2 switches connected to the digital input pins, and an RC circuit for the audio output.

To output audio, Audiophonic Workbench uses Pulse Width Modulation (PWM), eliminating the need for a separate D / A converter. Mozzi Audio Library supports “HIFI PWM” mode, which is used here. The mode combines the output of the two PWM outputs for better sound quality. Enabling HIFI PWM requires additional effort before downloading the code. I wrote about them in step 4.

Step 3. Resurrect the remote

The first step in the assembly is the selection of the case. I used an inexpensive pine jewelry box from a local craft store and painted it matte black to give the device a retro look. The dimensions are 140 x 90 x 50 enough to fit the controls on the front, but it would be better if the box was larger. I show the front panel connection diagram below.

All potentiometers have their left pins connected and connected to the 5V pin on the Arduino (pin 27). Likewise, the right pins are wired and linked to the two toggle switches and GND on the Arduino (pin 29). The center pins of each potentiometer are connected to the analog inputs of the Arduino through thin wire leads.

It would be possible to connect the front panel directly to the Arduino, but I prefer to use a perforated breadboard which allows me to reuse components in projects. It is also easy to add additional experimental circuits. If you are working with a punched board, it makes sense to plug the Arduino into a socket. The diagram below shows both sides of the board layout. Notice the center-cut tracks. They can be cut with a special tool or a knife, but I prefer a 6 mm drill so that the tracks are neat and easy to see.

I placed the audio-out jack on the back of the box, but that’s just my preference. I also drilled a large hole in the back that the USB cable goes through to the Arduino power box. When installing the board in the case, make sure you have enough space to plug in the USB cable.

Step 4. Download and configure Mozzi

In my project, the Mozzi sound synthesis library is used to implement oscillators. To compile the sketch, you need to download Mozzi and install it in the Arduino IDE. You can download the library here

To reduce the number of components, sound is generated using pulse width modulation (PWM). The PWM pin is a sequence of digital pulses. At a sufficiently high frequency, these pulses charge the capacitor and produce a rising voltage at the output. At low pulse rates, the capacitor discharges and the output voltage drops. By changing the frequency (or pulse width), you can control the waveform.

Arduino’s PWM audio tends to be of poor quality, but Mozzi supports HIFI PWM mode – a significant improvement over standard PWM audio. This uses two PWM contacts and requires one additional resistor. The only complication: for the mode to work, you need to change the file mozzi_config.h in the Mozzi library for this to work.

First, find the file (on my Linux it is located in /home/john/Arduino/libraries/Mozzi-master… You will need to edit it.

Replace the code

    //#define AUDIO_MODE HIFI

with this code:

    #define AUDIO_MODE HIFI    

You need to change the beginning of the file, line 27.

Step 5. Checking the hardware

To test the hardware, you can download a simple sketch from my github

The sketch reads the values ​​of each analog input once per second. These, along with the two switch inputs, are displayed by the Arduino IDE port monitor as shown above. After loading the sketch, try turning each potentiometer one at a time and make sure the values ​​change from 0 to 1023. The sketch also generates a test signal at the audio output. For the generation to work, you must modify the file mozzi-config.has I wrote in the previous section.

Step 6. Software filling

All code can be downloaded from GitHub by this link

The code is quite simple, but not easy to understand as it is optimized for speed, not readability. It was written in an inline fashion and uses integer arithmetic with data scaling to avoid numeric overflows. The sketch creates three instances of the Mozzi Oscillator using a sine wave wavetable. Main control loop updateControl reads potentiometers and switches 128 times per second and updates a number of global variables accordingly. Sound processing loop updateAudio uses these globals to compute separate samples for each generator. Then they are mixed and removed. Feel free to experiment with the code, but remember that the loop updateAudio called 32768 times per second. The code in it should execute quickly. Out-of-range processing will cause crackling and audio glitches.

Step 7. How is it in business?

Audiophonic Workbench encourages experimentation. The controls are designed to always play some kind of sound until the Oscillator 3 volume is set to zero. Although this sound may become discordant, it should not produce glitches or highly distorted output. A few tweaks of the knobs – and the sci-fi style with its pulsating rhythms spreads through space.

Simple sine waves benefit greatly from additional sound effects. The original work of the radio studio takes on a lot of character through the intensive use of reverberation and echo. A multi-fx pedal is ideal – I’m using an old Zoom guitar pedal. Plugin software effects are great for recording to your computer. Vintage-style effects like Tape Echo and Spring Reverb work well: they match the sound of the 1960s. Interesting tones can also be recorded into a sampler and “played back” using a regular MIDI keyboard. Possible modifications are switches to achieve a different waveform, a DAC for high quality audio output, and a MIDI interface to control the pitch of the Oscillator 3.

Find out the detailshow to get a Level Up in skills and salary or an in-demand profession from scratch by taking SkillFactory online courses with a 40% discount and a promotional code HABR, which will give another + 10% discount on training:

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *