MOPs, Modular Operators

A modular synthesis toolkit built entirely inside TouchDesigner. Audio operators that patch together like Eurorack modules.

v0.1.0 Beta

What is MOPs

Toolkit

MOPs is a modular synthesis toolkit built entirely inside TouchDesigner. MOPs is a growing family of audio operators that work like Eurorack modules: oscillators, filters, envelopes, sequencers, effects, and semi-modular instruments that you patch together to build sound from the ground up. Everything lives natively in TouchDesigner, designed to create sound design or music that speaks the same language as your visuals.

The idea is to make digital synthesis approachable for anyone curious about sound, without sacrificing the depth that lets it grow with you. Start with a single voice and a few patch cables, or dig in and build a full modular rack. And because it's TouchDesigner, MOPs reaches for things only possible here: visual-input operators that turn shapes and textures into sequences and waveforms.

Showcase

04 videos
[ Sound design and sequencing ]
[ Wavetable and control data ]
[ Performing live ]
[ Sound design and sequencing made with POPs ]

Learn MOPs

03 lessons
[ 01 ]

Simple Melodic Network

Click to "+" button or double click to add operators. Hit delete on your keyboard to remove.

The smallest patch in MOPs that plays a melody: a clock, a step sequencer, an oscillator, an amplitude, an envelope, a lowpass filter and an audio out. Try changing the parameters, or adding new operators. Use the Clear All button to start from nothing and the guide to rebuild the network. You can always return to the default state if you get lost.

The operators here have fewer knobs than the real ones, on purpose.Follow the signal from left to right. Hover over the inlets/outlets to read the names.

Clock keeps time and does nothing else. It sends a pulse on every 1/16 note, so at 120 BPM you get eight pulses a second. Nothing else in the patch has an opinion about tempo. Take the clock away and everything stops.

Step Sequencer advances one step per pulse and puts out two different things on two red ports. The gate is a trigger: on/off. The cd is a level: this step's value, held until the next step. Both are control data, which is why both ports and both cables are red, and why both labels contain "cd".

Oscillator is the only operator making sound, and it never stops. Everything after it decides whether you actually hear anything. The sequencer's cd arrives at its pitch input, where 1.0 means exactly one octave up. That is the modular 1 volt per octave convention, and it is literally how Oscillator MOP works: a pitch of 0 gives you the base frequency, 1 gives an octave, and 1/12 gives a semitone.

Envelope turns a trigger into a shape. When a gate arrives its output rises to 1 over the attack time and falls back to 0 over the decay time, exponentially, the way a plucked string decays. In TouchDesigner this is the Simple Env MOP , which fires whenever an incoming signal rises across its threshold.

Amplitude multiplies the audio coming in by whatever its cd input tells it. This is the reason you hear notes instead of a drone, remove it and experiment.

Lowpass Filter removes the frequencies above its cutoff and leaves the ones below. Sweep the cutoff down and a bright saw turns dark. Its cd input lets a control signal push the cutoff around, and the CD Amount slider decides how far.

Audio Out ends the chain. One per patch, so sum your sounds first and then send. If a MOPs patch is ever silent, this is the documented first place to look. Is it on, and is it turned up?

That is the entire rule set. Red is control data, white is audio, and every control data port has "cd" in its label. You can read any MOPs patch with it.

[ 02 ]

Drum Network

One clock, three step sequencers, three drum voices, a mixer and an audio out. Create new patterns by changing the sequences, or use the mixer to take a drum part out and bring it back in. Use the Clear All button to start from nothing and the guide to rebuild the network. You can always return to the default state if you get lost.

Same rules, three voices. This patch has no oscillator, no amplitude and no filter, because a drum voice already has all of that packed inside it. What it does have is more of everything else: one clock driving three separate sequencers, each with its own pattern.

One clock, three sequencers. An operator's output can feed as many inputs as you like, so a single clock keeps all three patterns locked together. They each advance on the same pulse. What differs is which steps have gates on.

Two cables per drum. Each sequencer sends two things to its voice. The cd gate triggers the hit. The cd output sets the velocity.

Kick is a short tone whose pitch drops fast. That drop is the entire trick. Start it 70 Hz above 50 Hz and let it fall in 35 milliseconds and your ear hears a kick drum rather than a beep. Pitch Env controls how far above it starts, Amp Decay controls how long it rings, and the waveform switch moves you from a round sine to a grittier triangle to a harder wavetable body.

Snare / Hat is two voices in one operator, since drums are almost always sequenced as a pair. The snare is a short tuned body mixed with a burst of white noise, and the noise is the snares. The hat is the same noise, filtered much brighter and cut off much faster: a few tens of milliseconds is a closed hat, a few hundred is an open one. It takes four control cables and puts out two separate audio signals.

4ch Mixer is the operator that lets a patch have more than one voice. Four audio inputs, four levels, one output. Balance is real work here.

Audio Out. One per patch, as always. This is exactly the case the MOPs documentation is warning about when it says to sum through a mixer first rather than scattering audio outs around a network.

[ 03 ]

Full Patch

Both earlier patches at once, plus two operators. A stereo delay throws tempo locked echoes off the melody, and two sidechains duck the melody and the hats every time the kick fires, from the kick's gate rather than from its sound. One clock, four sequencers, four voices, one mixer, one audio out. Clear the patch and build your own. With some clever thinking there is an entire song in these operators.

This is the first patch here that sounds like a piece of music rather than a demonstration. The melody chain from the first lesson and the drum network from the second are both running, off the same clock, summed through one mixer.

