CHOPs: Channel Operators
Master Channel Operators for audio analysis, LFOs, timers, and routing numerical data to visual parameters.
Channel Operators — CHOPs — handle time-series numerical data. While TOPs deal in images and SOPs deal in geometry, CHOPs deal in numbers that change over time: audio waveforms, oscillating control signals, sensor readings, timer values, and anything else that can be expressed as one or more streams of numbers. Understanding CHOPs is what separates a static visual from a living, breathing, reactive system.
What a Channel Is
A CHOP produces one or more named channels, each containing a series of samples. Think of a channel like a single track in a DAW — a sequence of numerical values indexed over time. By default, TouchDesigner evaluates CHOPs at the project’s timeline sample rate (often 60 samples per second, matching the frame rate), but some CHOPs like Audio File In CHOP operate at audio sample rates (44100 or 48000 Hz).
You can view any CHOP’s waveform by selecting the node and pressing V to open the CHOP Viewer. The viewer shows all channels as coloured waveforms. Hover over a channel to see its current value in the header bar.
Key Generator CHOPs
Constant CHOP outputs a fixed numerical value on one or more named channels. This sounds trivial, but it is the standard way to create a manual control — you put a Constant CHOP, name its channel brightness, and export that channel to the Level TOP’s Brightness parameter. Then, when you want to change the behaviour, you just edit the Constant.
LFO CHOP — Low Frequency Oscillator — outputs a repeating waveform: Sine, Triangle, Square, Ramp Up, or Ramp Down. The Rate parameter controls cycles per second. The Amplitude and Offset parameters shift the output range. A Sine wave at Rate 0.25 completes one full cycle every four seconds. Combine multiple LFO CHOPs with different rates in a Math CHOP for complex, evolving modulation.
Timer CHOP counts time. Set a Duration, press Start, and it outputs a normalized ramp from 0 to 1 over that duration, a done flag, a cycle count, and more. Use it for timed sequences, fade-ins, or anything that should happen once over a set period. The CHOP Execute DAT can react to its onDone event.
Audio File In CHOP loads an audio file and plays it back as two channels: chan1 (left) and chan2 (right) at the audio sample rate. Set Loop to On for continuous playback. You can scrub the Play Position or drive it from a CHOP to create manual DJ-style control.
Audio Device In CHOP captures live audio from a microphone or line input. Select your device from the Device parameter. This is the starting point for all live audio-reactive work.
Math CHOP performs arithmetic on channels. It can add, subtract, multiply, and divide channels against each other or against constants. Crucially, the Range function tab lets you remap a channel from one range to another — for example, mapping audio amplitude (roughly 0–0.8) to a visual parameter range (0.3–1.5) without writing any Python.
Samples Versus Frames
CHOPs operate at sample rate, not necessarily frame rate. The Sample Rate parameter on most CHOPs lets you set how many samples per second the CHOP produces. When you chain CHOPs with different sample rates, TouchDesigner automatically resamples to match. For control signals (LFOs, timers, constants), a sample rate matching the frame rate is efficient. For audio, you want the native 44100 or 48000 Hz rate to preserve waveform fidelity.
Audio Spectrum Analysis
The Audio Spectrum CHOP performs an FFT (Fast Fourier Transform) on its audio input, converting the time-domain waveform into a frequency-domain representation. The output is a series of channels representing amplitude at different frequency bins — bass frequencies on the left, treble on the right.
Connect an Audio Device In CHOP or Audio File In CHOP to the Audio Spectrum CHOP. Set the Smooth parameter to 0.9 to add temporal smoothing so the values don’t jump too abruptly. Now you have a live frequency spectrum as CHOP data.
From there, use Audio Dynamics CHOP to compress and normalise the signal. Its Threshold, Ratio, and Attack/Release parameters work identically to a hardware compressor — it prevents loud peaks from overwhelming quiet passages and makes the reactive effect feel more consistent.
Use a Select CHOP to extract individual frequency bins by index or by name. You can isolate a bass band (channels 0–4), a midrange band (channels 8–16), and a treble band (channels 24+). Rename these channels bass, mid, treble using the Rename parameter.
Exporting Channels to Parameters
The most important workflow in CHOPs is exporting a channel’s value to a TOP or SOP parameter. There are two ways:
- Drag-and-drop: Select the CHOP, then middle-click-drag one of its channel names directly onto a parameter field in another operator’s parameter dialog. TouchDesigner creates an export automatically.
- Python expression: In any parameter field, right-click and choose Expression, then type
op('lfo1')['chan1']to read the current value of channelchan1from the operator namedlfo1.
The export approach is preferred for clean networks — you can see the connection in the network view as a dashed line.
A Full Working Example
Build this animated generative texture network:
- Place an LFO CHOP with Rate 0.15 and Type Sine. This gives a slow oscillation between –1 and 1.
- Add a Math CHOP after it. On the Range tab, set From Range to –1 / 1 and To Range to 0.2 / 0.8. Now the LFO output sweeps between 0.2 and 0.8.
- Place a Noise TOP in your network. In its Transform page, right-click the Translate X parameter and enter the expression
op('math1')['chan1']. The noise texture will now drift horizontally in sync with the LFO. - Add a Blur TOP after the Noise TOP, then a Level TOP to increase contrast.
- Wire the Level TOP to a Null TOP named
OUT.
Play the timeline and watch the noise pattern drift slowly from side to side, driven entirely by the LFO CHOP. Change the LFO’s Rate to speed up or slow down the animation. Plug it into more parameters — Blur Size, Level Brightness, HSV Hue Rotate — to create interlocking, rhythmic motion across your entire visual network.
CHOPs are the nervous system of any TouchDesigner project. Once you understand how to route their channels into parameters, you can drive anything from anything.