Specula app icon

Workflow · Flexible monitoring

Send any channel to any output.

A file's channel layout and the speakers on your desk rarely match. Specula puts an N→M routing matrix between the two: send any source channel to any output, trim each route in dB, set its phase, and switch the meters between the raw file and the routed result. Nothing you do here touches the file. When the routing is right, render it to a new one.

macOS N→M routing Per-route gain & phase PRE / POST measure Render to file

7-day trial · one-time purchase · macOS 14+

Specula's output routing matrix: a patch-bay mapping 5.1 source channels to output channels with per-cell gain.
Route any channel anywhere. Rows are outputs, columns are source channels, and every routed cell carries its own gain and phase.

When the file and the room disagree

Where each channel ends up is a decision, and the matrix is where you make it.

A six-channel file lands on a stereo interface and something has to give: it gets folded, or four channels get dropped, or the centre goes to a speaker you don't have. Checking one channel on its own means bouncing a stem. Hearing what a listener on two speakers will hear means a trip back to the DAW.

The matrix puts that mapping under your control, and it applies to playback only. Route, trim, and phase-shift each output, then meter either side of the routing.

RouteSend any source channel to any output, or to several at once, with per-route gain in dB.
SoloPut one channel on both speakers to hear it alone.
FoldCollapse a multichannel file to the stereo pair or the single speaker you actually have in front of you.
MeasurePRE reads the file on disk; POST reads what reaches the speakers after routing and gain.

Working the matrix

Open the matrix, patch it by hand or from a preset, then choose which signal you measure.

1 · Open the Output window
Click the Output pill in the transport bar, press ⌥⌘O, or pick Window → Output Panel. The window holds the device selector (with the channel count next to each name) above the routing matrix, so the channels the matrix targets and the device driving them stay co-located. It's hidden by default and remembers its size and position; routing settings persist for the loaded file.
2 · Route N→M in the matrix
The matrix maps each source channel to one or more outputs with per-route gain trim. In Matrix view (default) each routed cell splits into three zones: an on/off dot, a ϕ glyph that cycles the route's phase through 0°, +90°, −90° and 180° (turns orange when active), and a typeable dB gain, drag a value vertically to adjust ±0.25 dB per pixel, click an unrouted cell to enable it at unity. List view gives one row per output with a source picker and a precise dB field. A silent row or unused source column jumps out at a glance. Your view preference persists across launches.
3 · Or start from a preset
The preset bar applies a complete mapping in one click, filtered to the ones that fit the current file and device channel counts. Default restores the 1:1 identity routing from any state you've experimented into. Basic (any stereo file): L/R, Mono L, L+R to both, Swap L/R. 5.1 downmix (6-ch file): Lo/Ro (BS.775 stereo), 5.1 to Mono. 7.1 downmix (8-ch file): 7.1 to Lo/Ro, 7.1 to 5.1. Test (6-ch file): Ls/Rs solo, C/LFE solo. A preset is a complete replacement, not an overlay: it overwrites every output and mutes the ones it doesn't address.
4 · Measure PRE or POST
A PRE / POST toggle in the Channels sidebar header decides which signal feeds the loudness measurement. PRE is the raw, unrouted file, the loudness of what's on disk, and what you want most of the time. POST measures after routing and gain, so when the matrix has changed the channel count or trimmed a level, the integrated LUFS, true peak, and per-channel readings all describe what the speakers are getting.
5 · Render the routing to a file
When it sounds and measures right, Render to File… (in the Routing section header) turns the routing into a deliverable instead of an audition. Every per-route gain, phase, and ±90° shift is applied exactly as you hear it, computed offline. Only the outputs you've actually routed are written: a 5.1 → stereo fold renders a 2-channel file, not eight channels padded with silence. It saves as a new file (WAV, or CAF when the layout can't be stored in WAV order) and never overwrites the source.
6 · Fix what soloing turned up
Routing a channel to both speakers is often how a problem gets found. Spectral mode (⌘5) then edits multichannel files channel by channel: pick that channel from the channel menu, catch the noise on its spectrogram, and fix it in place. Every other channel is copied through unchanged. See the spectral repair workflow.

What the controls actually do

Gain is summed correctly, not naively. Each source contribution to an output carries its own dB value, so two channels landing on the same speaker are attenuated rather than added at unity into clipping. Where the built-in presets use −3 dB, that is 1/√2, the equal-power gain for summing correlated channels.

The fold-down presets come from the published specification. Lo/Ro is the ITU-R BS.775 stereo downmix: the front channel, plus Center at −3 dB, plus the same-side surround at −3 dB. The 7.1 → Lo/Ro preset extends the same rule to both the side and back surround pairs, so the two surround pairs don't stack up on the front channels.

Phase is four states, and two of them are real shifts. The ϕ control cycles a route through 0°, +90°, −90° and 180°. The 180° state is a plain polarity flip. The ±90° states are a broadband Hilbert transform, a genuine quadrature shift across the whole spectrum rather than an inversion. Any fold-down the presets don't cover is built from these parts and saved to your own preset row.

Any 7.1 channel order is measured correctly. Loudness weighting follows ITU-R BS.1770 applied per channel by identity (front channels at full weight, surrounds at +1.5 dB, LFE excluded), so the integrated-loudness number is right whether a 7.1 file arrives in the standard SMPTE order (L R C LFE Ls Rs Lb Rb) that 7.1 WAV uses or in a different layout such as AAC's C Lc Rc L R Ls Rs LFE. 5.1 and smaller layouts are reordered to canonical order on load, and routing works the same across every layout.

Save a routing, share a routing

Your own patches, recalled in a click and portable between machines.

Above the built-in presets is a Saved row for your own routings. Save captures everything currently in the matrix: every output's sources, gains, and phase settings, under a name you choose; saved presets appear when a file and device with matching channel counts are loaded. Export writes all of them to a Specula Routing Presets JSON file, and Import reads one back, appending any presets not already in your library (deduplicated by ID), so a patch you rely on travels to another machine intact. Right-click a saved preset for Rename, Export (just that one), or Delete. They persist across launches and survive future updates.

A monitor setup that doesn't match the files you get is a routing you set once. A stereo pair with a single sub, or a laptop with built-in speakers only, is one saved preset, recalled from the preset row whenever a file needs it.

The matrix at work

The routing window with a 5.1 to stereo routing set and a Render to File button in the header.
Render the routing to a file. Only the routed outputs are written; the source is never overwritten.
The routing list view with typeable per-contribution dB values and the preset bar above it.
Type exact gains. The list view sets each contribution in dB, with the preset bar above it.
The PRE monitor toggle metering the source channels before routing.
PRE. Meter the source channels before routing.
The POST monitor toggle metering the routed output after the matrix.
POST. Meter the routed output after the matrix.

Monitor on what you have

Put any channel on any speaker, with per-route gain and phase, and measure either side of the routing. Save the patch for next time, or render it to a new file. The loaded file is a read-only input to all of it.