AI/TLDR

audio.cpp

One native ggml runtime for local audio models — TTS, ASR, voice cloning and conversion, diarization, VAD and separation, with no Python in the loop

Audio, Music & VoiceOpen source
Latest
v0.8.1
Updated
17 Sep 2026
Language
C++
License
Apache-2.0
$brew tap 0xShug0/audio-cpp

What's new

v0.8.117 Sep 2026

YuE2 gained independent AR and NAR LoRA adapters through the CLI and server, with AR LoRA selection in the WebUI. The release also added six model families: Apollo, UniverSR, PulseVAD, Canary 180M Flash, Cohere Transcribe and MOSS-Transcribe-Diarize.

Overview

audio.cpp is a C++ inference framework for audio models built on `ggml`, from the same lineage as llama.cpp and whisper.cpp. Its premise is that running a handful of modern audio models should not mean a handful of Conda environments: instead of each project carrying its own Python stack, they share one native runtime with a common CLI and server surface. It runs on Windows, Linux and macOS across NVIDIA, AMD and Apple Silicon hardware, and on CPU-only machines.

The scope is wider than text-to-speech. The same runtime covers TTS, voice cloning, voice conversion, ASR, diarization, voice-activity detection, source separation, forced alignment, codec-style models, and multi-step workflows through an experimental JSON pipeline format. Built-in audio utilities handle denoise, enhancement, resampling and STFT/ISTFT, so ordinary production-style pre- and post-processing does not need a separate toolchain. Release 0.8.0 (September 2026) put the count at more than 80 model families and 120 model variants.

Correctness is handled explicitly rather than assumed. The project maintains parity tooling that pins a CPU + Python reference path at FP32 with randomness controlled, generates a backend baseline, and gates every change on parity checks — byte-identical output, cosine similarity and log-mel similarity — with a documented rule that refactors, bug fixes and ordinary performance work must preserve byte-identical outputs, and only deep optimisations may justify a controlled baseline reset.

Performance is where it argues for itself. The project publishes per-model speed ratios against each model's official Python implementation for both one-shot runs and long-lived sessions, and says multiple TTS paths run 1.8× to 8× faster than their Python reference paths while cutting end-to-end latency by 45–85% on CUDA. All released families load GGUF, and the project reports tested Q8 packages running up to 1.53× faster with peak VRAM down by around 37% on routes such as Higgs Audio, Fish Audio and Voxtral.

Bar chart titled One-shot showing audio.cpp's speed against each model's official Python implementation across models including ace step, chatterbox, kokoro tts, parakeet tdt, sortformer diar and vevo2; blue bars mark models where audio.cpp is faster, reaching above 13x on parakeet tdt, and orange bars mark the few where it is slower.
One-shot speed against each model's official Python implementation — blue is faster, orange is slower, the dashed line is parity.audio.cpp README ↗
Bar chart titled Long-lived session showing the same model list measured with a reused session; most bars sit between 1x and 3.2x faster than the Python implementation, with a handful — ace step, htdemucs, kokoro tts, marblenet vad, miocodec, parakeet tdt and voxcpm2 — below parity.
The same comparison with a reused, long-lived session, where the gaps narrow.audio.cpp README ↗

A SvelteKit WebUI is compiled into the `audiocpp_server` binary, so the browser interface needs neither Python nor separate frontend files. Its Arena tab queues several local models or GGUF variants against one shared input and compares the outputs with metrics — useful when the question is which of five local TTS models sounds best on your own audio.

What it does

  • One ggml-based native runtime for TTS, voice cloning and conversion, ASR, diarization, VAD, source separation, alignment and codec models — 80+ model families as of release 0.8.0
  • Backends for CUDA, HIP/ROCm, Vulkan, Metal and CPU behind shared CLI (`audiocpp_cli`) and server (`audiocpp_server`) entry points
  • GGUF loading across all released families, with published 16-bit vs Q8 measurements
  • A parity harness that gates changes on byte-identical output plus cosine and log-mel similarity against the Python reference path
Flow diagram of the parity test workflow: establish a CPU + Python FP32 reference, generate a backend baseline on GPU, make a development change, compare against the baseline through parity gates for byte-identical output and cosine and log-mel similarity, then either require strict parity or allow a small parity drop and regenerate the baseline before accepting the change.
The parity workflow every change goes through before a backend result is accepted.audio.cpp README ↗
  • An embedded SvelteKit WebUI inside the server binary, including an Arena tab for side-by-side model comparison with metrics
  • Composite builds — compile only the model families you need (`--model-set custom --models …`) instead of the full set
  • Built-in denoise, enhancement, resampling and STFT/ISTFT utilities, plus experimental JSON pipelines for multi-step workflows

