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.3.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.3-cp310-abi3-win_amd64.whl (8.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

decibri-0.4.3-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.3-cp310-abi3-manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

decibri-0.4.3-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.3.tar.gz.

File metadata

  • Download URL: decibri-0.4.3.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.3.tar.gz
Algorithm Hash digest
SHA256 99ce404be0b9d36fe067e65cad5feb0ed471f3410f04872bd57648e259129805
MD5 727b8e76008f5a9026c2717905e36b49
BLAKE2b-256 20f13d4b0b2b21c1895629b2b8affcfbcb5f40265aab3e8f81b4af67936293a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.3.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.3-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: decibri-0.4.3-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.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 71e494636495755ecd531741f24d2892a146b9e042c314b992b5f18fe834d55c
MD5 b5039497ca125f8c477eaf2890b92722
BLAKE2b-256 8e69b3426e45d23334fe7824059fd1fa4265a22ffe5a989ac9ed3394f6881bf4

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.3-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.3-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for decibri-0.4.3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c534b50e9b5b315d545fa1a8e67ee102556e5888fc99d95685777951dbfc1115
MD5 6ad7ca42d8ec4b230a4cc5564bd41861
BLAKE2b-256 fb090ec0dd6004e5322e8b051328339427aa3bf1e7356b7851f7e0fec2ec6cb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.3-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.3-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for decibri-0.4.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 353adaba6e40674af53339a7ed703db6c97f533d3a42a31911ddca632a9fea5e
MD5 6014bf893cb81894fbd8745a51880dcf
BLAKE2b-256 dbc7da86ec43bddca2e4f3b49a50860fd16128d762f6fcfb5dee7816d3cb8112

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.3-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.3-cp310-abi3-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for decibri-0.4.3-cp310-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 10bbf32f69a9a9931dc8028e3b81ba683a990f19a173d90201c6f96fef9e5933
MD5 10a247a433522eb31728dfb3b4d852dd
BLAKE2b-256 98edeac89c72078e0d2f11b6edb67695e8a39106c5ecbf87dd93d0c5f3c6ed5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for decibri-0.4.3-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