Recording and playback
| Node | Records | Wire from | Format |
|---|---|---|---|
| Recorder | The Device's full IQ, with an optional pre-roll | Device iq | SigMF |
| Baseband recorder | One channel's filtered IQ | Channel baseband | SigMF |
| Audio recorder | One channel's audio | Channel audio | 48 kHz 16-bit WAV |
| Event output, Recordings | One WAV per call | Channel events | 8 kHz 16-bit WAV |
A SigMF recording is two files: samples in .sigmf-data, frequency, rate, and time in
.sigmf-meta. Keep them together.
Record on a recorder is a switch saved with the workspace. While it is on, the server records whatever is wired in: it follows rewiring, keeps going with the browser closed, and starts again after a restart.
Decoded messages are not recordings. For those, wire events to a Decoder log.
Record IQ
Wire Device iq to a Recorder, press Record, then Stop. On a multi-lane radio the
wired port picks the lane. Wire GPS position to store the location. The sample rate is locked
while recording.
A radio that restarts or drops samples leaves a gap, not an end: the recording goes on, and each gap starts a new capture segment in the metadata. A clean server shutdown finishes open recordings. Killing the process can leave one incomplete.
Record on a schedule or a pass
Wire a Schedule or a Satellite control to a recorder's control, then
press Record to arm it. It records only while the controller says so.
A Schedule holds windows such as 06:00 to 08:00 on weekdays. A stop before the start runs past
midnight, and the same time for both keeps it on all day. Times follow the Zone you set, or
the server's clock. Wire it to a Device's control too and the radio rests outside its windows.
Pre-roll
Catch a signal after it happened:
- Turn Pre-roll on and set Keep, 1 to 120 seconds (default 10).
- The recorder holds that much IQ in memory from then on.
- Record writes the held seconds first, then keeps going live.
- Stop ends the file. The pre-roll keeps running.
The pre-roll belongs to the workspace: switching away lets the radio go, switching back holds it again.
The buffer uses seconds × sample rate × 8 bytes, up to 1 GiB. Memory shows it. The sample
rate is locked while a pre-roll is held. Retuning starts a new segment in the same recording.
Record a channel
Baseband recorder keeps a channel's IQ after filtering and before squelch. The files are much smaller than full Device IQ and can be played back like any other recording. Changing the mode or the Device rate starts a new file. Removing the channel ends it.
Audio recorder keeps what reaches it, after squelch and any Audio FX it is wired behind. Closed squelch writes silence so timing stays intact; Skip silence pauses instead. Mode and rate changes do not stop it. The file stays playable if the server stops mid-recording.
Both recorders take several channels and write one file per wired channel. Each Audio recorder keeps its own files, even when another one records the same channel.
Record each call
Wire a channel's events and audio to an Event output set to Recordings. Every call
becomes its own WAV in the audio library, named by start time (UTC), mode, and frequency:
20261001T223105Z_NFM_144.200MHz.wav
20260815T100000Z_DMR_451.125MHz_TG91.wav
What makes a call:
| Channel | A call is |
|---|---|
| Digital voice, trunk system | One call, from header to end |
| AM, NFM, SSB, DECT | One squelch opening. Gaps under 1.5 s stay in the call |
An analog channel with squelch off has no calls; use the Audio recorder for continuous audio. Calls longer than 10 minutes continue in a new file. Encrypted calls have no audio to save. Several channels can share one Event output. An Event filter between them skips short calls or keeps certain talkgroups. A Spectrum monitor wired here saves its clips the same way.
A call carries its clip on the events wire. Clips are kept only when they reach a Decoder log,
which plays them, or an Event output that keeps them: Recordings, Matrix or a Discord webhook.
Record an array
Rec on an Array records every lane into one SigMF collection: a
.sigmf-collection file that ties one recording per lane together, with the geometry, tier and
noise source windows. Stop ends it. Library → Recordings lists the collection once, with
its lane count.
Press Calibrate while recording. Playback calibrates from the recorded noise windows.
Play a recording
In Library → Recordings, press Open as source. A Device node appears pinned to that recording. Wire it to channels and displays like any other Device, then use play, pause, and seek to decode the same samples again with different settings. A Device node also offers the library itself, under Recording.
A recording made with GPS wired plays its location back too. Wire the Device position to a
Map, or to anything that takes a GPS. The position follows the playhead, also on seek, and the
Device node shows it.
Upload SigMF adds a recording from your computer, as a .sigmf archive or a
.sigmf-meta and .sigmf-data pair. A downloaded array collection uploads whole. An upload may be
up to 16 GiB; archives stream to disk.
Play an array recording
Open a collection as a source. The Device node gets one output per lane, iq to iq5 for
a five-lane array. Press Make array, or wire the outputs to an Array's lanes in order. Set the
Array's geometry as it was when recording. Wire a GPS to the Array's position and add a
processor, such as a Direction finder. Each lane keeps its recorded
frequency, so the Array cannot retune. The Array calibrates on the recorded noise windows; when the
recording ends it keeps the last calibration.
Tags and notes
In Library → Recordings, press the pencil to give a recording a name, comma-separated tags, and a note. Search covers names, tags, and notes. Annotations live in the SigMF metadata, so they travel with the files.
Download
Download IQ as .sigmf, the original archive, or .wav, a stereo float WAV with I and Q as channels. The WAV keeps only the centre frequency and start time from the metadata. An array collection downloads as one SigMF archive with every lane, and has no WAV. A failed download aborts instead of handing you a truncated file.
Where files go
Recordings go to sdrmm/recordings in the platform data folder, with audio in audio/. Change it
with --recordings-dir. Containers use /data/recordings. The library rebuilds itself from the
SigMF files on disk.