A DIY Arduino-powered virtual ensemble that plays Terry Riley's "In C" on CV/gate outputs.
Arduino code | 🛒 Buy on Tindie | 🛒 Buy on Reverb | ModularGrid | YouTube demo | 🗨️ Mod Wiggler
- Six performers that play "In C" patterns on 1V/oct CV/gate outputs.
- Each performer has a button to advance through the 53 patterns, or to pause at the end of the current loop (long-press).
- LEDs show when a note is played, but will start blinking if the performer is left behind by three or more patterns.
- External clock input to control playback speed.
- Main button to show late performers, or to reset everything to initial state (long-press).
- In the initial state every performer plays a steady C with no gate (for tuning), until the advance button is pressed and the first pattern starts being played.
Arduino code reads the definitions of the 53 patterns of "In C" from patterns/patterns.h
. This file is not hand-written, but automatically generated using patterns/cli.js
, a Node.js command line script. This script translates music notation contained in patterns/patterns.txt
into performant and memory-efficient data.
That said, you can write your own patterns and sequences to make the module play just about anything. Edit the TXT file (one sequence per line), install Node.js and then run this in the patterns/
folder:
npm install
npm start -- patterns.txt
Power on your modular system with the reset button pressed: the reset LED lights up steadily to show you entered the DACs calibration procedure. Performers LEDs show which CV output is currently being calibrated. The procedure requires measuring the output voltage using a multimeter with mV precision (0.001V).
The first CV output should be around 0.5V: use the first performer button to decrease the measured value, or the second one to increase it, until you get exactly 0.500V. Now press the reset button to advance to the next calibration point, that is 1.000V, and adjust the measured value again. There are 8 calibration points for each CV output, after which the calibration process is repeated for the other CV outputs, as shown by performers LEDs.
At the end of the whole procedure, the module will reboot itself and all CV outputs will track 1V/oct accurately. Calibration data is stored in Arduino EEPROM memory, so it's persisted across reboots and won't be lost by uploading new patterns.
Both DACs are on the same I2C bus, so you need to set their device IDs to 0
and 1
to address them individually. This is not possible once the circuit is soldered on the PCB.
New PCB build
🛒 Buy on Tindie | 🛒 Buy on Reverb
Old 3D-printed build
-
Always tune all your voices before each performance. In the initial state, the module plays a steady C note on all performers (with no gate): use that make sure every oscillator you're going to use is correctly tuned to C in whatever octave you prefer - or a different note if you want to play it trasposed.
-
You don't have to use all six performers: you can simply never activate some by never pressing their buttons. They will never start playing the first pattern, and they won't be considered being late. Use this to your advantage if you have a small system with only a few voices.
-
Don't be afraid to often completely pause one or more performers! In C directions say "it is very important that performers listen very carefully to one another and this means occasionally to drop out and listen". You can pause a performer by long-pressing its button: the LED will flash waiting for the end of the loop, and then the performer will rest until the button is pressed again. This means that resuming can also be used to change the "phase" of the pattern relative to the others.
-
Although the directions do not say it, the performers on the module can skip patterns! You have to quickly press the button multiple times before the loop ends. You normally press it once, and the performer advances to the next pattern. If you press it twice it'll skip one pattern (eg. when it reaches the end of #12 it'll start playing #14), three times and it'll skip two.
-
Often use the main button to display late performers. When using this function, the LEDs stop blinking notes, and light up for 2 seconds if their performer is 3 or more patterns behind. Please be aware that if you keep the main button pressed for 4 seconds, the module will reset! Directions say to "stay within 2 or 3 patterns of each other".