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.5.0.tar.gz (2.9 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.5.0-cp313-cp313-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.13Windows x86-64

sadda-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

sadda-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (8.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sadda-0.5.0-cp312-cp312-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.12Windows x86-64

sadda-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sadda-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (8.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sadda-0.5.0-cp311-cp311-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.11Windows x86-64

sadda-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sadda-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (8.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sadda-0.5.0-cp310-cp310-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.10Windows x86-64

sadda-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sadda-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (8.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for sadda-0.5.0.tar.gz
Algorithm Hash digest
SHA256 6c52dc980f737fe4b1bacba07f1ec7aca704aa062f847e3b59252b767b8a6338
MD5 00e09606b7e83cbf16d2af227c142c47
BLAKE2b-256 a87e93123c5600659decc3a56262fa5a91ab26c9727de4ede368816e1de2bcb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sadda-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 8.9 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.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a689f4c2ad7d437293c41b8cee23fd79dd439f152cac73b729f61e117dfa4d41
MD5 786834070a6ab98cf23472db98f90f3e
BLAKE2b-256 2d7496b631b246709c70f0467589331147222a6fc0e88d2b14afa95846f596ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac77d33887b6ed3fd8838a90b611d0643f343fb59512d612a44daa292f8c2404
MD5 95883c496f27eb3b74372b79ad1ecd6a
BLAKE2b-256 d139d108fd119ca5dcca2f3215b6bf48ef72156bbce58558fc32069e390376af

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 140b3b449b0df44f4c951f2304d1e44bb69aeda6fd32f5a27e6ea45bb00813d0
MD5 7e57c5bcdfd3e186216cbdca83e33bf5
BLAKE2b-256 a9364c8b1191b4823a6411f67f3fa4e9e0240243419d26729ecd67b708229c28

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sadda-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 8.9 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.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4fe09d51074902606777ad921af9bf7509d1f00d0274da783186ce734cca8ad4
MD5 884372f7de198700ab0a5ac876195c4f
BLAKE2b-256 d381dee94dc05f02d10c422432ae907a059c1c60e4e2a5b933f0b8e56aa0ffce

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2454e3fb3af2e026e9b1992b11e1f5307f37a2f41ec31ff37660186ab80f97e
MD5 0077b73bee33e496f8f6bb371a0690b1
BLAKE2b-256 35005e494e5bebd7ce2ea8d082f8d5731adf593e7c05746ccda49bf9d5492406

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 24656df88f1c10dc7038fc7e181d45095528fa362687c641fe38fe5aced02822
MD5 c91f13e1310e10edd82d1cf054e66773
BLAKE2b-256 9a528d344db5583d1999ef14db23c03d254043e542aa39e05b7403cae14a9054

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sadda-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 8.9 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.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8065cf1f05ac1dc9b55f40a848ad862c7a1223fc288d0bd3d32e7f9d510d8a5b
MD5 0e902de51e8710ea873317a4834f8cbc
BLAKE2b-256 e7236108135d53b46363f1b6babeb7df9464c58e491b4263e77ccf69a31576c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5148dd8497b1b3656bba749524a126ca7f2b7bfd18d856592e708d202debd757
MD5 0c4a647d71294ae36c529693a0e1de86
BLAKE2b-256 1060017b6dacb946a413f91b5f7540cc7fa216cf9c394770659c2e0e3fb5b9c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae47f2c71d2fb220eb3aec29c6cc74c358e6b86ac4f85ebf77bf135894ce6566
MD5 55dd32ca54f795f5cc63b5306a069d1c
BLAKE2b-256 a0723337c00c35469c7c6cdaf15cc76f7dd15bc6270c71c650193ac4ee0dbc5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sadda-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 8.9 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.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d8702334bbd72b5a70eef7ffd7fbe42a6e3f226d42a5d4a1a565394df93cc441
MD5 23821e4ee0431e2d10115d80dcd5b66a
BLAKE2b-256 6b359b90c9241b5f65edb4eb101e2b59a178dc763f0434f9003364b02dd71b3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cec4837e496ea9210860aa065562b146e14f8c9872a949eac3cf4e32e0d21fe7
MD5 66ab87cc344923669bc4ce2bfc663980
BLAKE2b-256 c1a725010431a44c1dea79084428b1cf114a10a778137644426430cb4cec577c

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sadda-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36951b53f7e2600d875f00cc6103004096df041151d15a817c75e535d75b1028
MD5 f11c337ad2fca6a15c2bb11472f94769
BLAKE2b-256 6f2c15a609e8d6d7f0dd4b07a637edc9fa5f17e90e148fba065eccc3cf32e561

See more details on using hashes here.

Provenance

The following attestation bundles were made for sadda-0.5.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