Workshop Computer: The Secret Synth Hardware Top Modular Artists Are Switching To
What if your next synthesizer wasn't something you bought—but something you built in an afternoon?
Here's the painful truth keeping thousands of musicians and developers awake at night: modular synthesis hardware is either absurdly expensive, hopelessly closed-source, or requires a PhD in electrical engineering to modify. You've felt this frustration. Staring at a $400 eurorack module, wondering why you can't just flash your own reverb algorithm onto it. Drowning in proprietary SDKs that treat your creativity like a security threat. Watching brilliant ideas die because the barrier between "I have an idea" and "I have a working synth" is a mountain of opaque documentation and NDAs.
But what if there was a programmable synthesizer platform that treated you like a collaborator instead of a customer? A piece of hardware where swapping "program cards" takes seconds, where the starter code actually makes sense, and where a thriving community is already sharing wild experiments?
That hardware exists. It's called the Workshop Computer from Music Thing Modular, and the open-source repository behind it is about to become your new obsession.
What Is the Workshop Computer?
The Workshop Computer is the programmable brain of the Music Thing Workshop System—a compact, open-source synthesizer platform designed by Tom Whitwell, the legendary creator behind Music Thing Modular. If you know anything about the DIY synth world, Whitwell's name carries serious weight. This is the same mind that brought us the Turing Machine, Radio Music, and countless other beloved eurorack modules that blurred the line between instrument and experiment.
The Workshop Computer itself is a Raspberry Pi RP2040-based programmable card system. Think of it as the "game cartridge" model applied to synthesizers: you have the hardware chassis with audio I/O, CV (control voltage) connections, knobs, and buttons—and then you slot in different program cards that completely transform what the machine does. One moment it's a granular sampler; the next, a chaotic drone generator; the next, a MIDI-to-CV converter you wrote yourself.
Why it's trending NOW:
- The RP2040 microcontroller delivers serious processing power (dual-core ARM Cortex-M0+ at 133MHz) at a fraction of the cost of DSP platforms
- The "program card" physical format makes swapping projects instant and satisfying—no firmware reflashing anxiety
- Whitwell's radical openness: full hardware documentation, starter code in four different platforms, and explicit encouragement to share whatever you create
- The Discord community is already exploding with shared projects, from generative sequencers to bizarre audio effects
This isn't another closed ecosystem praying you'll buy their "expansion pack." This is genuinely open hardware in a field notorious for gatekeeping.
Key Features That Make Developers Obsessed
Let's dissect what makes the Workshop Computer a genuinely different beast from anything else on your workbench:
🔧 Quad-Platform Development Freedom
Most hardware forces you into one SDK and dares you to complain. The Workshop Computer ships with starter code for Arduino, Pico SDK, CircuitPython, AND MicroPython. This is unprecedented flexibility. Arduino veterans can iterate fast. Python↗ Bright Coding Blog enthusiasts can prototype in minutes. Bare-metal C coders can squeeze every cycle from the RP2040. You're not learning someone's proprietary framework—you're using tools you already know.
🎛️ Purpose-Built Audio Hardware
The Workshop System chassis provides what synth builders actually need: stereo audio I/O, multiple CV inputs and outputs for eurorack integration, potentiometers and buttons for hands-on control, and USB connectivity for both power and MIDI. The RP2040's PIO (Programmable I/O) peripherals handle precise audio timing without hogging the CPU—critical for low-latency synthesis.
💾 The Program Card Revolution
Physical program cards aren't nostalgia—they're practical workflow magic. Finished a patch? Eject the card, label it, slot in another. No menu diving through 500 presets. No anxiety about overwriting your masterpiece. The card IS the project. For live performers, this means hardware-switching between completely different instruments in under three seconds.
📚 Documentation That Actually Exists
Whitwell maintains a living Google Doc with pinouts and hardware details—no hunting through scattered PDFs. The repository's releases folder contains working and in-progress code from the community. Little leaflets document each card's functionality.
🌐 Community-Driven Development
Whitwell's explicit invitation—"grab numbers & folders in the 'releases' folder by sending pull requests"—creates a meritocratic sharing system. Share your UF2 binary, your source, your documentation, or just a link to your own repo. No artificial barriers.
Use Cases Where the Workshop Computer Absolutely Dominates
1. Rapid Prototyping for Eurorack Modules
Building custom eurorack modules traditionally means spinning PCBs, sourcing obscure components, and praying your analog circuitry doesn't oscillate into smoke. With the Workshop Computer, you can validate your DSP concept in hours: write a wavefolder algorithm, test it with real CV control, iterate based on actual musical results. Only after proving the concept do you commit to custom hardware.
2. Live Performance Instrument Swapping
Imagine this set: you start with a granular texture generator, swap to a west-coast-style complex oscillator for a solo, then drop in a stutter effect processor for the climax. Three entirely different instruments, same hardware, sub-second transitions. The program card format makes this performance-practical in ways software-only solutions never achieve.
3. Teaching Embedded Audio Development
The four-platform support makes the Workshop Computer pedagogically perfect. Beginners start with CircuitPython's gentle learning curve. Intermediate students graduate to Arduino. Advanced developers tackle the Pico SDK. All on identical hardware with identical audio results. Universities and workshops can standardize on one platform while accommodating diverse skill levels.
4. Experimental Music Research
Academic researchers and avant-garde composers need weird tools that don't exist commercially. Non-standard tuning systems? Physically-modeled instruments with impossible geometries? Feedback networks that would crash commercial plugins? The Workshop Computer's open architecture invites genuine sonic research without fighting against "user-friendly" guardrails.
5. Legacy Hardware Emulation
The RP2040's processing power and the system's quality audio I/O enable convincing emulations of vintage digital synths—but with your own twists. Add microtonal scales to a DX7-inspired algorithm. Extend a C64 SID chip emulation with modern modulation sources. The hardware becomes a time machine you can reprogram.
Step-by-Step Installation & Setup Guide
Ready to build your first Workshop Computer program? Here's the complete path from zero to making noise.
Prerequisites
- Workshop System hardware (the chassis with audio I/O and controls)
- Workshop Computer card (RP2040-based program card)
- USB-C cable for power and data
- Computer running Windows, macOS, or Linux
Platform 1: Pico SDK (Recommended for Performance)
The Pico SDK delivers maximum performance and minimal latency. Here's the setup:
# Clone the official Pico SDK repository
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
# Set environment variable (add to your .bashrc or .zshrc)
export PICO_SDK_PATH=/path/to/pico-sdk
# Clone the Workshop Computer repository
git clone https://github.com/TomWhitwell/Workshop_Computer.git
cd Workshop_Computer/Demonstrations+HelloWorlds/PicoSDK
For the most developed experience, use Chris Johnson's ComputerCard library:
# Navigate to the ComputerCard library
cd ComputerCard
# Build the examples
mkdir build
cd build
cmake ..
make
# Hold BOOTSEL on your Workshop Computer, then connect USB
# Drag the generated .uf2 file to the RPI-RP2 drive
Platform 2: Arduino (Fastest to Start)
# Install Arduino IDE 2.0 or newer
# Add the Raspberry Pi Pico board package:
# File → Preferences → Additional Board Manager URLs:
# https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
# Tools → Board → Board Manager → Search "Raspberry Pi Pico"
# Install "Raspberry Pi Pico/RP2040" by Earle F. Philhower, III
# Select Tools → Board → Raspberry Pi RP2040 Boards → "Raspberry Pi Pico"
# Select the correct COM port when your Workshop Computer is connected
Platform 3: CircuitPython (Beginner-Friendly)
# Download the latest CircuitPython UF2 for RP2040 from circuitpython.org
# Hold BOOTSEL, connect USB, drag the CircuitPython UF2 to RPI-RP2
# The Workshop Computer mounts as a USB drive named CIRCUITPY
# Copy code.py and any libraries to this drive
# Code runs immediately on save—no compile step!
Platform 4: MicroPython
# Download MicroPython RP2040 UF2 from micropython.org
# Flash same method as CircuitPython
# Use Thonny IDE (recommended) or mpremote for file transfer
# REPL access over USB serial for interactive development
Hardware Pin Reference
Critical pins for audio and control (from the hardware documentation):
| Function | RP2040 Pin | Notes |
|---|---|---|
| Audio Out L | GPIO 26 (ADC0) | PWM or DAC via external codec |
| Audio Out R | GPIO 27 (ADC1) | PWM or DAC via external codec |
| Audio In | Various | Configurable per program card |
| CV Inputs | Multiple | 0-3.3V range, typically 12-bit ADC |
| Potentiometers | Multiple | Smooth analog control sources |
| Buttons | Multiple | Digital inputs with debouncing |
| LED | GPIO 25 | Onboard LED for status indication |
REAL Code Examples from the Repository
Let's examine actual code from the Workshop Computer repository, with detailed explanations of how synthesis magic happens.
Example 1: Basic Pico SDK Structure (ComputerCard Library)
This foundational pattern from Chris Johnson's ComputerCard library shows the hardware abstraction that makes cross-platform development possible:
#include "ComputerCard.h"
// Create an instance of the ComputerCard class
// This handles all hardware initialization automatically
ComputerCard card;
// Variables for our simple oscillator
float phase = 0.0f;
float frequency = 440.0f; // A4 note
float sampleRate = 48000.0f;
// The audio callback - THIS is where your synthesis happens
// Called automatically at the configured sample rate
void AudioCallback(float *in, float *out, size_t size) {
// Calculate phase increment per sample
// This converts frequency in Hz to normalized phase step
float phaseInc = frequency / sampleRate;
for (size_t i = 0; i < size; i++) {
// Generate sawtooth wave by ramping phase from 0 to 1
phase += phaseInc;
// Wrap phase to stay in valid range (0.0 to 1.0)
// Using subtraction avoids expensive fmod() call
if (phase >= 1.0f) phase -= 1.0f;
// Convert phase to bipolar audio signal (-1.0 to 1.0)
// Sawtooth: ramp up, then instant drop
float sample = phase * 2.0f - 1.0f;
// Write to left and right channels (mono for now)
out[i * 2] = sample; // Left channel
out[i * 2 + 1] = sample; // Right channel
}
}
void setup() {
// Initialize hardware with audio callback
// This configures GPIO, ADC, PWM/DAC, and starts audio ISR
card.Begin(AudioCallback);
}
void loop() {
// Main loop runs at lower priority than audio
// Use this for non-time-critical tasks:
// - Reading potentiometers
// - Processing button presses
// - Updating display or LEDs
// Read CV/pot inputs and update frequency
float knobValue = card.GetKnob(0); // 0.0 to 1.0
frequency = 100.0f + knobValue * 900.0f; // 100Hz to 1000Hz range
delay(1); // Small delay to prevent busy-waiting
}
What's happening here? The AudioCallback runs in an interrupt service routine at 48kHz sample rate—meaning it executes 48,000 times per second, guaranteed. Your loop() runs whenever the CPU has spare cycles. This strict separation between real-time audio and control processing is the secret to glitch-free synthesis. The ComputerCard class abstracts the RP2040's PIO and DMA configuration, so you focus on making sound not configuring timers.
Example 2: Reading Hardware Controls (Arduino-Compatible)
This pattern shows how to map physical controls to synthesis parameters:
#include "ComputerCard.h"
ComputerCard card;
// Parameter state
float cutoffFrequency = 1000.0f;
float resonance = 0.5f;
bool previousButtonState = false;
void setup() {
card.Begin();
Serial.begin(115200); // For debugging over USB
}
void loop() {
// Read analog inputs with smoothing for potentiometer jitter
// GetKnob() returns 0.0-1.0, mapped to useful ranges
float rawCutoff = card.GetKnob(0);
// Exponential mapping: human hearing is logarithmic
// This makes the knob "feel" linear in pitch perception
cutoffFrequency = 20.0f * powf(1000.0f, rawCutoff); // 20Hz to 20kHz
// GetKnob(1) for second parameter
resonance = card.GetKnob(1); // 0.0 to 1.0 directly usable
// Read button with debouncing handled by library
bool buttonPressed = card.GetButton(0);
// Detect rising edge (press, not hold)
if (buttonPressed && !previousButtonState) {
// Toggle some behavior: waveform shape, effect bypass, etc.
Serial.println("Button pressed!");
}
previousButtonState = buttonPressed;
// Read CV inputs for eurorack integration
// These are typically 0-3.3V, may need scaling for ±5V or ±10V standards
float cvInput = card.GetCV(0); // 0.0 to 1.0 representing 0V to 3.3V
// Optional: print debug info at reasonable rate
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 100) {
Serial.printf("Cutoff: %.1f Hz, Res: %.2f, CV: %.3f\n",
cutoffFrequency, resonance, cvInput);
lastPrint = millis();
}
delay(1);
}
Critical insight: The GetKnob() and GetCV() methods handle the analog-to-digital conversion and any necessary scaling. The exponential mapping for frequency is essential—linear potentiometer position mapped to linear frequency sounds wrong to human ears because we perceive pitch logarithmically. This is the kind of psychoacoustic detail that separates professional instruments from amateur hacks.
Example 3: CircuitPython Rapid Prototype
For fastest iteration, CircuitPython lets you edit code directly on the device:
# code.py - runs automatically on Workshop Computer boot
import board
import analogio
import digitalio
import audiopwmio
import audiomixer
import synthio
import time
# Configure audio output using RP2040's PWM audio
# This uses special pins capable of high-frequency PWM
audio = audiopwmio.PWMAudioOut(board.GP26) # Left channel pin
# Create synthesizer with default sample rate
# synthio is CircuitPython's built-in polyphonic synthesizer!
synth = synthio.Synthesizer(sample_rate=48000)
# Create mixer to combine multiple voices
mixer = audiomixer.Mixer(voice_count=2,
sample_rate=48000,
channel_count=2,
bits_per_sample=16,
samples_signed=True)
# Connect synth to mixer, mixer to audio output
mixer.voice[0].play(synth)
audio.play(mixer)
# Configure analog input for potentiometer
# These pins read 0-65535 representing 0-3.3V
knob = analogio.AnalogIn(board.A0) # GP26 as analog input
# Configure button with pull-up resistor
button = digitalio.DigitalInOut(board.GP14)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
# Note frequencies for a pentatonic scale
# Using frequencies that harmonize well together
SCALE = [261.63, 293.66, 329.63, 392.00, 440.00, 523.25] # C major pentatonic
def get_knob_scaled():
"""Read knob and return 0.0 to 1.0 float"""
return knob.value / 65535.0
def get_note_from_knob():
"""Map knob position to scale degree"""
position = get_knob_scaled()
index = int(position * (len(SCALE) - 1))
return SCALE[index]
# Main performance loop
while True:
# Read current knob position and select note
current_note = get_note_from_knob()
# Trigger note when button pressed (LOW because pull-up)
if not button.value:
# Press creates note with envelope: attack, decay, sustain, release
# These values in seconds create a plucky, organic sound
envelope = synthio.Envelope(
attack_time=0.01, # Fast attack for immediate response
decay_time=0.3, # Medium decay
release_time=0.5, # Long release for natural tail
attack_level=1.0, # Full volume at peak
sustain_level=0.3 # Quieter sustain after decay
)
# Create note with sine wave (pure tone)
# Other waveforms: synthio.SquareWave, synthio.SawtoothWave
note = synthio.Note(
frequency=current_note,
envelope=envelope,
waveform=synthio.SineWave()
)
# Press and release creates full envelope shape
synth.press(note)
time.sleep(0.1) # Brief hold
synth.release(note)
# Simple debounce
while not button.value:
time.sleep(0.01)
time.sleep(0.01) # 100Hz control rate is plenty for human interaction
Why this matters: CircuitPython's synthio module provides production-quality polyphonic synthesis with envelopes, multiple waveforms, and LFOs—yet this entire instrument fits in a readable script. The PWMAudioOut uses the RP2040's hardware PWM to generate audio without external DAC. For prototyping, you can hear results in seconds after saving, not minutes after compiling.
Advanced Usage & Best Practices
Optimization Strategies
Use the PIO for timing-critical tasks. The RP2040's Programmable I/O coprocessors handle precise timing independently of the CPU. For custom digital audio protocols or exotic CV generation, learn the PIO assembly—it's worth the investment.
Double-buffer your audio buffers. The ComputerCard library handles this internally, but if writing bare-metal code, always prepare the next buffer while the current one plays. This prevents dropouts during parameter changes.
Profile with GPIO toggling. Set a pin HIGH at buffer start and LOW at end. Measure with oscilloscope to see your CPU headroom. Target <70% utilization for stable operation with margin for parameter spikes.
Pro Tips from the Community
- Start with Arduino, optimize with Pico SDK. Validate your concept in the faster environment, then port for final performance
- Use the Discord actively. Whitwell and experienced builders share undocumented tricks
- Document your cards with the Google Slides template. Consistent documentation helps others build on your work
- Version your releases semantically. The shared
releasesfolder benefits from clear naming
Power Considerations
The Workshop Computer runs from USB power (5V) or eurorack power (typically ±12V regulated down). For noise-sensitive audio applications, isolated USB power or quality eurorack supply beats cheap phone chargers. Digital ground loops are the silent killer of clean synth signals.
Comparison with Alternatives
| Feature | Workshop Computer | Daisy Seed | Teensy 4.1 | Bela | Axoloti |
|---|---|---|---|---|---|
| Price (dev board) | ~$25 (RP2040) | ~$30 | ~$30 | ~$120 | Discontinued |
| Open Source Hardware | ✅ Full | ⚠️ Partial | ❌ No | ⚠️ Partial | ✅ Full |
| Physical Program Cards | ✅ Yes | ❌ No | ❌ No | ❌ No | ❌ No |
| Starter Code Platforms | 4 (Arduino, Pico SDK, CircuitPython, MicroPython) | 2 (Arduino, C++) | 2 (Arduino, C) | 2 (C++, Pd) | 1 (Custom) |
| Community Sharing Model | GitHub PRs, open folder | Forum, scattered | Forum, scattered | Forum, scattered | Was forum |
| Eurorack Integration | ✅ Native design | ⚠️ Requires DIY | ⚠️ Requires DIY | ⚠️ Requires DIY | ⚠️ Requires DIY |
| Documentation Quality | ✅ Living Google Doc, Discord | ⚠️ Varies | ⚠️ Varies | ✅ Good | ⚠️ Aging |
| Creator Pedigree | ✅ Tom Whitwell (Music Thing) | ⚠️ Electrosmith | ⚠️ PJRC | ⚠️ Augmented Instruments | ❌ Defunct |
The verdict? The Workshop Computer wins on integration, openness, and community structure. Daisy Seed and Teensy offer more raw CPU power, but require significant DIY to reach equivalent functionality. Bela's strength is Linux-based flexibility, but at 4x the cost and complexity. For musicians wanting to build and share instruments—not just program them—the Workshop Computer's ecosystem is uniquely coherent.
FAQ
Q: Do I need eurorack to use the Workshop Computer? A: No! The Workshop System is self-contained with headphone and line outputs. Eurorack CV integration is available but optional. Many users treat it as a standalone desktop instrument.
Q: How difficult is the hardware assembly? A: The Workshop System requires basic through-hole soldering. If you can solder a resistor and an IC socket, you can build it. The program cards themselves are typically pre-assembled or use standard RP2040 boards.
Q: Can I use my existing Arduino libraries? A: Yes, with the Earle Philhower Arduino-Pico core, most Arduino libraries work unmodified. Audio-specific libraries may need adaptation for the Workshop Computer's specific pinout.
Q: What's the audio quality? A: 48kHz/16-bit minimum, with paths to higher quality depending on program card design. The hardware supports external audio codecs for professional-grade I/O if your project demands it.
Q: How do I share my creations?
A: Fork the GitHub repository, add your project to an available number in the releases folder, and submit a pull request. Share as much or as little as you're comfortable with—binary, source, documentation, or external links all welcome.
Q: Is this suitable for commercial products? A: The hardware and software are open-source; check specific licenses in the repository. Many builders use Music Thing designs as learning platforms before creating proprietary derivatives. Whitwell's community-focused approach encourages commercial experimentation.
Q: What's the latency? A: Typically <5ms round-trip with optimized Pico SDK code. The RP2040's deterministic timing and lack of operating system overhead enables professional-grade responsiveness impossible on general-purpose computers.
Conclusion: Why the Workshop Computer Deserves Your Immediate Attention
The synthesizer world has been stuck in a false dichotomy: expensive closed boxes versus impenetrable DIY projects that never quite work. The Workshop Computer shatters this paradigm by delivering professional hardware with genuine openness, wrapped in a sharing ecosystem that actually functions.
Tom Whitwell didn't just release another development board. He created infrastructure for musical invention—physical, social, and digital. The program card format makes your projects tangible and performable. The four-platform support respects your existing skills. The community structure ensures your work finds collaborators and users.
I've watched countless "revolutionary" music platforms launch and wither. The Workshop Computer feels different because the incentives align: Whitwell's reputation, the hardware's accessibility, and the community's momentum create genuine network effects. Each new program card makes the platform more valuable for everyone.
Your next step is simple. Visit the Workshop Computer repository, grab the starter code for your preferred platform, and make your first sound within the hour. Whether you're building a commercial product, a personal instrument, or just exploring what synthesis can become, this hardware meets you where you are—and takes you further than you expected.
The future of programmable synthesizers isn't locked in a corporate roadmap. It's being written right now, in open repositories and shared experiments, one program card at a time. Don't watch from the sidelines.