Specula app icon

Workflow · Flexible monitoring

Send any channel to any output.

A file's channel layout and the speakers on the 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 channel meters between the raw file and the routed result. Nothing done 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 meters Render to file

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

Output and Routing on a 5.1 file: the channel meters' PRE and POST switch, and the matrix mapping the six source channels to the device's outputs, each routed cell with its 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 it is made.

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 that is not there. 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 holds that mapping, 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 at hand.
MeterThe channel meters show the file's channels (PRE) or what reaches the speakers after routing and gain (POST). Loudness always measures the file.

Working the matrix

Open the matrix, patch it by hand or from a preset, then choose which side the meters show.

1 · Open Output and Routing
The output device button near the right end of the top bar, ⌥⌘O, or Window › Output and Routing opens the window. It holds the device selector (with the channel count beside each name), the PRE and POST switch for the channel meters, and the routing matrix, so the channels the matrix targets and the device driving them sit together. It remembers its size and position, and routing settings persist for the open 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 it by 0.25 dB per pixel, and 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 an unused source column stands out at a glance, and the view chosen persists across launches. From the keyboard, each cell is a button named for its route, such as L to R Out: the arrow keys step its gain by 1 dB, Return or Space types a value, and VoiceOver reads its state.
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. 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 · Meter PRE or POST
PRE / POST, beside the sidebar's Channels meters and in the Output and Routing window, switches what those meters show, and the Channels group names it. PRE meters the file's own channels. POST meters the routed output after the matrix's gains, so a fold-down shows the levels each speaker gets. The loudness readings and the delivery verdicts always measure the file.
5 · Render the routing to a file
When it sounds and meters 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 it plays, computed offline. Only the routed outputs 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 cannot be stored in WAV order) and refuses any name that would open the source file, another spelling or a hard link included.
6 · Fix what soloing turned up
Routing a channel to both speakers is often how a problem gets found. The Spectral task (⌘6) 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

Each contribution carries its own gain. Every source contribution to an output has its own dB value, so two channels landing on the same speaker are attenuated, not 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 quadrature shift across the whole spectrum. Any fold-down the presets do not cover is built from these parts and saved to the Saved 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

Custom patches, recalled in a click and portable between machines.

Above the built-in presets is a Saved row for custom routings. Save captures everything currently in the matrix: every output's sources, gains, and phase settings, under a chosen name; 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 the library (deduplicated by ID), so a patch 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 does not match the incoming files is a routing set once. A stereo pair with a single sub, or a laptop's built-in speakers, 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 inspector's Channels meters on PRE: the six channels of a 5.1 file.
PRE. Meter the source channels before routing.
The inspector's Channels meters on POST: the routed output, the 5.1 file folded to L and R.
POST. Meter the routed output after the matrix.

Monitor on the speakers at hand

Any channel on any speaker, with per-route gain and phase, and meters on either side of the routing. The patch saves for next time or renders to a new file, and the open file is a read-only input to all of it.