- Jul 26, 2024

The last two weeks I've been putting a lot of time into one of my music-related side projects. For a few years on/off I've been building tools and devices that change the way an analog synth presents its sound and its modulation outwardly.
This week I made an Arduino program that operates a row of four LEDs lights that respond to CV and gate signals output from my synthesizer.
I'll share my code and wiring below in case anyone is looking for help with a similar project. (Goodness knows I've found much help from random websites and blogs about other people's programming and hardware projects.)
AI was a valuable resource in writing the code, but it's taken a bit of tinkering to get it working exactly the way I hoped. It works by recording a value from the CV signal if/when it sees the Gate signal cross a certain threshold. It then stores the 4 most recent values in an array, and copies that array into another array sorted by magnitude. It uses that sorted array to determine which LED(s) should receive an output signal, prefering to keep a given signal mapped to whatever LED most recently had a signal closest to it. This is great for arpeggios and patterns. It maps up and downward motion well, too. after playing a sequence of four notes a few times, it will "learn" that pattern and sort it to a sequence of LEDs that track the up/ down movement of those pitches.
The code works well- and it's proven to be surprisingly flexible! I've experimented with changing the input sources from Gate/CV to other patch points on my Moog Grandmother, and each seems to respond in a unique and responsive way- I'm excited to try preforming with this!
Operating LED lights is not my end goal for this project, but it's a good proof of concept, and it's pretty cool in it's own right!
#include "SoftwareSerial.h"
#include "AccelStepper.h"
const int numLights = 4;
const int ledPins[numLights] = {2, 3, 4, 5}; // Digital pins for LEDs
const int analogPin1 = A0; // Analog pin for signal input
const int analogPin2 = A1; // Analog pin for blink control
int signalValuesByAge[numLights] = {0, 0, 0, 0}; // Array to store the signal values by age
int signalValuesByMagnitude[numLights] = {0, 0, 0, 0}; // Array to store the signal values by magnitude
int currentIndex = 0; // Index to keep track of the oldest value
int currentActiveLED = -1; // Variable to store the index of the currently active LED
int previousClosestValue = -1; // Variable to store the previous closest value
const int buffer = 10; // Buffer around each value
bool prevBlinkState = false; // Previous blink state to detect threshold crossing
void readAnalogSignal() {
delay(2);
int newValue = analogRead(analogPin1); // Read new signal value
// Check if the new value is within the buffer of any existing value
for (int i = 0; i < numLights; i++) {
if (abs(newValue - signalValuesByAge[i]) <= buffer) {
return; // Do not update the array if within the buffer range
}
}
insertAndSort(newValue); // Insert the new value into both arrays
}
void insertAndSort(int value) {
// Insert new value into the array sorted by age
signalValuesByAge[currentIndex] = value;
currentIndex = (currentIndex + 1) % numLights; // Update the index to the oldest value
// Copy values from age array to magnitude array
for (int i = 0; i < numLights; i++) {
signalValuesByMagnitude[i] = signalValuesByAge[i];
}
// Sort the magnitude array
for (int i = 0; i < numLights - 1; i++) {
for (int j = i + 1; j < numLights; j++) {
if (signalValuesByMagnitude[i] < signalValuesByMagnitude[j]) {
int temp = signalValuesByMagnitude[i];
signalValuesByMagnitude[i] = signalValuesByMagnitude[j];
signalValuesByMagnitude[j] = temp;
}
}
}
for (int i = 0; i < numLights; i++) {
Serial.print(signalValuesByMagnitude[i]);// for some reason this shows only three numbers? and when a 4th shows up it breaks...
Serial.print(" ");
}
Serial.println();
}
void updateLEDs() {
int currentValue = analogRead(analogPin1); // Read the current signal value
int closestIndex = 0;
int smallestDifference = abs(currentValue - signalValuesByMagnitude[0]);
// Find the closest value within the buffer range
for (int i = 1; i < numLights; i++) {
int difference = abs(currentValue - signalValuesByMagnitude[i]);
if (difference < smallestDifference) {
smallestDifference = difference;
closestIndex = i;
}
}
// If the closest value within the buffer range is the same as the previous closest value, keep the current active LED
if (abs(previousClosestValue - signalValuesByMagnitude[closestIndex]) <= buffer) {
closestIndex = currentActiveLED;
} else {
previousClosestValue = signalValuesByMagnitude[closestIndex];
}
// Update LEDs to light only the closest one
for (int i = 0; i < numLights; i++) {
if (i == closestIndex) {
digitalWrite(ledPins[i], HIGH); // Turn on the closest matching LED
currentActiveLED = i; // Update the currently active LED
} else {
digitalWrite(ledPins[i], LOW); // Turn off all other LEDs
}
}
}
void controlReadingAndBlinking() {
int blinkSignal = analogRead(analogPin2);
bool blinkState = (blinkSignal > 512); // Simple threshold for blinking
// Check for threshold crossing
if (blinkState && !prevBlinkState) {
readAnalogSignal(); // Read and add new data only once when crossing the threshold
}
prevBlinkState = blinkState; // Update the previous blink state
// Blink the active LED
for (int i = 0; i < numLights; i++) {
if (digitalRead(ledPins[i]) == HIGH) {
digitalWrite(ledPins[i], blinkState ? HIGH : LOW); // Blink the active LED
}
}
}
void setup() {
Serial.begin(250000);
for (int i = 0; i < numLights; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
}
void loop() {
updateLEDs();
controlReadingAndBlinking();
}


- Jul 4, 2024
I bought a multichannel looper last week!
It arrived yesterday, and I could not be happier so far. It's rare that a piece of equipment works exactly as you expect and with no curve balls almost as soon as you start using it, but after like 20 minutes of messing with settings, it just does exactly what I expect it to do. I'm so glad I just... got the thing I wanted instead of something cheaper that would work less well 😅
I've had my eyes on something like this for a while- there's an incredible producer and improv songwriter on Twitch named ARIatHOME (https://www.twitch.tv/ariathome) who uses the RC 505 to make extremely impressive mixes from scratch using midi soundbanks and fx controls.
There is a new value in simplicity. I usually think about songs as a line- A path that starts in one place and rises/falls till it arrives at another place. In this framework, it's easy to see the whole picture and think about how ideas and motifs will develop and change throughout the song...
But a looper is different. Suddenly there is a very real limitation to the way parts can change over time. It's easy to make things grow/layer, but impossible to alter the details after it's been added... Obviously there are some songs that just cant work in this format, but there are others that really can!
I got this tool with the idea of using it to play more live shows, and so far it seems like it will work well for that. I have a few songs that have been in the works for a while that I think could lend themselves well to the limitations of the looper. It's interesting how a tool like this challenges my ideas about how I appreciate simple v.s. complex song structure. Songs that are more repetitive/simple have often felt like a chore to practice and make me roll my eyes when I feel like I haven't come up with a more interesting variation- but suddenly the only things that can be played and made whole in this format are simple things!... come to think of it... often in my songwriting at the piano or guitar, I'll reach for a different voicing or a different way to put energy into a repeated section- perhaps there is a way to keep the simplified core in place and overdub the loop to add harmonic complexity. I wouldn't be able to be as precise as I might if I were using a whole instrument, but there might still be a way to make something satisfying.
I imagine this looper being a very good tool for my live sets with the Moog. I've met a lot of amazing musicians and artists recently, and it's made me realize that there is a ton of value in having something like an analogue synthesizer that sets you apart from the other acts who might come before or after you. We are all artist, we are all making really cool music, but having a pallet of sounds to play with that's so different from the typical acoustic guitar + vocal will really stand out! The RC 505 has a lot of built in FX too. I typically ignore this kind of stuff, but I was looking through the options yesterday and it seems surprisingly robust! The 505 has a fairly simple and dedicated interface to access the FX and modulate them live. The tools themselves are very neutral and appreciable too- simple, effective, standard stuff like Low/highpass filters, Delay, Reverb, pitch modulation... Before I had it in my hands I never saw myself using these, but they honestly might be the key to gluing everything together and making the arc of a song feel complete and interesting. I'm excited to experiment with it more!
- Jun 27, 2024
Updated: Jul 22, 2024

I've been thinking a lot more about what I would want to do in a live show lately.
I know there is virtually no chance I can showcase my mixes in a satisfying way in a live setting- and that's okay! I think live music is a very different type of experience anyway, and it should be treated as such. In a mix, technical, intricate, and tiny details can really shine and bring a song to life- while on stage, sometimes bigger, more decisive movements are easier to get into, and more satisfying for an audience who might only hear your song once.
I've been thinking about what makes a good live show for a long time. (It's probably been percolating in my head since middle school, when I stood on "stage" with 3 other teens every weekend in the methodist church gymnasium as part of my youth group's Praise Band...) In 2021, my friend Lindsay started dragging me (willingly) to Columbus/Cleveland tour stops for various artists she likes who happened to be playing in Ohio.
I've learned a lot from those shows, and I've taken note of things that I think do/ do not work. I could spend the next four paragraphs detail interesting things I've noticed, but that's probably best left as the topic of another post, but I will outline some of the more compelling and relevant lessons I've learned from observing these shows here:
• First and foremost- a show is a show. It's a visual and performative experience as much (or more) than it is auditory. In fact, the sonic experience at a live show can often be quite poor (for both big, and small venues) and there are precious few things a musician on stage can do about it in the moment.
• A synth/keyboard/piano has all the stage presence and charisma of a brick. It simply does not move (which limits the players expressive capability/ presence quite a bit) and playing it live does not showcase the story of sound very well at all. It's sad, but it's true. Even Liberace recognized this reality, and solved the dilemma by covering his piano (and himself) in diamonds. Pianists have been playing keyboards with their toes and elbows for decades to give audiences something to look at and remember. In a band, the guitars, basses, drums, and vocals, all have a lovely and satisfying spectrum of visual articulations to play with. Each note/beat/action is anticipated by an obvious and visible build up which gets released as sound directly proportional to the way the instrument is played. This creates a very satisfying and engaging experience for the audience, even at a distance. Even the greatest, most expressive keyboard player in the world cannot possibly show you the difference between moving their finger 3/4inches very quickly VS very delicately from 50 yards away. The action (the part of the piano that hits the string) is invisible- shoved inside a wooden box. The best (and sometime only) place to appreciate/view the technical and performative aspects of a musician interfacing with a keyboard is from the piano bench, or, with the piano open- staring at it's vibrating guts.
Synthesizers, especially, can seem obscure when presented on stage- the sound they produce appears almost arbitrary and completely disconnected from the instrument. Each switch/button/knob looks almost identical from a distance, and for each parameter the %0 position looks essentially no different from the %100 position (even though the difference in sound might be massive). No one in the audience is really able to expect/ sympathize with the transformation in sound that is going to happen when you twist a knob they can't even see.
So... understanding that a show is a visual and performative experience, and a synth/keyboard does not inherently play to these strengths very well- over the last few years I've been workshopping some ways to make the synth more visible and present on stage: (Of course, I could also simply play guitar, but that's not nearly as exciting, distinct, or memorable- especially at smaller venues where every other act is a solo guitarist/vocalist...)
Inspired by my experiences growing up playing in concert/symphonic band in school, I've experimented with ways to bring a more panoramic acoustic experience to a show using multiple small speakers. The idea is that people in the audience can each hold a different part in their hands, and feel/experience the song differently depending on their proximity to the different parts (like players of a particular instrument in an orchestra). I can use my synth and my computer to record, loop, and route individual tracks in real time. While that's very exciting, it's been logistically challenging- and now that I've started to more intimately understand the organizational flow of a small-mid size event, I've realized that setting up and tearing down something so elaborate might be too cumbersome and disruptive to bring to do all the time. Additionally, this type of song is probably not the only thing I'd want to showcase, so all the setup would be for maybe a 5-10 minute experience, and then probably not used again for the rest of the show? Not ideal.
Another project I've worked on involves designing and programming motorized devices that respond to sound/analog audio signal. I've prototyped an Arduino that listen to the input from an 8th inch audio cable, and translates it into movement of a motor, and it's going pretty well! I've made a lot of progress on this, but it's still a bit buggy, fragile (IE: they're all on breadboards right now), and it's cumbersome to setup and troubleshoot on the fly. I have a lot of ideas for how I might expand this in the future, but in the present, I feel like I've taken it as far as I reasonably can without committing to an enormous investment of time and money. The next steps in this project are going to be a bit expensive and I'm not sure if this is the right time to dive in. (Maybe this is a good candidate for a Kickstarter project?... or something to pursue with a grant? or in an academic institution?)
I've also explored ways to create more visible/unique physical controls that attach to my synth. This has proven much easier to implement- and (since I'm blessed to have access to a 3d printer through my work) relatively easy to produce and iterate. I've gessoed, hand painted, and finished a few dozen funky potentiometer knobs, and they've turned out really well! Some of the more adventurous shapes can really change the way you think about interacting with the instrument. I originally started making these as a way to make it easier to reach/ articulate certain combinations of knobs on my synth with one hand. Some of the knobs can even hold other objects (like small flags, flowers, or whammy bars)- which all stick up out of the synth in a very fun visible way. They really transform the act of rotating a tiny 1 inch knob into something that can be seen (and therefore felt/ anticipated/experienced) an the audience.
As I get more opportunities to play live, I'm excited to start showing these projects off! I'm sure there are many more lessons to learn once things step out of my apartment and into the real world of live music, but I'm excited to see how they evolve!
I've also thought about opening an Etsy store to sell my funky synth knobs. I'm sure there are other musicians who might enjoy them- and beyond synths, there are also guitars, amps, and pedals which all use similar knobs. There are already people out there making colorful knobs, but most are pretty standard shapes, sizes, and colors. None I've found are hand painted, or nearly as unique as the one's I've produced. I feel like there's a lot of room to do something more whimsical in that space, and I bet people would be into it!