Docs/Rack IEM
The in-ear engine
The in-ears are made by a separate program that keeps playing even if Shadow Rack quits or crashes. Here's how it works and what to watch out for.
The in-ear mixes aren't made inside Shadow Rack's window but by a separate background program, the in-ear engine ("Shadow IEM Engine"). That's why the musicians keep hearing their mixes while Shadow Rack restarts. The IEM layer in the app just controls it.
A program of its own#
- It has no window and no Dock icon, and lives inside Shadow Rack's app. It loads no plugins.
- It plays each musician's mix to their output pair, at 48 kHz, through the rack's interface with the rack's buffer – and only on outputs the rack leaves free.
- It adds no latency of its own. Every change – a fader, a source moved, a mode switched – goes through smoothly over 10 ms, so nothing clicks.
- While the app isn't connected to it, the IEM layer shows "STARTING SHADOW IEM...". The app reconnects by itself and starts the engine again if it has to.
When it runs#
- With Rack FX and Rack IEM, the engine starts the first time you open the IEM layer. From then on Shadow Rack starts it at every launch, even if nobody opens the IEM layer.
- With Rack IEM alone, it starts with the app.
- It does not stop when Shadow Rack quits or crashes: in-ear-only sources play on, rack channels go raw, phones keep working. It runs until you log out or restart the Mac. There is no button in the app to stop it.
When Shadow Rack crashes or restarts#
The engine doesn't notice anything except that the rack's processed sound stops arriving. Every rack channel in the in-ears switches at once to its raw input (see below), so nobody loses a channel – they just hear it without its plugins for a moment. When Shadow Rack is back, usually within seconds (see crash safety), it reconnects and the channels go back to POST.
Shadow Rack reopening the last session at start-up never touches the in-ears: the engine keeps its own scene, which may be newer than the one in the session.
POST and RAW#
For every rack channel in the in-ears, Shadow Rack hands the engine the channel's sound after its plugins. The engine picks it up one buffer plus 32 samples later. If it isn't there in time – the rack is late, stopped or gone – the engine plays that channel straight from its interface input instead, delayed by the same amount so the two line up. It stays on raw for at least half a second so it doesn't flap back and forth, then fades back to the processed sound over 10 ms.
| You see | What the musician hears |
|---|---|
| POST (green) | the channel after the rack's plugins |
| RAW (yellow) | the channel straight from the interface, without its plugins |
| ... | the state isn't known yet |
The chip is on the picked source on the MIX page, and the lamp on the channel's tile on the SOURCES page.
- Raw means no EQ, no compression, no plugin gain. A vocal that leans on its chain will sound different, and possibly at a different level.
- Only the first 64 rack channels get a POST feed. Any more are always heard raw.
- The raw sound is lined up with the processed one for rack latencies up to about 128 ms.
When the engine itself crashes#
A small guard starts the engine again after 100 ms, with its whole scene: in a test the in-ears were back about a quarter of a second after the engine was force-quit. If it crashes more than five times in a minute, the guard waits five seconds between tries. Phones reconnect by themselves.
After an update#
The first launch after a Shadow Rack update finds the old engine still running. The app asks it to quit and starts the new one, so the in-ears drop out for about a second, once.
What's saved where#
| What | Where | When |
|---|---|---|
| The live in-ear scene: musicians, sources, places, levels, solos, outputs, modes, ROOM, phone keys | ~/Library/Application Support/Shadow Rack/IEM/Scene.json | 1 second after every change. Written whole or not at all, so a crash never leaves half a file |
| A copy of the in-ears in a session | the session file | on Session > Save, when there is at least one musician or source |
| Which layer and IEM page were open | the app's settings | when changed |
| A phone's key and full-screen choice | on the phone | on the phone |
The same folder holds Engine.log (start, stop and crash lines; at 1 MB it moves to Engine.old.log). See files.
Sessions#
- Session > New clears the in-ears: no musicians, no sources.
- Session > Open replaces the in-ears with the ones saved in the session. A session saved without in-ears leaves them empty.
- Any change you make in the in-ears marks the session edited, so New and Open ask before throwing it away. Changes the musicians make on their phones don't mark it, but they are saved with the session like everything else.
No undo#
⌘Z undoes steps on the rack only. Changes in the in-ears – yours or the musicians' from their phones – can't be undone in this version. Save the session before big changes.
The read-outs#
In the IEM layer, CPU IEM, DROPS and LATENCY in the top bar are the engine's:
- CPU IEM – how much of its time the engine uses. In our test, 37 sources into 8 musicians in 3D took about 7 % of one core; ROOM adds a little.
- DROPS – dropouts of the engine's output since it started. Unlike in the FX layer, a click doesn't reset this count in this version.
- LATENCY – OUT: the buffer plus the interface's output latency. IN: from the interface's inputs.
When it won't play#
The problem shows in red in IEM OUT and on the SOURCES page:
| Text | What to do |
|---|---|
| Shadow Rack has no audio interface | Choose one in Setup > Audio |
| device runs at 44.1 kHz - the in-ear mixes need 48 kHz | Set the interface to 48 kHz |
| device can't run at 48 kHz | Use an interface that can |
| device isn't connected | Check the interface's cable and power |
Something wrong or out of date on this page? Tell us
