Instruction manual
Everything Fulwave Monitor can do, in the order you'll actually use it.
Fulwave Monitor is a monitor router for your Mac: any input on any output, with its own gain at every crosspoint, and a processing chain on every channel. This manual covers choosing devices, building a mix, shaping each channel, recalling presets, and unlocking the demo.
01 Overview
The signal path for every audio block is: device inputs → input processing → crosspoint matrix → output processing → device outputs. You decide what feeds what in the matrix, and what happens to each channel on the way in and on the way out.
That's the whole model. Everything else in the app is about setting up the grid quickly, shaping channels well, and getting back to a mix in one click.
One cell of the grid: the level, in dB, at which one input feeds one output.
The blocks on one input or output channel: filters, EQ, compressor, delay, IIR and trim.
The whole state — levels, master, mute/solo, gangs and every chain — recalled without a click.
A session: every preset, the active one, and your devices — see Sessions & files.
02 Quick start
The fastest way to see how it works is to route something you can hear.
- Install it. Open the disk image and drag Fulwave Monitor to Applications. Open it from there.
- Choose devices. Pick an Input and an Output at the top of the main window. They can be different devices.
- Press Start. macOS asks for microphone access the first time. Allow it: that is how any app reads the inputs of an audio interface. Every input is routed one-to-one to the same-numbered output to begin with, so signal passes straight away.
- Click a cell in the grid and type a level, drag it, or scroll it. Right-click a cell to switch it off and on.
- Press FX on a channel to open its processing window and add a high pass, some EQ or a compressor.
If you only remember one thing: the grid decides what feeds what, the FX button decides what happens to each channel, and presets remember all of it.
03 Demo & license
Fulwave Monitor is free to try, and the demo is the complete app.
The one difference: an unlicensed copy stops processing audio every 15 minutes. Next to Start you'll see DEMO · 14:32 left counting down. When it reaches zero the audio stops and the message “Demo limit reached” appears; your session stays open. Press Start to carry on for another 15 minutes. There is no expiry date.
Unlocking
Buy a license from Fulwave — the Unlock… button next to Start, or Buy a License… in Preferences, opens the store. Your key arrives by email.
- Choose Fulwave Monitor ▸ Settings… (⌘,).
- Paste the key under License and press Activate.
- The limit is lifted at once, even while audio is running. No restart, no second download.
A license works on every Mac you own. To move it, press Deactivate this Mac in the same place; that frees the key for another Mac and returns this one to demo mode.
The key is kept in your Mac's keychain and checked again each time the app opens. If your Mac is offline or the license server can't be reached, a licensed copy stays licensed.
04 Choosing devices
The Input and Output menus list every Core Audio device with its channel count and sample rate.
They can be different devices: Fulwave Monitor joins them with a private aggregate device while it runs (the output is the clock master and the input is drift-compensated) and removes it when you stop.
- The two devices should run at the same sample rate. If they don't, a message appears with a button that switches one to match.
- The pickers are locked while audio runs. Press Rescan after plugging something in.
- Your choices are remembered. If a remembered device isn't connected at launch, the Mac's default is used instead, and the remembered one is picked up again when it returns.
- Under each picker are the device's own mute, volume slider and percentage — the same hardware controls as the Sound settings, and they work while audio runs. They aren't part of any session. Devices that publish no volume (some HDMI outputs, virtual cables) say so.
How big is the grid?
By default the grid follows your devices — a 12-in / 8-out pair gives a 12 × 8 grid, and with no device chosen it shows 16 × 16. The Channels button (next to Rescan) turns that off so you can set up to 64 inputs and 64 outputs by hand. Channels you hide keep their crosspoints, processing and gangs; they simply fall silent and return when the count grows.
05 The crosspoint matrix
Rows are inputs, columns are outputs. Each cell is the level, in dB, at which that input feeds that output. Blue cells carry signal; empty cells are off.
| To… | Do this |
|---|---|
| Select a cell | Click it. Arrow keys move the selection. |
| Set a level by dragging | Press on a cell and drag right or up for louder, left or down for quieter. |
| Set a level by scrolling | Scroll or swipe over the cell. Hold ⌥ for finer steps. |
| Type an exact level | Double-click the cell, or select it and press Return, or just start typing a number. -6, 3.5, -12,5 and +3 dB all work; off turns it off. Return sets it, Esc cancels. |
| Switch a crosspoint off or on | Right-click it (or control-click). It comes back at the level it had before; one that was never on returns at 0 dB. |
| Assign to the master | ⇧-click it. See Master, Mute & Dim. |
The range is off to +12 dB. The row and column your pointer is over are highlighted so you can follow a path across a large grid. Changes are crossfaded over one audio block, so moving a level or recalling a preset never clicks.
Zooming the grid
The grid scales to fill the window. The −/Fit/+ control in the session bar (⌘−, ⌘=, ⌥⌘0 for Fit) adds a 50–200% zoom on top of that, and is remembered. The window can't be made smaller than 1180 × 620; below about 75% scale the grid scrolls instead of shrinking. Scrolling over the matrix itself sets levels, so scroll the grid by its edges or scroll bars.
06 Channels: mute, solo & gangs
Every input row and output column has its own controls.
Silences the channel. Mute always wins over solo.
If any input is soloed, every un-soloed input is silenced. The same goes for outputs.
Skips the channel's whole processing chain and keeps every setting.
Opens the channel's processing window. Green while processing is actually changing the channel.
Ganging into stereo pairs
The link button between two adjacent channels (1+2, 3+4 …) gangs them into a stereo pair. A ganged pair mutes, solos, bypasses and processes together, shares one chain order, and is the only place the stereo HRTF filter works. Pairs can't overlap. Un-ganging removes the HRTF filter, because it can't run on a single channel. A solo on a channel you've hidden doesn't silence the visible ones.
07 Master, Mute & Dim
The master is a single control that moves the crosspoints you choose and leaves the rest alone.
Assigning
⇧-click a crosspoint to assign it; assigned cells are outlined in green. Assign all puts every crosspoint that is carrying signal on the master, and Clear assignments releases them all. Neither moves any level.
An assigned crosspoint remembers its level and where the master was when it was assigned. Afterwards its level is that base plus how far the master has moved, so a custom mix keeps its balance when you turn it up or down as a whole. Un-assigned crosspoints never move.
Mute and Dim
- Mute (⌥⌘M) silences only the assigned crosspoints, without changing any level.
- Dim (⌥⌘D) turns the assigned crosspoints down by a set amount — −20 dB by default, from −1 to −60 dB in the menu beside the button. Undimming restores everything exactly.
- Dimmed cells show their reduced values in orange, and the master shows its dimmed position with a dashed mark where it sits undimmed. If you type a level into a dimmed assigned cell, the number you type is the dimmed value you see.
- Mute wins over Dim.
Master position, assignments, Mute, Dim and the Dim amount are all saved in presets.
08 Channel processing
Press FX on any input or output (or ganged pair) to open its processing window.
| Block | What it does |
|---|---|
| High pass | 24 dB/octave, 20 Hz–2 kHz. |
| EQ | Up to 8 parametric bands (frequency, Q, gain), plus an optional low shelf and high shelf. Click or drag handles on the frequency-response graph, double-click the graph to add a band, or use the chips and fields below it. |
| AGC / compressor | Threshold, ratio, attack, release and makeup gain, with a live transfer curve and a gain-reduction meter. |
| Delay | 0–500 ms. Whole samples are exact; fractions use an allpass. The field shows the delay in samples at the current rate. |
| IIR | A stereo HRTF Explorer filter. Ganged pairs only. See HRTF Explorer filters. |
| Low pass | 24 dB/octave, 1–20 kHz. |
| Trim | −24 to +12 dB. |
The graph at the top of the window shows the combined effect of high pass, EQ and low pass. Double-click any knob to return it to its default.
Order
Blocks run top to bottom in the order shown, and the flow bar under the title shows the same chain (dimmed stages are off). Rearrange by dragging a block's grip onto another block, or with the arrows beside it. Reset order restores the default: high pass, EQ, AGC, delay, IIR, low pass, trim. Filters commute, so the graph doesn't change with order, but AGC, delay and trim are order-sensitive. To set one order everywhere, use Chain order… in the session bar: it applies to all inputs, all outputs, or both, and changes only the order.
Bypass
The B button, or the Bypass checkbox in the processing window, skips a channel's whole chain while keeping every setting. Bypass all FX (the button in the session bar and Control window, or Processing ▸ Bypass All Processing, ⌥⌘B) does it for every channel at once; it isn't saved and is off every time you launch or load a session. A bypassed chain keeps running silently, so its filters and delay lines are ready the instant you come back, and the change is crossfaded over one block so it never clicks.
09 Copying processing between channels
You rarely want to set up the same chain eight times.
- Open the source channel and press Copy to… in its processing window. Choose Whole channel (every block, plus chain order and bypass) or Chosen blocks and check the ones you want.
- Check the destinations. They can be inputs, outputs, or both; All and None are there for each side. A ganged pair is one destination and receives the copy on both channels.
- Press Copy. Or, to copy a single block, use the copy icon in the column beside that block.
Copying replaces the destination's settings for those blocks and leaves its other blocks alone (and, for a block copy, its order and bypass). The stereo IIR filter is only copied to ganged pairs.
Undo and redo
The arrow buttons in the processing window, or Processing ▸ Undo / Redo (⌥⌘Z / ⇧⌥⌘Z), step back through copies. One copy to many channels is one step. The history clears when you switch preset or load a session. Ordinary edits to knobs and handles aren't part of it.
10 HRTF Explorer filters
The IIR block loads a filter set exported from HRTF Explorer as a .h header.
It's a stereo filter, so it runs only on a ganged pair: gang the two channels first, then press Load .h file… in the IIR block. The block shows the file name, whether it is Left/Right or Mid/Side, the header format, each channel's order and delay, and the sample rate it was designed for.
- If the file's design rate differs from the running rate, the block warns you, and the filter isn't applied until the rates match.
- Center trim (about ±645 µs at 48 kHz) starts at the trim the header was exported with and matches HRTF Explorer's own implementation, including one fixed sample of latency on both feeds. Dragging it keeps the filter's state, so it doesn't click.
- The IIR block has its own Bypass checkbox.
11 Presets
A preset holds the whole state: every crosspoint level, the master and its assignments, mute and solo, gangs, and all the processing chains.
Use them to audition alternatives — a speaker feed against a headphone feed, a mix with and without a filter.
- The preset menu in the session bar recalls a preset; recall is click-free. ⌥⌘1–⌥⌘9 recall the first nine.
- Edits write through to the active preset. To branch before experimenting, press Duplicate first (or Presets ▸ New Preset from Current, ⇧⌘P). Rename… and Delete are beside it; the last preset can't be deleted.
- There is no limit to the number of presets. They're saved inside the session file.
12 Sessions & files
A session is a .fwm file holding every preset, which one is active, the eight Control-window pad assignments, and the devices (by identity).
Use File ▸ New (⌘N), Open… (⌘O), Save (⌘S), Save As… (⇧⌘S), Rename Session… and Close Session (⇧⌘W). Double-click a .fwm in Finder to open it here.
- Only one session is open, and only one copy of the app runs. Launching a second copy hands over to the first and quits.
- If audio is running when you open or create a session, the app asks to stop it first. Press Start to run the new session.
- The red dot only closes a window. The session and its audio carry on, so the Control window can be used on its own. Get the main window back with a Dock click or Window ▸ Show Main Window (⌘0).
- Files from older versions keep loading.
13 The Control window
A small window for use while you listen.
It holds the master fader, Mute, Dim, how many crosspoints are on the master (with All / None), and eight preset pads. Open it with the Control button or Window ▸ Show Control Window (⌘9). It scales as you drag its edges.
Compact (or ⌥⌘9) shrinks it to a master knob, Mute, Dim and eight narrow pads. Keep on top floats it over other apps. Both choices are remembered.
14 Meters
Every input and output has a level meter and a latching clip light. Choose the style in Preferences.
| Style | Shows |
|---|---|
| Peak | Sample peak. |
| Peak with hold | Peak plus a hold marker (1, 2 or 5 seconds, or until reset). |
| RMS | RMS level with a peak marker. |
| True peak | 4× oversampled, so it finds overs between samples. It reads about 0.1 dB high in a worst-case test. Computed only while selected. |
The range is 36, 48 or 60 dB. The clip light latches at 0 dBFS (0 dBTP for true peak). Click a meter, or choose Meters ▸ Reset (⌥⌘K), to clear holds and clip lights. The AGC block also has its own gain-reduction meter.
15 Performance
Only the channels in use are processed and metered, so a 12 × 8 grid costs a fraction of a 64 × 64 one.
In a release build with every one of 64 channels running high pass, low pass, three EQ bands, compression and delay, the engine takes about 4% of one core. At large sizes, drawing meters costs more than the audio does. Under Preferences ▸ Performance you can:
- Set the meter refresh rate (10–60 per second). The peak is held between updates, so a transient is never missed.
- Turn the meters off for inputs, outputs or both. A silent 64 × 64 session dropped from about 36% CPU to about 3.5% with both off.
- Skip processing on bypassed channels. This saves work with many channels bypassed, but the first moment after un-bypassing may click once.
The audio thread never waits: if you're mid-edit when a block is due, that block skips strip processing rather than glitching the stream.
16 Keyboard shortcuts
| Shortcut | Action |
|---|---|
| ⌘, | Preferences (license, appearance, meters, performance) |
| ⌘N ⌘O ⌘S ⇧⌘S ⇧⌘W | New, Open, Save, Save As, Close Session |
| ⌘0 / ⌘9 / ⌥⌘9 | Main window / Control window / compact Control window |
| ⌘= ⌘− ⌥⌘0 | Zoom the grid in, out, fit |
| ⌥⌘1–⌥⌘9 | Recall preset 1–9 |
| ⇧⌘P | New preset from the current state |
| ⌥⌘M / ⌥⌘D | Master Mute / Dim |
| ⌥⌘B | Bypass all processing |
| ⌥⌘Z / ⇧⌥⌘Z | Undo / redo a processing copy |
| ⌥⌘K | Reset peak holds and clip lights |
| Arrows, Return, digits | In the grid: move the selection, type a level |
| ⇧-click / right-click a cell | Assign to master / switch the crosspoint off or on |
17 FAQ & troubleshooting
There's no sound after pressing Start.
The sample-rate warning appears.
It says “Demo limit reached.”
My license key is rejected.
The HRTF filter isn't doing anything.
I hear a click when I un-bypass a channel.
Double-clicking a .fwm opens another app.
Does it need extra drivers, or work with virtual devices?
18 Support
Questions, bug reports, or feature requests: fulwavetimer+monitor@gmail.com.
When reporting a problem, tell us your macOS version, your input and output devices, and the sample rate they were running at.
