Skip to main content

Cross-platform audio capture, playback, and voice activity detection

Project description

Decibri

Cross-platform audio capture, playback, and processing for Python.

PyPI version Python versions License

Decibri is a native Python package that delivers microphone capture, speaker output, local voice activity detection, device enumeration, and sample format conversion. It is written in Rust (via PyO3 / abi3) and ships pre-built wheels for Linux, macOS Apple Silicon, and Windows.

Install

Recommended with uv:

uv pip install decibri

Or with pip:

pip install decibri

Quickstart

Capture audio

import decibri

with decibri.Microphone(sample_rate=16000, channels=1) as mic:
    for chunk in mic:
        print(f"Got {len(chunk)} bytes")
        break  # exit after first chunk for demo

Record one second to a WAV file

import decibri

decibri.record_to_file("output.wav", duration_seconds=1.0, sample_rate=16000)

Capture with Silero VAD

import decibri

with decibri.Microphone(sample_rate=16000, vad="silero") as mic:
    for chunk in mic:
        print(f"Got {len(chunk)} bytes; VAD score {mic.vad_score}; speaking={mic.is_speaking}")
        break  # exit after first chunk for demo

Async capture

import asyncio
import decibri

async def main():
    async with await decibri.AsyncMicrophone.open(sample_rate=16000, vad="silero") as mic:
        async for chunk in mic:
            print(f"Got {len(chunk)} bytes; VAD score {mic.vad_score}")
            break  # exit after first chunk for demo

asyncio.run(main())

Speaker output

import decibri

with decibri.Speaker(sample_rate=24000, channels=1) as spk:
    audio_bytes = b"\x00\x00" * 24000  # 1 second of silence at 24kHz int16
    spk.write(audio_bytes)  # int16 PCM
    spk.drain()

Public API

Core classes

  • Microphone: synchronous audio capture
  • Speaker: synchronous audio output
  • AsyncMicrophone: async-await audio capture
  • AsyncSpeaker: async-await audio output

Module-level functions

  • decibri.input_devices(): enumerate available input devices
  • decibri.output_devices(): enumerate available output devices
  • decibri.version(): version + audio backend info
  • decibri.record_to_file(path, duration_seconds, ...): record N seconds to a WAV file
  • decibri.async_record_to_file(path, duration_seconds, ...): async equivalent

Value types

MicrophoneInfo, SpeakerInfo, VersionInfo, Chunk.

Exceptions

The full hierarchy lives at decibri.exceptions. Top-level catch-targets surfaced at the package root:

  • DecibriError: base of the hierarchy
  • DeviceError: input / output device problems
  • OrtError: ONNX Runtime issues
  • OrtPathError: ORT dylib path resolution issues
  • ForkAfterOrtInit: Linux fork-after-ORT-init detection

Voice Activity Detection

Decibri ships with two VAD modes: a lightweight RMS energy threshold (opt-in via vad="energy") and a Silero ONNX model (~2.3 MB, bundled in the wheel; no API keys required).

# Energy mode (lightweight, no model)
mic = decibri.Microphone(vad="energy", vad_threshold=0.01)

# Silero mode (ML-based, more accurate in noisy environments)
mic = decibri.Microphone(vad="silero", vad_threshold=0.5)

Use mic.vad_score (a value in [0, 1]) to gate downstream processing. mic.is_speaking returns the boolean above-threshold view.

Compatibility

Python Platforms
3.10, 3.11, 3.12, 3.13, 3.14 Linux x64, Linux ARM64, macOS Apple Silicon, Windows x64

Bundled assets

The wheel includes:

  • Silero VAD ONNX model (~2.3 MB): no downloads or API keys required for vad="silero".
  • ONNX Runtime dylib (~15-20 MB platform-specific): no system dependency on pip install onnxruntime.

First ORT load on vad="silero" initialization is ~100 to 500 ms (amortized across subsequent calls).

Async usage

For Silero VAD in async code, use the open() factory to dispatch the synchronous ORT init off the event loop:

async with await decibri.AsyncMicrophone.open(vad="silero") as mic:
    async for chunk in mic:
        ...

Synchronous constructors (AsyncMicrophone(...)) remain supported and unchanged; open() is the recommended pattern when ORT load cost matters.

Multiprocessing

Linux multiprocessing with Silero VAD requires set_start_method('spawn'). Calling fork() after ORT initialization raises ForkAfterOrtInit:

import multiprocessing as mp

mp.set_start_method('spawn')  # required on Linux for Silero

See the ecosystem guides under bindings/python/docs/ecosystem/ (jupyter, docker, multiprocessing) for environment-specific details.

Documentation

License

Apache-2.0. See LICENSE for details.

Copyright (c) 2026 Decibri.

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

decibri-0.4.1.tar.gz (2.3 MB view details)

Uploaded Source

Built Distributions

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

decibri-0.4.1-cp310-abi3-win_amd64.whl (8.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

decibri-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

decibri-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

decibri-0.4.1-cp310-abi3-macosx_14_0_arm64.whl (12.3 MB view details)

Uploaded CPython 3.10+macOS 14.0+ ARM64

File details

Details for the file decibri-0.4.1.tar.gz.

File metadata

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

File hashes

Hashes for decibri-0.4.1.tar.gz
Algorithm Hash digest
SHA256 2a86dc22e249369a14b535a9c5a4559fd6144b0c66f08e05a749570e142bd3ea
MD5 98b507611e386e41d64de27ebd09b4d1
BLAKE2b-256 d6086e312cd39488e6a535d2ab288effee4a4a90a51216cd1e6cc25f89dc5f7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.1.tar.gz:

Publisher: publish-pypi.yml on decibri/decibri

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

File details

Details for the file decibri-0.4.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: decibri-0.4.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.1 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 decibri-0.4.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bb3f91bb6a24a9b7998fba2138a81cc56de57464fde02c8842958f373c22c001
MD5 a201351b25ef45a218b410e7cb8898e9
BLAKE2b-256 cb7182daffbb22a8986061b682e73195690dff5af443f85f5c47b11c69ed10a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.1-cp310-abi3-win_amd64.whl:

Publisher: publish-pypi.yml on decibri/decibri

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

File details

Details for the file decibri-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for decibri-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6150dd293ef47ab138b7fa06211376dd01eb4244d216bfd1a27f2de638e3281d
MD5 cb661117c15d2e18753f20a9bdd47fe0
BLAKE2b-256 28d81c86d0eb385cd8198f509044310014fce0bac4abcde62121bb7d1ad8eaca

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on decibri/decibri

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

File details

Details for the file decibri-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for decibri-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 79d3ae00a211928958378229f0803e9947b9eb272c0605e8b1ff085b652166d9
MD5 e9b280a5e8805494483b09e965d9f951
BLAKE2b-256 462781453bb2db04d9a1b7b80e61721d7041d819fc0097bd146bbb475b609f90

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on decibri/decibri

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

File details

Details for the file decibri-0.4.1-cp310-abi3-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for decibri-0.4.1-cp310-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8b138d0178014c736b7541ae38e2475145e48bfa96e27cfe0bcc33e5453d4d2d
MD5 67340406e62f65274ddf8f3f201da7af
BLAKE2b-256 559ea138e690a16e63382fdbdb8f3c027b2a8c987e9066a7980d8d60115b51e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.1-cp310-abi3-macosx_14_0_arm64.whl:

Publisher: publish-pypi.yml on decibri/decibri

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