Skip to main content

Open-source toolkit for phonetics and speech-science research.

Project description

sadda

Sadda (Pali: सद्द) — sound, voice.

An open-source toolkit for phonetics and speech-science research.

The sadda desktop app showing a speech recording as a waveform, a spectrogram, and stacked f0, formant, and intensity measure tracks, alongside a bundle-list sidebar and a reference-distribution panel.

Intended use

sadda is for research, education, and non-diagnostic use only. It is not a medical device and makes no diagnostic, therapeutic, or treatment claims. Its clinical-style measures (jitter, shimmer, HNR, CPP, AVQI, ABI, …) are provided for research and education; they are implemented with validation suites and provenance so a downstream entity could pursue regulatory clearance, but sadda itself is not cleared and takes no liability for clinical decisions made with it. "Research use" by long convention includes clinical-research contexts.

Install

pip install sadda           # core: corpus, DSP, clinical, refdist, recipes
pip install "sadda[ml]"     # also pulls ONNX Runtime — enables VAD + embeddings

Pre-built wheels are available for Linux x86_64, macOS arm64, and Windows x86_64 on Python 3.10–3.13. Other platforms install from sdist; you'll need a Rust toolchain locally.

The [ml] extra adds onnxruntime (~25 MB) so the optional ML features work out-of-the-box; without it those calls raise a clear "ONNX Runtime not available" error instead of crashing. The base install is lean for users who only need acoustics + annotation.

Desktop app

Unsigned bundles for the egui-based desktop app are attached to each v*.*.*-app release on the GitHub Releases page. Each bundle is a single archive containing the app binary plus a sidecar ONNX Runtime — ML features (VAD, embeddings) work without any extra install:

  • sadda-app-linux-x86_64.tar.gz
  • sadda-app-macos-arm64.tar.gz (Apple Silicon)
  • sadda-app-windows-x86_64.zip

Extract the archive and run the binary from the resulting sadda-app-<platform>/ directory — the app picks up the bundled onnxruntime/ automatically.

macOS users will see an "unidentified developer" warning on first launch — right-click → Open to bypass. Proper notarisation lands in 1.0.

The embedded script panel needs Python 3.11 or 3.12 installed on the system. Everything else (waveform, spectrogram, measure-track lanes, tier editing, playback, VAD, refdist overlays) works without Python.

Quickstart

import sadda
from pathlib import Path

proj = sadda.new_project(Path("vowels"), name="vowel-study")
bundle_id = proj.add_bundle("speaker_01", Path("rec01.wav"))

audio = proj.load_audio(bundle_id)
times, freqs, voicing = sadda.dsp.voiced_pitch(audio)

# `import_textgrid` returns the integer tier id(s) it created.
[phones_tier] = proj.import_textgrid(Path("phones.TextGrid"), bundle_id)
df = proj.query(phones_tier)

Full walk-through at the quickstart.