Getting started

Official packages are attached to every release, so there is usually nothing to build. Windows x64 ships CPU, Vulkan and CUDA (12.4 / 13.3) builds, Ubuntu x64 ships CPU and Vulkan, and macOS arm64/x64 ships Metal.

Install on macOS from the Homebrew tap

The tap carries the Metal build.

bashbash
brew tap 0xShug0/audio-cpp
brew trust 0xShug0/audio-cpp
brew install audio-cpp

Or take a prebuilt package from the Releases page

Download the archive for your platform and backend. On Windows the CUDA packages ship the CUDA runtime in a separate `cudart` archive — extract it next to the binaries so the CUDA backend can load `ggml-cuda.dll` along with the cudart, cuBLAS and cuFFT DLLs. Weights come from the project's Hugging Face repo, `audio-cpp/audio.cpp-gguf`, with a ModelScope mirror.

Start the server with its built-in WebUI

The production UI is compiled into `audiocpp_server`, so no Python or frontend files are needed. `--ui-management` turns on catalog browsing, downloads, temporary uploads and dynamic model switching — the quickest way to try things without writing a server config first. Then open http://127.0.0.1:8080.

bashbash
audiocpp_server --ui --ui-management --backend cuda

Build from source if you need a different backend

The helper scripts wrap CMake. Linux needs GCC 13+ and CMake plus the toolchain for your backend (CUDA Toolkit, Vulkan SDK or ROCm); macOS needs Xcode command line tools and CMake, with `xcrun`'s Metal compiler for Metal builds.

bashbash
scripts/build_linux.sh --backend cuda --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend vulkan --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cpu --target audiocpp_cli --target audiocpp_server

Compile only the models you need

`full` is the default and what release and Docker builds should use; `custom` registers only the loaders you name; `core` builds the runtime without the optional model-family set. Same variables through direct CMake as through the scripts.

bashbash
scripts/build_linux.sh --backend cuda --model-set custom \
  --models qwen3_tts,pocket_tts,qwen3_asr --target audiocpp_cli

# or directly through CMake
cmake -S . -B build/debug -DCMAKE_BUILD_TYPE=Debug \
  -DAUDIOCPP_MODEL_SET=custom -DAUDIOCPP_MODELS=qwen3_tts,pocket_tts,qwen3_asr
cmake --build build/debug --target audiocpp_cli -j 8

Commands and code are distilled from the project's own documentation — always check the official repo for the latest.

When to use it

  • Reach for it when several audio models have to ship in one product and you would rather maintain one native runtime than several Python environments
  • Reach for it to run TTS, ASR or diarization on CPU-only or edge machines where a Python stack is not an option
  • Reach for it when you need to pick between local TTS or ASR models — the Arena tab queues them against one shared input and reports metrics
  • Reach for it when VRAM is the constraint and GGUF Q8 packaging buys back headroom without a rewrite

How audio.cpp compares

audio.cpp alongside other open-source audio, music & voice tools AI/TLDR tracks, ranked by GitHub stars.

ToolStarsWhat it does
Whisper★ 109kOpenAI's speech recognition model that transcribes and translates audio across many languages.
GPT-SoVITS★ 62kAn open-source WebUI that clones a voice from a short audio sample and turns text into speech, with zero-shot and few-shot fine-tuning.
Voicebox★ 55.4kLocal-first voice studio that clones a voice from a short sample, generates speech across seven TTS engines and 23 languages, handles system-wide dictation, and speaks for agents over MCP.
VibeVoice★ 54.4kMicrosoft's text-to-speech model for generating long, expressive multi-speaker audio like podcasts.
whisper.cpp★ 53.8kA dependency-free C/C++ port of Whisper built on ggml, running speech recognition on CPU, Metal, CUDA, Vulkan and NPUs from phones to servers.
Coqui TTS★ 46kA library of text-to-speech models including the multilingual XTTS voice-cloning model.
ChatTTS★ 39.9kChatTTS is an open-source text-to-speech model tuned for dialogue, with multi-speaker support and fine-grained control over laughter, pauses, and prosody.
audio.cppOne native ggml runtime for local audio models — TTS, ASR, voice cloning and conversion, diarization, VAD and separation, with no Python in the loop