Skip to main content

voxrt-asr

Streaming speech recognition for Linux x86_64 + aarch64. Custom Rust inference runtime, NeMo FastConformer (32 M parameters), 16 kHz mono PCM in, incremental UTF-8 text out. Cache-aware streaming with ~1.1 s emit cadence.

Runs on modern x86_64 servers (Haswell 2013+, Excavator 2015+) and aarch64 edge devices (Pi 4/5, Jetson, Graviton, industrial SBCs) on a glibc 2.17+ baseline. Measured streaming RTF ≈ 0.06-0.08 on an Intel WSL2 host (500-utterance LibriSpeech test-clean subset).

Companion to voxrt-asr-android (JitPack AAR) and voxrt-asr-ios (Swift Package Manager). Same runtime, same .vxrt model, same decoder schema.

Install

pip install voxrt-asr

One abi3 wheel covers Python 3.9 / 3.10 / 3.11 / 3.12 / 3.13 per arch.

Get the streaming ASR model:

curl -LO https://github.com/VoxRT/voxrt-asr-models/releases/download/v0.1.2/streaming_medium_pc.vxrt

SHA-256: <see-linked-repo>

Quick start — streaming

from voxrt_asr import AsrStreamingEngine, DecodeMode

# RNN-T is the SDK-wide recommended default (higher accuracy).
# Pass DecodeMode.CTC for the ~15 % cheaper head at ~1.6 pp higher WER.
engine = AsrStreamingEngine.from_path(
    "streaming_medium_pc.vxrt",
    mode=DecodeMode.RNNT,
)

for chunk in microphone_iter():        # list[float], 16 kHz mono, any length
    text = engine.push_audio(chunk)
    if text:
        print(text, end="", flush=True)

final = engine.stop()
if final:
    print(final)

Each push_audio returns the incremental text emitted by chunks that completed during that call — often "" until ~1.12 s of audio has accumulated, then a non-empty string every chunk boundary (~1.12 s emit cadence, matching the streaming model's cache-aware step). Concatenate the returned strings yourself if you need the full utterance transcript.

Batch / whole-file transcription

The Linux SDK is streaming-only. To transcribe a pre-recorded file in one shot (SRT / JSON export from a folder of WAVs, dataset labelling, container transcription workers), push the whole buffer through the streaming engine and flush with stop():

from voxrt_asr import AsrStreamingEngine, DecodeMode

engine = AsrStreamingEngine.from_path("streaming_medium_pc.vxrt")
parts = [engine.push_audio(pcm_float32_list)]   # whole file at once
parts.append(engine.stop())
transcript = "".join(parts)

Reuse one engine across files — call reset() between them to clear per-utterance state without reloading the weights.

Audio contract

  • Sample rate: 16 000 Hz. No automatic resampling. Convert from 44.1 / 48 kHz via soundfile.resample, librosa.resample, torchaudio.resample, or an sox / ffmpeg upstream stage.
  • Sample format: list[float] PCM in [-1, 1] (mono, native endian). If you have int16 samples from pyaudio / sounddevice / wave.readframes, divide by 32768.0 first.
  • Buffer size: any. The session buffers internally to its ~17 920-sample chunk boundary and emits text there.
  • Latency: one chunk (~1.12 s) of inherent buffering.

Threading

The engine is a synchronous, stateful function — it does NOT own a worker thread. Each push_audio blocks on the calling thread for the duration of the inference work. Serialise push_audio / stop / reset against each other on a given instance (single-thread-at-a-time per handle). For multi-tenant serving, create one engine per stream — they don't share state and the ~150 MB heap is per-session.

License

Commercial licensing for custom models, additional languages, on-premise fine-tuning, or bulk-device deployments: help@voxrt.com.

Metadata

Release files for voxrt-asr 0.1.2

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

Built distributions (wheels)

Table of built distributions (wheels) for voxrt-asr 0.1.2
File Interpreter ABI Platform
voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details

Total release size: 612.1 kB

Release files / voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 316.3 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
299f15e8c68792100a7a5a25aba623643f915ed1cbe5bedea9e2bf16b8b0bb5e
BLAKE2b-256 checksum
How to use checksums
a1828711854397c47766cdfa63c39066cfab712eddc7879d93675941c223c774
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL voxrt_asr-0.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 295.8 kB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
f754e39cc72ac1c414dc5ebb15b1d4938a1b82fd486cf5d5915a2c2289b594f7
BLAKE2b-256 checksum
How to use checksums
73b225749f596497a341f25cef5654822f763904e23d24c3a93979ae5e80201b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

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