Skip to main content

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

Project description

Decibri

Cross-platform audio capture, output, 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

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

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

mic = decibri.Microphone(sample_rate=16000, vad="silero")
mic.start()
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
mic.stop()

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

spk = decibri.Speaker(sample_rate=24000, channels=1)
spk.start()
spk.write(audio_bytes)  # int16 PCM
spk.drain()
spk.stop()

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

DeviceInfo, OutputDeviceInfo, 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.1.3.tar.gz (2.2 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.1.3-cp310-abi3-win_amd64.whl (8.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

decibri-0.1.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.1.3.tar.gz.

File metadata

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

File hashes

Hashes for decibri-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f3a7502826ebaf9f826a8f55ada15c6db5783cb447b397be19f49d7cbb0bc648
MD5 d079f8647f50bd9725444a12c3039da8
BLAKE2b-256 0b7e7e377908fb2dd77381b4165b3479ce71e28d140a881ca37e8847d27936d1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: decibri-0.1.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.1.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 49fa4e269f4c71da79574b8e8a32a68475d210d19fbbd59c03541b024de32dd3
MD5 496c0bdf25bfeac3dbfec4adcddcd663
BLAKE2b-256 aa5debfae1e993a5cb117f7d4ed28e3d0930160483e38573d0376d411b502d19

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for decibri-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 78ad8602f5e58acc26f8e7956857c253054e660008906624f08799523e730499
MD5 ab325bc9ab70a43ef5de554c784cbf3f
BLAKE2b-256 05562aacec36d511f3f742e4d0b4113291765b6c499d5681d27e67d4e3ea04a2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for decibri-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 42c23f7cd4a35ff0bc144c5bd339f5797dd23aa843c11e8fd164ad23dcfd2d9e
MD5 7c322a68a6b17dab1e917ee14494511d
BLAKE2b-256 a11724804a4eb124b62c25b052b94fb59c116adcb847dcd81852b799c0157005

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for decibri-0.1.3-cp310-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 0c8cb86a5b15834a6a3537d63b488bad5100bd199d54839255a17fc91dd2145b
MD5 4e66b1b8032bfd2bdad5f4d92cc9e324
BLAKE2b-256 9a8fc0e555c2d46b1cf32fa6b061e0b669425b6b9a16792f9d9426dee2a706f2

See more details on using hashes here.

Provenance

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