Skip to main content

voicelistener

Real-time voice recognition using Whisper or ElevenLabs. Speech detection uses fast RMS energy gating by default; Silero VAD is available as an optional higher-accuracy mode.

Structure

voicelistener/
├── __init__.py
├── __main__.py              # CLI entry point
├── voicelistener.py         # VoiceListener class (audio + VAD + threading)
├── requirements.txt
└── transcribers/
    ├── __init__.py
    ├── whispertranscriber.py      # WhisperTranscriber class
    └── elevenlabstranscriber.py   # ElevenLabsTranscriber class

Installation

pip install voicelistener

CLI usage

# Default (local Whisper)
python -m voicelistener

# ElevenLabs (requires ELEVENLABS_API_KEY env var)
python -m voicelistener --transcriber elevenlabs

Listens to your microphone, detects speech, and prints transcriptions to stdout. Press Ctrl+C to stop.

Flag Default Description
--transcriber whisper Speech-to-text backend (whisper or elevenlabs)

Library usage

from voicelistener import VoiceListener, WhisperTranscriber, ElevenLabsTranscriber

# Local Whisper
transcriber = WhisperTranscriber(model_id="base.en")

# Or ElevenLabs (set ELEVENLABS_API_KEY env var)
# transcriber = ElevenLabsTranscriber(model_id="scribe_v2")

listener = VoiceListener(transcriber=transcriber)

for text in listener:
    print(text)

Callback style

def handle(text):
    print(f"Heard: {text}")

listener = VoiceListener(
    transcriber=WhisperTranscriber(),
    on_transcription=handle,
)
listener.start()

VoiceListener options

Parameter Default Description
transcriber (required) Object with a transcribe(audio) -> str method
silence_timeout_ms 2000 Silence duration (ms) to finalize an utterance
min_utterance_ms 250 Minimum speech length to transcribe
pre_buffer_ms 150 Audio kept before VAD triggers
energy_only True Use RMS energy for speech detection (no torch required); set False to enable Silero VAD
vad_threshold 0.5 Silero VAD confidence threshold (used only when energy_only=False)
energy_threshold 0.005 RMS energy threshold; frames below this are treated as silence
on_transcription None Callback invoked with each transcription
on_speech_start None Callback invoked when speech is detected
on_speech_end None Callback invoked when speech ends (silence timeout)

Custom transcriber

Implement a class with a transcribe method:

class MyTranscriber:
    def transcribe(self, audio):
        # audio is a float32 numpy array at 16kHz
        return "transcribed text"

listener = VoiceListener(transcriber=MyTranscriber())

Metadata

Release files for voicelistener 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for voicelistener 1.0.3
File Size Uploaded Provenance
voicelistener-1.0.3.tar.gz 7.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for voicelistener 1.0.3
File Interpreter ABI Platform
voicelistener-1.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 15.3 kB

Release files / voicelistener-1.0.3.tar.gz

Download URL voicelistener-1.0.3.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
6375f9821ed8b83db8cb31583eafe1a9d6b95e6226587b7f7e3d28dc20289756
BLAKE2b-256 checksum
How to use checksums
c52b85162635f78f6436bb9a7268b5163b6d509782ad4197b274edcf26d48c79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / voicelistener-1.0.3-py3-none-any.whl

Download URL voicelistener-1.0.3-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e95743d1bae9e30d98e570ec854af607bc9c7b2c6a756081fb0170033eb66ca1
BLAKE2b-256 checksum
How to use checksums
0897ce8b0d4a16a4d2e978d67de6de8247c830b7fb31b90edb46a8af21991537
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Security for voicelistener 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page