Skip to main content

Distributed microphone array processing from ad-hoc consumer device arrays

Project description

relata

Distributed microphone array processing from ad-hoc consumer devices.

Turn N unpositioned phones, laptops, and tablets — whatever is already lying on the table — into a calibrated spatial audio capture system, with real-time source localization, beamforming, and speaker separation.

The name is the Latin plural of relatum: the entities that stand in a relation. The mics are the relata. Their spatial relationships are the relations. Calibration discovers that relational structure, and everything downstream exploits it.


Coming Q3 2026

The full engine is in active development. What it does:

No fixed array. No known geometry. Most spatial audio libraries assume a rigid microphone array whose positions you measured in advance. relata starts from the opposite premise: unknown devices placed anywhere, discovering their own spatial relationships — from a chirp, or from ambient speech alone. Arrays can be in continuous motion (handheld, walking, in a vehicle) and the geometry tracks them.

Everyone gets their own audio. Enhancement returns one isolated stream per detected speaker, not one cleaned-up mixture. Diarization runs two paths at once — spatial (where the voice came from) and neural (whose voice it is) — confidence-weighted against each other, neither subordinated to the other.

Zero-install capture. One device runs the pipeline; the rest join by scanning a QR code and streaming from the browser over WebRTC. No app to install.

Runs on your machine, not someone's cloud. Every neural model in the core pipeline — enhancement, separation, speaker embeddings, voice activity, segmentation — executes as a hand-written numpy forward pass. No PyTorch, no ONNX runtime, no opaque model binaries, no network calls. The architecture is code; the weights are data. Transcription plugs in on top, and runs locally too.

Library first. Embed it in your app, or drive it from the CLI. Not a service you send your audio to.


Available now: the TDOA front-end

This release is a pre-alpha. It ships one working, self-contained piece of the engine — the part that measures how much later a sound reached one mic than another. That delay is the raw geometric signal the whole spatial stack is built on, and it is useful on its own to anyone doing microphone-array work.

It's GCC-PHAT (Generalized Cross-Correlation with Phase Transform) with sub-sample parabolic interpolation and a peak-to-sidelobe confidence score. Pure numpy. No model weights, no compiled extensions, no dependencies beyond numpy itself.

pip install relata
import numpy as np
from relata import compute_gcc_phat, compute_all_tdoas

# One mic pair — recover the time-difference-of-arrival between two signals.
pair = compute_gcc_phat(sig_a, sig_b, sample_rate=16000)
print(pair.tdoa_seconds, pair.confidence)

# Or every pair across a multichannel recording, shaped (n_channels, n_samples).
for pair in compute_all_tdoas(audio, sample_rate=16000):
    print(pair.mic_a, pair.mic_b, pair.tdoa_samples)

Positive TDOA means the signal reached mic_b later than mic_a. Confidence is a normalized peak-to-sidelobe ratio in [0, 1] — low confidence means no source was found, just noise. At 16 kHz, one sample of delay is about 2.1 cm of path difference.

Import paths here are a true subset of the full library's, so code written against this release keeps working as the engine lands.

Requires Python 3.10+.


License

AGPL-3.0-only.

Commercial licensing — an exception to the AGPL, for embedding relata in a proprietary product or running a modified hub as a closed hosted service — is available on request: relata@rian.is.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

relata-0.0.1.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

relata-0.0.1-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file relata-0.0.1.tar.gz.

File metadata

  • Download URL: relata-0.0.1.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for relata-0.0.1.tar.gz
Algorithm Hash digest
SHA256 0179da5c4755821c30d91f7c0934f7fa69f56f3af3be21fc8b4394a622a15583
MD5 59e93cdfdb849b79122016884650430a
BLAKE2b-256 19b70debaf712ba007c414c30f686ed9f76f1a42a025ad0c9587c7310da1fa43

See more details on using hashes here.

Provenance

The following attestation bundles were made for relata-0.0.1.tar.gz:

Publisher: release.yml on rianczerwinski/relata-publish

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file relata-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: relata-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for relata-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb9ce9adc97cb5bb1e867abc6cff2a2142a2fd6e26a597293db589f61f1b4c82
MD5 9b9805417936055a38ce9ade14f8dae1
BLAKE2b-256 e6029115f5930e41edcdf4be16775cec95a1c70fe8732c95df1bdfa69a61f014

See more details on using hashes here.

Provenance

The following attestation bundles were made for relata-0.0.1-py3-none-any.whl:

Publisher: release.yml on rianczerwinski/relata-publish

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page