Skip to content

Recording and replay

cybearde edited this page Oct 10, 2026 · 2 revisions

Recording and replay

Use Start I/Q recording while a source is running. Choose BrowserSDR replay (.cu8 + .json) (the default) for the existing headerless .cu8 binary and required .json sidecar, or SigMF (.sigmf-data + .sigmf-meta) for the exact same CU8 bytes with standards-based SigMF v1.2.6 metadata and a SHA-512 digest. BrowserSDR metadata preserves the selected CW filter and beat tone; older recordings without a beat-tone field remain compatible and use the 600 Hz default. bladeRF uses SigMF ci16_le only: original I/Q words are retained without USRP word swapping or CU8 quantization, and replay restores the Q11 /2048 scale. The detected variant, firmware/FPGA, RX input, gain and RFIC rate/frequency readbacks are retained. Captures use bounded OPFS storage where available and a 32 MiB memory fallback; larger captures download as separate files. Q11 captures are eligible for SigIntAtlas archival, with automatic analysis disabled until downstream Q11 support is established. The format is locked when capture starts. Stopping, capacity, retuning, configuration changes and source failure all pass the completed segment to one preparation owner. Preparation and download requests are reported separately: an anchor click cannot confirm that the browser stored a file.

The prepared pair can be requested as one uncompressed ZIP or as the compatible two separate files. BrowserSDR retains one prepared capture, up to 2 GiB plus 1 MiB metadata, until discard or replacement after a disclosed download request. OPFS availability is checked before capture; failures fall back to 32 MiB memory. ZIP creation is limited to 32 MiB of I/Q plus metadata; larger captures use separate file downloads. Download before reloading or closing the tab: prepared metadata is session-local, and abandoned OPFS captures are cleaned on startup without touching another tab's active capture. Export preparation failures can be retried; failed capture storage is explicitly reported as unrecoverable. Ordinary recordings retain timestamp basenames; survey recordings explicitly use SigMF, safe site/frequency/label/timestamp names and optional GeoJSON position, antenna/site context, detector, claimed modulation/encoding and confidence. Cancelling sequential survey capture preserves completed progress, prepares any partial active segment, and restores the prior channel and volume.

Capture current channel only is optional in Capture & replay. It shifts the selected station to the file's center, filters surrounding signals, and selects an automatic lower I/Q rate in a bounded recording worker before writing, while reception and the live spectrum continue at the source rate. The preview shows channel bandwidth, output samples/s, MB/min and capacity. RTL-SDR and HackRF channel captures use processed signed 8-bit I/Q; bladeRF and USRP use processed signed 16-bit I/Q, with explicit scaling and acquisition/processing provenance. These are processed samples, distinct from the unchanged native recording formats. Both BrowserSDR binary/JSON pairs (.ci8 or .ci16) and SigMF export/import support them. Retuning or changing the captured bandwidth ends a channel recording. Digital decoder minimum rates take precedence over size savings; OFF mode requires full-bandwidth recording. Captures remain bounded by browser storage and the one-hour replay limit. Automated encoding/rate and backend tests cover RTL-SDR, all supported HackRF profiles/rates, bladeRF xA4/xA5/xA9/rates, and the B205 rate profiles; physical device acceptance still requires connected hardware.

The visible 32 MiB in-memory cap is deliberately short: about 16.4 seconds at 1.024 MS/s or 7.0 seconds at 2.4 MS/s. OPFS capture streams to browser storage with a 2 GiB limit. Replay import remains bounded to 32 MiB. The replay loader accepts both legacy BrowserSDR .cu8 + .json pairs and the bounded SigMF subset below. Select the pair format before choosing local files. SigMF metadata does not contain trustworthy demodulator settings, so the UI requires an explicit replay mode and an explicit RF-center or custom-channel choice; annotations, descriptions and frequencies never infer a mode. Replay is paced, ends at EOF, supports stop/restart, uses the same demodulator/analysis path and never requests USB permission.

SigMF import accepts version 1.2.6 conforming .sigmf-data/.sigmf-meta pairs with one complex channel, interleaved cu8 or ci8 I/Q, or ci16_le with a supported explicit BrowserSDR USRP, bladeRF Q11 or processed-channel sample-format description, a constant supported core:sample_rate, constant positive capture frequency, a first capture at sample zero with a UTC timestamp, and at most 32 MiB data plus 1 MiB metadata. SHA-512 is checked when present. Multiple sorted capture segments are accepted when core:global_index yields monotonic, exactly representable missing-sample counts; their timestamps and the exact original metadata text remain attached as provenance. The importer rejects changing frequency, nonzero offsets, headers/trailers, alternate non-conforming datasets, multiple channels, unknown required extensions, undescribed CI16 scaling, unsupported rates/layouts, mismatched hashes, and total replay time above one hour. It never follows core:dataset, DOI, license or other metadata URLs.

BrowserSDR uses the common CU8 convention shared with SignalExplorer: float = (byte - 127.5) / 128, independently for I and Q. This is an application convention, not a normalization mandated by SigMF. Ordinary SigMF cu8 imports use it without changing dataset bytes; BrowserSDR sidecars that explicitly declare either removed older convention are rejected. Free-form gap annotations are not timing evidence: only structured core:global_index changes add elapsed gap time, so an unknown-duration annotation is not silently converted into a duration. Private RF captures are not distributed in this repository. DAB decoding requires at least 2.048 MS/s; a narrower capture can only be inspected using a compatible explicitly selected mode. SigMF metadata is validated automatically against the vendored official v1.2.6 schema; an independent third-party reader check remains pending because no SigMF implementation was installed in the validation environment.

Replay accepts binaries up to 32 MiB with JSON sidecars up to 1 MiB, sample rates from 8,000 to 3,200,000 samples/s plus supported native 4.8, 9.6 and 19.2 MS/s profiles, and a channel that fits the captured passband. Known gap durations are preserved; unknown-duration gaps reset processing without inventing elapsed time. Total replay time including known gaps is limited to one hour. A rejected receiver command closes the session before restart is enabled. BrowserSDR retains sole ownership when USB or audio release fails, blocks a replacement connection, and lets Disconnect retry the failed release. Concurrent disconnect requests share one close operation, and permission or startup that completes after cancellation is closed instead of restoring the session.

Wiki home

Clone this wiki locally