Stereo Delay repeats the melody, quieter each time, locked to the tempo. Left and Right each hold their own division of the bar: 1/4 is a beat, 1/16 is one sequencer step, and 1/3 and 1/6 are the triplet divisions. Set both sides the same and the echoes sit in the middle. Set them differently, 1/8 against 1/4 is the default here, and the repeats spread out and cross each other. Notice that nothing is patched into it except audio. It follows the clock because it reads the tempo the way every tempo synced thing in TouchDesigner does, from the project's own clock rather than from a cable. Move the BPM and the echoes move with it.

Sidechain ducks whatever passes through it every time a gate arrives, then lets it back up. This is the pumping under almost every dance record, and the thing worth understanding is where its trigger comes from. It is the same gate that fires the kick, not the kick's audio. A real sidechain compressor listens to another signal's loudness and needs a threshold. The trigger version needs neither, and because it is driven by the same red cable as the drum it locks perfectly. Duck sets how far down it goes. Decay sets how long the climb back takes, which is what makes it groove instead of stutter.

Follow the kick sequencer's gate cable. It leaves one red port and arrives in three places: the kick, the melody's sidechain, and the hats' sidechain. One output can feed as many inputs as you like, and this is the patch where that stops being trivia and starts being the arrangement.

Two things about order. The sidechain sits after the delay, so the echoes pump too. Put it before and the delay simply fills back in the gaps the ducking just made. And both sidechains sit before the mixer, because ducking after the sum would duck everything, including the kick that caused it.

Documentation

v0.1.0 Beta

This version is a beta build, released to gather feedback ahead of the official launch. Expect rough edges, and please share anything you run into.

Drag and drop the .tox file into your project's root, then click Install in the Family tab. MOPs is built with TDFam, an open-source TouchDesigner operator-family framework created by Lyell Hintz / dotsimulate and Dan Molnar / function.str, licensed under Apache-2.0. See the included LICENSE and NOTICE files for details. TouchDesigner is a product of Derivative Inc.; MOPs is not affiliated with or endorsed by Derivative.

Once loaded, you can start building your first sound patch. Worked examples are provided in examples.toe, included with MOPs v0.1.0.

A few things to know before you start patching.

Why "CD" (Control Data) and not "CV"?

In Eurorack, modulation is carried by control voltage, an actual electrical voltage moving through a patch cable. Nothing in TouchDesigner is a voltage. Everything here is data: channels of numbers flowing between operators. So "control voltage" would borrow a name that doesn't describe what's actually happening, while "Control Data" does. It keeps the familiar modular concept of one signal shaping another, but names it in terms that make sense inside TouchDesigner, where data, not voltage, is the thing you're patching.

Audio and control data are kept separate

MOPs distinguish two kinds of signal: audio (the sound you hear) and control data (modulation, CD, gates, clocks that shape the sound). There are three cues that tell you which is which, any one of which is enough:

  1. Color. Control data is red (red inputs, red outputs, red operators). Audio is white (white inputs, white outputs, white operators).
  2. Port labels. Every input or output that carries control data has "cd" in its label (CD stands for Control Data). If you see "cd" on a port, it's control data, not audio. Think of a CD connection as a CHOP reference to a specific parameter, except it happens by wiring the ins and outs rather than by writing an expression.
  3. Operator shade. In the operator window, the audio operators are slightly darker than the control-data ones.

Use only one audio out

Don't scatter multiple audio-out operators across your patch. Sum your different sounds first, by running them through a Creative Mixer or a 4-channel Mixer, then send that single mixed signal to one audio out.

If you hear nothing, check the audio out first. Most "no sound" cases come down to the audio out being inactive or turned down. Confirm it's active and the volume is up before looking anywhere else.

The following patches are included in examples.toe:

  1. Simple step-sequenced Oscillator → Amplitude → lowpass Filter. A sequencer driving a single voice through amplitude and filter shaping.
  2. Keyboard into Wavetable OSC. Playing a wavetable oscillator from keyboard input.
  3. 4 Oscillators / 4 phased LFO mixing. Four oscillators modulated by four phase-offset LFOs, summed through a mixer.
  • Kick velocity input doesn't work properly yet.
  • Reverb doesn't work properly. It sounds good on short sounds, but breaks down on longer or sustained signals.
  • Rendering operators can cause FPS drops. If the operator viewer is rendering and your frame rate drops, close the viewer or use the CHOPViewer parameter on the Viewer page to toggle to the traditional CHOP viewer.
  • FPS drops can shift the pitch, and this is normal. Audio in MOPs is tied to the frame rate, so an unstable FPS changes pitch. Keep your project at a fixed FPS to avoid this. Be aware that lowering the FPS lowers the pitch: going from 60 to 30 FPS drops every audio operator by one octave.
  • Multiple step sequencers on the same clock can drift out of sync. When several step sequencers share the same clock (or clock divider), one or more of them can gradually drift so they're no longer on the same step. To realign them, select all the sequencers and trigger their manual reset at the same time, which snaps them back to a common step. For an automatic fix, send a clock signal into each sequencer's reset input so they re-sync on every reset pulse.
  • POPs Sequencer and POPs Oscillator are experimental; they are subject to changes in the future.

Where MOPs is headed:

  • More semi-modular paths. Pre-wired instrument operators, so you can start making sound right away without building a complex patch.
  • POPs and TOPs inputs. More operators that take POPs or TOPs as input to generate control data or audio.
  • Full documentation. Per-operator documentation and a complete family reference.
  • Updated operator descriptions.
  • Operator viewer rendering choice. A toggle between POP rendering and native CHOP rendering for the operator viewer.

Please send any feedback or recommendations through:

Get MOPs on Patreon ↗
[ Next / 05 ] Released Music & Experiments