What's in the box

  • Corpus model — projects, bundles, six tier types (interval, point, reference, dense numeric / vector / categorical), parent- child cardinality, append-only audit log.
  • Annotation campaign suite — rubric-as-data + controlled vocabulary, computational criteria that auto-propose annotations, targets / annotator assignment / per-annotator packaging, an inter-annotator agreement engine (Cohen's κ), a QA dashboard, rubric versioning, and a PI lab-notebook.
  • DSP toolkit — windowing, STFT, spectrogram, intensity, pitch (Boersma / YIN / pYIN / SWIPE'), LPC formants, MFCC, LTAS.
  • Clinical measures — jitter (local / RAP / PPQ5), shimmer (local / dB / APQ3 / APQ5), HNR, CPP / CPPS, H1–H2, GNE, and the composite AVQI / ABI dysphonia indices (provisional). Praat- validated where a Praat oracle exists; clean-room from the source publications where one doesn't.
  • Reference distributionssadda.refdist: install + query curated distributions (normative ranges, target zones, observed corpora); pin per-project; publish your own back to the registry.
  • ML inference — bundled Silero VAD plus an embedding-extraction harness for wav2vec2 / Whisper-style ONNX models, via load-dynamic ONNX Runtime. Inference results land as B3-shaped continuous-vector tiers ready for downstream analysis.
  • Interop — Praat TextGrid and ELAN .eaf import/export with documented lossiness and a JSON-sentinel for extra payloads.
  • Live recording — cpal-driven capture with streaming meter / pitch / intensity / formants subscribers; atomic commit into the project.
  • Calibration + provenance — instrument calibration for absolute dB-SPL; every analysis records a processing_run row; bundled citation export for the methods you used.
  • Desktop GUI — egui app with waveform / spectrogram / measure tracks (f0, formants, intensity, VAD), reference-distribution overlays, vowel-space scatter, TextGrid / EAF I/O, live recording, and an embedded Python script panel.
  • Recipeswith sadda.recipe.record(proj, name="..."): links operations to a named record and emits a runnable .py script.

Status by module:

Tier Modules
Stable sadda.corpus, sadda.dsp, top-level project loaders
Stable (clinical) sadda.clinical — clinical-research-use only
Provisional sadda.live, sadda.recipe, sadda.refdist, sadda.ml
Experimental none yet

Documentation

Repository structure

sadda/
├── crates/
│   ├── engine/         Core Rust engine — DSP, corpus, clinical, refdist, ML, I/O
│   ├── python/         PyO3 bindings; built into the `sadda` Python module via maturin
│   ├── app/            Desktop GUI (egui + wgpu)
│   ├── script-engine/  Embedded CPython used by the GUI script panel
│   └── uniffi/         UniFFI bindings for mobile (iOS / Android) — planned for v1.x
├── python/sadda/       Python wrapper around the Rust extension
├── docs/               mkdocs-material site source
├── models-bundled/     First-run-seedable model weights (Silero VAD)
├── refdist-bundled/    First-run-seedable reference distributions
├── DEVLOG.md           Design-decision log
├── CHANGELOG.md        Versioned release history
├── THIRD_PARTY_NOTICES.md  Attributions for bundled third-party binaries
├── Cargo.toml          Rust workspace root
├── pyproject.toml      Python project metadata + maturin config
└── mkdocs.yml          Docs site config

Development

Requirements:

  • Rust stable (managed via rust-toolchain.toml)
  • Python 3.10+
  • uv for Python environment management
# Rust workspace
cargo build
cargo test

# Desktop app (egui + wgpu)
cargo run -p sadda-app

# Python extension + tests
uv sync
uv run pytest python/tests/

# Docs site (auto-rebuilds on save)
uv pip install mkdocs-material "mkdocstrings[python]"
mkdocs serve

The app embeds CPython for the script panel, so its binary links against the libpython PyO3 picked at build time (via the PYO3_PYTHON env var, defaulting to python3 on PATH). If cargo run -p sadda-app fails with error while loading shared libraries: libpython3.X.so.1.0: cannot open shared object file, that libpython isn't on the runtime loader path. Two fixes:

# 1. Put the build-time Python's lib dir on the loader path:
LD_LIBRARY_PATH="$(python3 -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))')" \
    cargo run -p sadda-app

# 2. Or rebuild against a Python whose libpython is already on
#    the loader path (e.g. Ubuntu's /usr/bin/python3):
PYO3_PYTHON=/usr/bin/python3 cargo clean -p sadda-app
PYO3_PYTHON=/usr/bin/python3 cargo run -p sadda-app

Common trigger: conda / miniconda python3 is first on PATH. See crates/script-engine/README.md for the same gotcha at the test layer.

Validation

DSP and clinical measures are validated against authoritative external references — the tool or reference implementation that defines each method (Praat, librosa, OpenAI Whisper, and Camacho's own SWIPE' MATLAB run under Octave). The reference values are committed as small golden files, so the test suite runs fully offline; the external tools are only needed to regenerate a golden. See crates/engine/tests/README.md for the philosophy and which tool produces which golden.

License

Dual-licensed under either of:

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.

AI and human acknowledgement

This project was developed with the assistance of an AI tool (Claude Code, made by Anthropic). Large language models like Claude are trained on large corpora of text and code, which include publicly available source code written by many human developers. While the model does not copy or retrieve specific files when generating suggestions, its capabilities are fundamentally built upon patterns learned from this collective body of human work. We acknowledge that the AI assistance used in this project rests on the contributions of countless developers whose code formed part of that training, even though they cannot be individually credited.

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

sadda-0.4.0.tar.gz (2.8 MB view details)

Uploaded Source

Built Distributions

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

sadda-0.4.0-cp313-cp313-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.13Windows x86-64

sadda-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

sadda-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sadda-0.4.0-cp312-cp312-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.12Windows x86-64

sadda-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sadda-0.4.0-cp312-cp312-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sadda-0.4.0-cp311-cp311-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.11Windows x86-64

sadda-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sadda-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sadda-0.4.0-cp310-cp310-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.10Windows x86-64

sadda-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sadda-0.4.0-cp310-cp310-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file sadda-0.4.0.tar.gz.

File metadata

  • Download URL: sadda-0.4.0.tar.gz
  • Upload date:
  • Size: 2.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sadda-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f783913132d329923ceed4fd03552fd8f90cc24bbfaa350877a2ac0edaea6b5d
MD5 e3bf36c25eff48494f74eb33fbe514bf
BLAKE2b-256 b723151edf0ab1eefcf4a240d34c62215ff114e0fb5ae41b2e871d7748c70aa5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0.tar.gz:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sadda-0.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sadda-0.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 17a3abd2d080556e4e5f98fabe48ee2f0d1bf36e132d653f4eff6cfd4c811a0a
MD5 a3c06e6bd6a168ff14b4866da123ae82
BLAKE2b-256 b7bd948d1a7625f677145bb33cc13ceba22ea42abe5c9a05870500c0a4084fe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4be79319a70a87932fe574a13566b394d91e9adb0a1ef2939d97f66fae3da915
MD5 8956ea13822a48dab7adaa65dff4cd49
BLAKE2b-256 b7d653293ba9ee355931c0a53c72f0d77f611fd58f4c5df2556756fc6349bf74

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcaa7c1ba6f04572f9693b4208d983bc22315bb50ed8a9d1328e08b4aede04a2
MD5 1dd6bd1cb379ddcf1d602c863fd481c7
BLAKE2b-256 7643eef59021a8916133a961d634a77842f0a37ba481140c24c5d2c6993edc96

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sadda-0.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sadda-0.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e6c139438790f30641081ee7516936d9d3d3a4fd73ac0459f6a4e279d2e9b2fa
MD5 0bba9c6a1761ffb2e4c394ceba29e461
BLAKE2b-256 0d3d23e591c230203e10965fbaa175b1376aae2e09f78753d84858f75e63c206

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 544a57672c536b9cd08eb12af2bd664857dfb2c3933ae25528963cb918a9bf6b
MD5 a36ca84502171bbdf7d8e42dce151945
BLAKE2b-256 0d454f7ca8c2a23620c2257e79a2ce900626bd0428804ec145c2c5b919fc8ce0

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ad21ce6f27b1fc42ff0745e155bef814273f706c5a8df3b56ede5cf3861b55e
MD5 11f0eac1ed68d82d7ca518370adce046
BLAKE2b-256 112af8705e82102c15e2f5574fbd92e947be07c33df0a0a4ff6037e746085b11

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sadda-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sadda-0.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 405a15103c76a4684eaff8c96322f24a5472bf7fbf383dbbc17c6114a3e543c1
MD5 61ecdb7838e380cfdc727ad8d0443e25
BLAKE2b-256 e10ff36be6ab6878b3a4451ce5dbcc301376c2a7045fb55a2c4ec6c578c8f2e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aacd02fe75e6032ee2378bfaada3ea8d6df401699792d4c69ad7768efdd520de
MD5 791d84b98a29514e2f866bf16a5a0288
BLAKE2b-256 26fccb280c8644fc476cd2be764644f640cdb74731d7db1aab30d23ccbb0fb69

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d174d8180336f544a5c10c49e50e741548a9e58d3843490d7b465caff53d5376
MD5 692e8d1e8f40dbe06775779bfa16ceca
BLAKE2b-256 a647fbaecf56ae00f70f6e8afd1f7fc876ce528c743d2f7c50c79e392164fb13

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sadda-0.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sadda-0.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1a56680c02bd645e9df92be43884e7e7fd7197a6f1bc8260e4867435cd10f591
MD5 62088962b77d63719610819070f02fb7
BLAKE2b-256 1d8db80d38dfa4375db3d997d930f8ec1d7f6314f5a2152cfc2c54dd7f31622f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp310-cp310-win_amd64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a492b82450f73b5f22c175a7c4f867751242940a15a92250a0b9665c2b5292bb
MD5 c46e552b7c7c138d4d4f768ba1b7e903
BLAKE2b-256 7aa683fdcd29f96c0a59598185dcc855987bc0b736eec3bb3adf77d908dde26b

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on sadda-speech/sadda

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

File details

Details for the file sadda-0.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f69813cd1bc56c1f8eee5427fb2ee1f4b13d39c83a28ea68eb6963cab3bdaee
MD5 a3c548d5f90f85a2044197118cf2807d
BLAKE2b-256 6ba27910587ed3e77a05ef0dde625c30285bcce3ecb70adaa5dc8380945a1901

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.4.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on sadda-speech/sadda

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