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.

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.
  • DSP toolkit — windowing, STFT, spectrogram, intensity, pitch (autocorrelation + voicing), 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.

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.3.0.tar.gz (608.9 kB view details)

Uploaded Source

Built Distributions

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

sadda-0.3.0-cp313-cp313-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.13Windows x86-64

sadda-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

sadda-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sadda-0.3.0-cp312-cp312-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.12Windows x86-64

sadda-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sadda-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sadda-0.3.0-cp311-cp311-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.11Windows x86-64

sadda-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sadda-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sadda-0.3.0-cp310-cp310-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.10Windows x86-64

sadda-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sadda-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for sadda-0.3.0.tar.gz
Algorithm Hash digest
SHA256 faf223b6e9f018dc45371ed81dd8d1e606419963ce50dbc795a327f9a0b4e4e6
MD5 196936f2caaf01dd86c6e597ff001d73
BLAKE2b-256 4a0b6ad57d2bf794674ba36b48e552d5d1fd55dbacf2c5d78dae1a3a55a4779b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sadda-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 4.5 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.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c5b1d3e00c25d004fa41335a3ac6956abecc8a8e0119e84924a3207c55ee8c70
MD5 acea3d3ef6696e4c461d8ea5febc8fcd
BLAKE2b-256 b4763c3332c8a00398d995bd4576261d6263839621fa8e01b3d9a6f25b7a783b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47a73553437f81ca796c6fc412727ecb118717eb1b3db2ea7e73ef4074cbb51b
MD5 629c6d6ee145365cc6c6d5e66412b654
BLAKE2b-256 0cf1b62f59f4962a3d10d718edcea11439654b0719301a1635a338187ee3284f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ab298d97fdf3a27ab6366b78cc7b46d3dbc50b07e2bce84b192541254739b15
MD5 7a7b2b55bafee317deb1fa6b4149e4bd
BLAKE2b-256 0a6c3f15eb4090c5eb178344dd8d50b559fa5887f2e83b88ebe59a800ea8388c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sadda-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 4.5 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.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8eb2e0abf8ddf48796ae320aaf5ebb11071b8a44719f11777c9908c96edce945
MD5 fbdff7a87e0f690d4058d2a5b7ed18a8
BLAKE2b-256 bb45edffe6f437f6f0afb7ab273f8efdd55a63f5b03877f07802e64b82b07b39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60c5c0000ee73e89c704f702544360d999679d3fe3aa6b09d24fb06addcaf560
MD5 8edf201b83f530678fe5e5ffd81d2d21
BLAKE2b-256 6b62dc1e1e2c65e22f1ea67755add10f2fec085146cf93767037a6fa9512134b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c8b0e5ca0b7114ff7e9ebe3cb8a8baa3e275066ee9b01edb79aed9c56c28b4c
MD5 884f3646463318dd8cf16632e8ec1995
BLAKE2b-256 2a7adff52fa9b62d212c50b834c08921ec1a98628c998ca5cf55cf11b7566ac9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sadda-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 4.5 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.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c7ae3dfa18e539e56718498afd6ff5019340bc1cb302992b54681821718d446b
MD5 c4986eee75ef9eb9b46dbb59788c91fd
BLAKE2b-256 50295c9904bf265dd6eb25fc3c9136c7c8329cf007dc644f9ea174744717c82d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c36e0475ec091ccc965bfc99d021b44352d27d9481a268ebd500fe345216bd6a
MD5 54ea0feb16bd0ee55af4c5f4056973a2
BLAKE2b-256 843304357a9be99c174b073574bdf68f137e7a09c8fa291a7e7ac0cc3af3a35a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6f9c76d785214df95bc4f876fbd45afd45b7da90c1dc35027bc5b1051a9791f
MD5 fe1a6360a09ea4d10a335fdd5672f7a9
BLAKE2b-256 1e0d8143da7399c547151fc188fee0fad42d5234f35f5a4ffb57b208edfc27b0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sadda-0.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 4.5 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.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0f690a2eb1bee3a946a5dbe3e5e167549bcf02f667505ddd83be13dc7458ef4a
MD5 3896addbdb490ebca771f43a22c03bef
BLAKE2b-256 a671345536851b46008e4780cccb5fe20b2a0f473e2114be3c7b26eda668e8b3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 970c3e02207923a96e25872f9dd9870ce88efad85f2c717b72aa177085999bb6
MD5 befed2af0b991f58ff4aecd42d6ddc9b
BLAKE2b-256 c4577af1488b53851fc4a3211366c3038e18bf404640cd5f772fb72259aa7f55

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sadda-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c7d5847c595e986c39067d6646811d21b9f3723c69dfdbdb26a0d22cb30d0eb5
MD5 e07e8df6880661a8b12c6f962a2896a5
BLAKE2b-256 954f5195a22f193e5ebe81b1b941a55ede27970ae69e80a0c58b8d320aed2d56

See more details on using hashes here.

Provenance

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