0xShug0/audio.cpp

An all-in-one, pure C++ inference engine for audio models, powered by ggml. Supports TTS, STT, VAD, voice conversion, music generation, and more, with highly optimized performance. No Python dependency.

2,515

stars

564

commits

C++

primary language

Sep 11, 2026

updated

ai
amd-gpu
apple-silicon
asr
audio
audio-analysis
cpp
edge-ai
ggml
minimax-music3
music-generation
speech-analysis
speech-to-speech
speech-to-text
text-to-speech
tts
voice-cloning
voice-conversion
vulkan

README

audio.cpp

0xShug0/audio.cpp | Trendshift

audio.cpp is a high-performance C++ audio inference framework built on top of ggml, designed to make modern local audio models practical, portable, and fast.

Tired of juggling a dozen Conda environments, hundreds of Python packages, and dependency conflicts just to try a few audio models? audio.cpp gives those paths a shared native runtime instead. Runs on Windows, Linux, and macOS, with support for NVIDIA, AMD, Apple Silicon, and CPU-only machines.

Huggingface main repo: https://huggingface.co/audio-cpp/audio.cpp-gguf

ModelScope repo mirror: https://www.modelscope.cn/models/HereIsMark/audio.cpp-gguf

[!IMPORTANT]

Arena UI: The new Arena tab makes it easier to compare local models side by side for TTS, voice conversion, and ASR. Use one shared input, queue multiple models or GGUF variants, then review outputs with metrics!

CUDA performance headline: multiple TTS paths already run 1.8x to up to 8x faster than their Python reference paths while cutting end-to-end latency by 45%-85%.

GGUF performance: all released model families support GGUF loading, and tested Q8 packages can run up to 1.53x faster while reducing peak VRAM by up to about 37% on routes such as Higgs Audio, Fish Audio, and Voxtral. See the GGUF guide for support status and the Q8 performance report for 16-bit vs Q8 measurements.

Production deployment example: Try Fun-ASR-Nano with audio.cpp on the FunASR platform https://www.funasr.com/en/deploy/audio-cpp.html!

VibeVoice 1.5B: generates a 93.9-minute podcast in 18.2 minutes with 10 diffusion steps and without quantization, running about 5.15x faster than real time.

Supertonic 3: generates about 10 hours of audio in 3 minutes on RTX5090. Up to 200x+ real-time on CUDA, 6x+ real-time on CPU, and 47 ms TTFT in CUDA streaming mode. Demo: 10 hours of audio generated in 3 minutes.

Real-world ASR win: In TranscrIA benchmark on messy French meeting audio, audio.cpp’s Nemotron 3.5 ASR matched the same WER as other implementations while using about 1/4 of the wall time.

It is built for real end-to-end execution rather than one-off model demos: the same runtime powers TTS, voice cloning, voice conversion, ASR, diarization, VAD, source separation, alignment, codec-style models, and higher-level workflows through a common framework surface.

Highlights:

  • Parity. Strong parity tooling against Python reference paths.
  • Performance. Performance-focused execution, reusable sessions, and batch-style offline inference. Optimized for CUDA.
  • Portability. A portable native stack centered on ggml, with CUDA, HIP/ROCm, Vulkan, Metal, and CPU backends behind shared CLI and server entry points instead of Python-only deployment paths.
  • Pipelines. Experimental JSON pipeline support for higher-level multi-step workflows.
  • Audio Utilities. Built-in denoise, enhancement, resampling, and STFT/ISTFT utilities for real production-style task paths.

The goal of the framework is to provide highly optimized, reusable building blocks for audio-related models, so new model integrations can be brought up faster, shared components can be improved once and benefit many families, and real end-to-end inference paths can stay efficient, maintainable, and portable.

audio.cpp would not be moving this quickly without generous contributors bringing in real fixes, new capabilities, and careful polish. See CONTRIBUTING.md for how to contribute and for a shout-out to the people already helping shape the project.

[!TIP] Contribution focus: the most helpful contributions right now are improvements to the UI, API server, and pipeline/workflow subsystems. These areas make the existing model surface easier to use, serve, compose, and validate. See CONTRIBUTING.md for more details.

New model PRs: before starting a new model port, please check the supported model table because several families are already implemented or under testing. New ports should start under the community models surface, where review is lighter than core models but still needs reproducible validation. Please follow the measurement style in PR #19 and PR #63: exact build/run commands, model paths or package ids, generated outputs, parity or path-test results, and relevant performance or memory notes.

News

[!IMPORTANT] 2026-09-04 - Release 0.7.2: This release adds BreezeTTS 2, CosyVoice3, Chatterbox Turbo TTS, Audio8 TTS, and Audio8 ASR, plus the new multipart audio alignment endpoint.

2026-08-26 - Release 0.7: This release adds MiniMax Music 3, MagpieTTS, PersonaPlex, MeanVC2, AudioSR, ControlFoley, FireRedTTS3, FireRedAudio, MiDashengLM-Gen, F5-TTS/Habibi, Granite Speech 5.0 TurboCTC, MMS Forced Aligner, and MOSS-VoiceGenerator, plus DotTTS Edit and ACE-Step 1.5 XL variants, bringing audio.cpp to 62 total model families and 85+ model variants! It also introduces the new Arena UI for side-by-side TTS, voice-conversion, and ASR comparison with shared inputs, queued runs, metrics, and result sorting.

2026-08-13 - Release 0.6: This release adds 5 new model families - DotTTS, NeuTTS, MuScriptor, MiniMax-H3, and SenseVoice - bringing audio.cpp to 49 total model families and 70+ model variants, alongside the new native WebUI from @mirek190, expanded GGUF packaging, and more shared framework runtime pieces.

2026-07-31 - Release 0.5: audio.cpp reaches 44 model families with 9 new additions, early HIP/ROCm support for AMD GPUs, Nix ROCm/HIP build support, Metal optimizations with tested VoxCPM2 runs up to 2.56x faster on Apple Silicon, and a major GGUF-first WebUI/package-spec usability pass.

2026-06-25 to 2026-07-23 (release 0.1 to 0.4): audio.cpp grew from the first released model wave into broad TTS, ASR, music generation, source separation, VAD, diarization, codec, and voice-conversion coverage, with VibeVoice 1.5B/7B, LoRA adapter loading, initial streaming support, and major CUDA Conv1DTransp speedups.

Supported Models

Task tags: TTS text to speech, Clone voice cloning, VC voice conversion, S2S speech-to-speech, ASR speech recognition, Align forced alignment, VAD voice activity detection, Diar speaker diarization, Codec audio codec, Sep source separation, MIDI audio-to-symbolic MIDI/events, Music music/song generation, SFX sound effects, Video video generation, Edit audio/music editing, Design voice design, Dialogue multi-speaker dialogue TTS, Ctrl TTS/clone voice control such as emotion, style, instruction, caption, or non-verbal tag control.

Runtime tags summarize the supported loading paths. GGUF package precision varies by model and release; check the audio.cpp GGUF repo or docs/gguf.md for the exact package list. Bundled means the tiny runtime asset ships under assets/framework/models and needs no separate model download. Stream means the family exposes a streaming server/session path.

Speech Generation And Conversation

FamilyTaskLangVariantsRuntime
breeze_ttsTTS, Clone, Design, Ctrlzh, enBreezeTTS 2 instruction-conditioned TTS and prompt-audio voice cloningGGUF BF16/Q8, Stream
chatterboxTTS, Clone, VCar, da, de, el, en, es, fi, fr, hi, it, ko, ms, nl, no, pl, pt, sv, sw, trChatterbox with 0.5B backboneGGUF 16/Q8
confucius4_ttsClonezh, en, ja, ko, de, fr, es, id, it, th, pt, ru, ms, viConfucius4-TTS multilingual voice cloningGGUF F32, Stream
cosyvoice3TTS, Clonezh, en, ja, ko, de, es, fr, it, ru, yueFun-CosyVoice3 zero-shot, cross-lingual, and instruction-conditioned TTSGGUF F32/Q8
dots_ttsTTS, Clone, Edit, CtrlmultilingualDotTTS SOAR, MeanFlow, and EditGGUF 16/Q8, Stream
dramaboxTTS, CloneenDramaBox expressive TTS and voice cloningGGUF Q8
fish_audioTTS, Clone, Ctrlauto, en, zhFish Audio S2 ProGGUF 16/Q8
firered_audioASR, TTS, Clone, Design, Ctrlzh, enFireRedAudio multimodal speech/audio model with ASR, understanding, cloning, design, and edit pathsGGUF original/Q8
fireredtts3TTS, Clone, Design, Ctrl24 langs + 21 zh dialectsFireRedTTS3 Base and Instruct packages for voice cloning, design, semantic edit, and acoustic editGGUF original/Q8
higgs_audio_ttsTTS, Clone, CtrlautoHiggs Audio v3 TTS 4BGGUF 16/Q8
index_tts2TTS, Clone, Ctrlzh, en, ja, es, arIndexTTS-2, IndexTTS-2.5 (variant)GGUF 16/Q8
irodori_ttsTTS, Clone, Design, CtrljaIrodori-TTS-v4-Small, Irodori-TTS-500M-v3, Irodori-TTS-600M-v3-VoiceDesignGGUF 16/Q8
magpie_ttsTTSar-AE, ar-MSA, ar-SA, de, en, es, fr, hi, it, ko, pt-BR, vi, zhNVIDIA MagpieTTS Multilingual 357M (v2607) with baked speaker prompts and NanoCodec decodeGGUF original/Q8
miottsTTS, Cloneen, jaMioTTS-1.7BGGUF 16/Q8
moss_tts_localTTS, Clone, Ctrlauto, optional language hintMOSS-TTS-Local-Transformer-v1.5GGUF 16/Q8
moss_tts_nanoTTS, CloneautoMOSS-TTS-Nano-100MGGUF 16/Q8
neuttsTTS, CtrlenNeuTTS 2E with built-in speaker prompts and emotion controlGGUF original precision, Stream
omnivoiceTTS, Clone, Design, Ctrl646+ langsOmniVoice, Qwen3-0.6B basedGGUF 16/Q8, Stream
personaplexDialogue, S2SenPersonaPlex 7B v1 speech-to-speech conversational model with packaged voice/persona promptsGGUF Q4/Q8, Stream
pocket_ttsTTS, Cloneen, de, it, pt, esPocketTTS-100MGGUF 16/Q8, Stream
qwen3_ttsTTS, Clone, Design, Ctrlzh, en, fr, de, it, ja, ko, pt, ru, esQwen3-TTS-12Hz-0.6B-Base, Qwen3-TTS-12Hz-1.7B-Base, Qwen3-TTS-12Hz-1.7B-CustomVoice, Qwen3-TTS-12Hz-1.7B-VoiceDesignGGUF 16/Q8
supertonicTTSen, ko, ja, ar, bg, cs, da, de, el, es, et, fi, fr, hi, hr, hu, id, it, lt, lv, nl, pl, pt, ro, ru, sk, sl, sv, tr, uk, vi, naSupertonic 3GGUF F32, Stream
vibevoiceTTS, Dialogueen, zhVibeVoice-1.5B, VibeVoice-7BGGUF 16/Q8
voxcpm2TTS, Clone, Design, Ctrlar, da, de, el, en, es, fi, fr, he, hi, id, it, ja, km, ko, lo, ms, my, nl, no, pl, pt, ru, sv, sw, th, tl, tr, vi, zhVoxCPM2-2B, 48 kHzGGUF 16/Q8, Stream

Speech Recognition And Analysis

FamilyTaskLangVariantsRuntime
citrinet_asrASRenCitrinet-256GGUF Q8
fun_asr_nanoASRauto, zh, en, jaFun-ASR-Nano-2512GGUF 16/Q8
higgs_audio_sttASRenHiggs Audio v3 STTGGUF 16/Q8, Stream
hviske_asrASRdaHviske v5.3GGUF Q8
marblenet_vadVADlang agnosticMarbleNet VADBundled
nemotron_asrASR100+ ASR prompt codes incl. autoNemotron 3.5 ASR Streaming 0.6BGGUF 16/Q8, Stream
qwen3_asrASRzh, en, yue, ar, de, fr, es, pt, id, it, ko, ru, th, vi, ja, tr, hi, ms, nl, sv, da, fi, pl, cs, fil, fa, el, ro, hu, mkQwen3-ASR-0.6B, Qwen3-ASR-1.7B-hfGGUF 16/Q8, Stream
qwen3_forced_alignerAlignzh, yue, en, de, es, fr, it, pt, ru, ko, jaQwen3-ForcedAligner-0.6BGGUF 16/Q8
silero_vadVADlang agnosticSilero VADBundled, Stream
sortformer_diarDiarenSortformer-4spk-v1-
vibevoice_asrASRautoVibeVoice ASRGGUF 16/Q8
voxtral_realtimeASRautoVoxtral-Mini-4B-Realtime-2602GGUF 16/Q8/Q4, Stream

Audio Conversion And Processing

FamilyTaskLangVariantsRuntime
audiosrS2Slang agnosticAudioSR Basic audio super-resolution packageGGUF F32
bs_roformerSeplang agnosticBS-RoFormer vocal separation checkpointsGGUF Q8
controlfoleySFXautoControlFoley 44 kHz multimodal Foley generation from text, video, and reference audio conditioningGGUF F32/Q8
htdemucsSeplang agnosticHTDemucs, HTDemucs_ftGGUF 16/Q8
meanvc2VClang agnosticMeanVC2 120 ms/40 ms zero-shot voice conversionGGUF F32/Q4, Stream
mel_band_roformerSeplang agnosticMel-Band RoFormer MLX vocal separation variantsGGUF 16/Q8
miocodecCodec, VClang agnosticMioCodec v2, 25 Hz, 44.1 kHzGGUF 16/Q8
muscriptorMIDImusicMuScriptor Small audio-to-symbolic transcriptionGGUF F32, Stream
rvcVClang agnosticRVC F16 GGUF with packaged v1/v2 voices and optional retrieval blendingGGUF 16
seed_vcVClang agnosticSeedVC XLS-R + HiFT, SeedVC Whisper-small + BigVGANGGUF 16/Q8

Music, Media, And Editing

FamilyTaskLangVariantsRuntime
ace_stepMusic, Edit50+ langsACE-Step 1.5 Turbo/Base and XL Turbo/SFT with acestep-5Hz-lm-1.7BGGUF 16
heartmulaMusiczh, en, ja, ko, esHeartMuLa-oss-3B with HeartCodec-ossGGUF 16/Q8
midashenglm_genMusic, SFXautoMiDashengLM-Gen structured-prompt generation for speech, music, sound effects, and ambienceGGUF F32/Q8
minimax_h3Video, Music, TTS/DialogueautoMiniMax-H3 Q4_K with optional INT8 ConvRot DiTGGUF Q4/INT8
minimax_music3MusicautoMiniMax Music 3 text-to-music generation with lyrics conditioningGGUF Q4/Q8
stable_audioMusic, SFX, EditenStable Audio 3 Small Music, Stable Audio 3 Small SFX, Stable Audio 3 MediumGGUF 16/Q8
vevo2TTS, Music, VC, Editen, zhVevo2 with Qwen2.5-0.5B AR modelGGUF 16

Some model families in the supported table started as outside contributions before being promoted into the core release surface. Thanks to Mirek @mirek190 for BS-RoFormer, @justinjohn0306 for MOSS-TTS-Local, and @LauraGPT from the official FunASR team for Fun-ASR-Nano.

Community Models

Community model ports live under community_models to make the ownership boundary clear while keeping them available through the normal audio.cpp CLI and server paths. Some community-contributed models graduate into the core model tree when they become part of the main release surface. Huge thanks to the contributors who bring these models in, test them, and keep pushing the framework into new territory. See docs/community_models/models.md for community-model expectations and current entries.

FamilyTaskLangRuntimeContributorWhat They Added
audio8_asrASRen, zh, yue, ja, ko, fr, deGGUF Q8, Safetensors@gqf2008Audio8-ASR-0.1B compact multilingual autoregressive ASR reusing the Qwen3-ASR encoder with an MLP-tower adapter and an 8-layer Qwen2-style decoder (CC-BY-NC, local conversion only)
audio8_ttsTTS, Cloneauto, yue, zh, nl, en, fr, de, it, ja, ko, pl, esGGUF Q8, Stream@jasonchen31Audio8 TTS Preview 0.6B DualAR multilingual TTS and zero-shot voice cloning with a Qwen backbone and neural codec
chatterbox_turboTTS (testing)enGGUF 16/Q8@pannagapsChatterbox Turbo distilled 350M GPT2 T3 backbone + 2-step meanflow S3Gen decoder; built-in voice
echo_ttsCloneenGGUF 16/Q8@5uck1essEcho-TTS 44.1 kHz zero-shot voice cloning with EchoDiT latents and Fish S1-DAC decoding
f5_ttsTTS, Cloneen, ar (Habibi)GGUF@tarekoF5-TTS flow-matching DiT synthesis and voice cloning, with Habibi Arabic aliases habibi/habibi_tts
glm_ttsTTS, Clonezh, enGGUFMirek @mirek190GLM-TTS zero-shot synthesis and voice cloning support
granite5asrASRenGGUF Q8@ampersandruIBM Granite Speech 5.0 470M TurboCTC ultra-fast Conformer-CTC ASR with Shaw relative positional embeddings and ByteLevel BPE
inflect_v2TTSenGGUF FP32Jan @JanWerderInflect Micro v2 and Nano v2 native offline synthesis
kroko_asrASRde, en, es, fr, it, he, nl, pt, sv, trSafetensors, GGUF Q8Mirek @mirek190Kroko Community ASR native offline/streaming Zipformer2/RNN-T transcription with word timestamps
minimax_h3Video, Music, TTS/DialogueautoGGUF Q4/INT8@0xShug0MiniMax-H3 text-to-audio/video generation with Q4_K and optional INT8 ConvRot DiT
minimax_music3MusicautoGGUF Q4/Q8@0xShug0, @JoeMattieMiniMax Music 3 text-to-music generation with lyrics conditioning
mira_ttsTTS, CloneenLocal conversionMirek @mirek190MiraTTS experimental native Qwen2 + ECAPA/Perceiver zero-shot voice cloning with progressive segment streaming (CC-BY-NC-SA-4.0 weights)
mms_forced_alignerAlignnl (nld), en (eng); pre-romanized LatinSafetensors, GGUF 16/Q8CommunityMMS-300M-1130 Forced Aligner word-timestamp alignment from a wav2vec2 CTC checkpoint (safetensors or local GGUF)
moss_tts_localTTS, Clone, Ctrlauto, optional language hintGGUF@justinjohn0306MOSS-TTS-Local Transformer v1.5 support
moss_voicegenVoice Designen, zhGGUFJoost @jrohdeMOSS-VoiceGenerator speech in a voice designed from a written instruction
outettsTTS, Cloneen, ar, zh, nl, fr, de, it, ja, ko, lt, ru, es, pt, be, bn, ka, hu, lv, fa, pl, sw, ta, ukGGUFMirek @mirek190Llama-OuteTTS-1.0-1B TTS and voice cloning support
parakeet_tdtASRauto, bg, cs, da, de, el, en, es, et, fi, fr, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, ru, sk, sl, sv, ukGGUF F32/16/Q8, Stream@dleiferivesParakeet-TDT 0.6B v3 offline, long-form, and buffered-streaming ASR support
sanottsTTSen, vi, idGGUF FP32Ashish @voidashsanoTTS voice family seven voices from 294k to 2.27M parameters, native offline synthesis
sense_asrASRauto, zh, en, yue, ja, ko, pt, ru, es, it, fr, de, nl, pl, tr, ar, hi, vi, th, id, ms, fa, nospeechGGUF Q8, StreamJason Chen @jasonchen31, @LauraGPT / FunASRSenseVoice-Small offline/streaming SAN-M + CTC transcription with event/emotion/language tags and ITN
sopro_ttsTTS, Cloneen, pt, fr, deSafetensors, GGUF, StreamCommunitySopro V2 Turbo 120M zero-shot voice cloning: style-prefix semantic LM over FSQ tokens, rectified-flow acoustic DiT, Vocos ISTFT vocoder at 24 kHz
soprano_ttsTTSenGGUF Q8, Stream@drzsdrtfgSoprano-1.1-80M ultra-lightweight TTS with Qwen3 LM + Vocos decoder
vietneu_ttsTTS, Clonevi, enGGUFPhuoc @phuocnguyen90VieNeu-TTS-v3-Turbo TTS and voice cloning support
vibeasrASRenGGUF I8_S + I2_S@XsquirrelCVibeASR fully quantized port of VibeASR.cpp: VibeVoice acoustic/semantic tokenizers on INT8 weights and INT8 activations, feeding a ternary BitNet Qwen2 decoder. Offline, CPU only
voxcpm1TTS, Clonezh, en, ja, koGGUF Q8, Stream@jasonchen31VoxCPM1 tokenizer-free 0.5B TTS with 16 kHz output, streaming, and continuation-mode voice cloning

Docker

Docker CUDA and CPU images are available for both CLI and server use. See docker.md for available images, build commands and working Docker examples.

Model Manager and GGUF Downloads

Use tools/model_manager_v2.py for normal model downloads. It reads model_specs/*.json and installs the default package for each family, preferring ready-to-use GGUF packages when they are available.

Native builds configured with -DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER=ON also provide audiocpp_model_manager, a standalone headless frontend over the same reusable C++ package-management library used by the server and embedded WebUI. It supports list, info, install, clean, and remove without starting audiocpp_server; this is the preferred native path for CLI, Docker, remote provisioning, and other scripted environments. The Python v2 manager remains available as an alternative during migration. The native path uses bundled TLS by default and does not require libcurl.

audiocpp_model_manager list
audiocpp_model_manager install qwen3_asr_0_6b_q8_0 --models-dir models

The old safetensors/converter catalog has been renamed to tools/model_manager_deprecated.py. Use it only for legacy model layouts that have not moved to spec-backed GGUF packages yet.

GGUF downloads:

See the Model Manager guide for model-manager usage and package notes.

WebUI

Maintained by contributors

audiocpp_server includes an embedded SvelteKit/TypeScript WebUI for running local TTS, cloning, ASR, generation, conversion, separation, VAD, diarization, and alignment workflows. The production UI is compiled into the server binary, so using it requires neither Python nor separate frontend files:

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

Open http://127.0.0.1:8080. --ui-management enables catalog browsing, downloads, temporary uploads, and dynamic model switching, so this is the easiest way to try audio.cpp without writing a server config first. For a locked-down config-driven instance, start with --ui and a server config instead; in that mode the UI only offers models declared by the config unless management is enabled.

For Docker UI downloads, mount a writable models directory at /app/models and use --ui-management. See docker.md.

The native UI also exposes background model download/preparation, long-text split-and-merge synthesis, a browser-local saved voice library, microphone recording, and near-live ASR input. Some model preparation jobs invoke the repository's Python model manager because those packages require Hugging Face download or checkpoint conversion; model inference and the embedded UI remain Python-free. See webui/README.md for launch commands, model notes, and frontend development instructions.

Prebuilt Binaries

Official packages for every release are attached to the Releases page:

PlatformBackends
Windows x64CPU, Vulkan, CUDA (12.4 / 13.3)
Ubuntu x64CPU, Vulkan
macOS (arm64 / x64)Metal

The Windows 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 and the CUDA runtime DLLs (cudart, cuBLAS, cuFFT).

  • Windows (HIP/ROCm, AMD GPUs): community-maintained packages with the ROCm runtime bundled, so no HIP SDK installation is required. Published from @IIIIIllllIIIIIlllll's fork Releases in two tracks: ROCm 6.4 (full coverage incl. RX 7600 / gfx1102) and ROCm 7.1 (recommended for RDNA4). Version numbers follow the upstream releases; see docs/build/windows-hip-distribution.md for details.

Build

OSRequirements
LinuxGCC 13 or newer, CMake, plus the backend toolchain for the build you want: NVIDIA CUDA Toolkit for CUDA, Vulkan SDK for Vulkan, ROCm for HIP
WindowsVisual Studio Build Tools 2022 or newer with C++ desktop workload, MSVC x64 compiler, Windows SDK, CMake, Ninja, MSVC OpenMP components; official NVIDIA CUDA Toolkit for CUDA builds, Vulkan SDK for Vulkan builds, AMD HIP SDK for HIP builds
macOSXcode or Xcode Command Line Tools, plus CMake. Metal builds also require the Metal compiler available through xcrun

Homebrew Install

On macOS, audio.cpp can be installed from the Homebrew tap:

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

For Nix and NixOS builds, see docs/build/nixos.md.

Composite Builds

Composite builds let you compile only the model families you need. full is the default and is what release/Docker builds should use. custom registers only the requested loaders while still linking required internal dependencies; core builds the runtime without the optional model-family set.

The helper scripts expose this as --model-set and --models on Linux/macOS, and -ModelSet and -Models on Windows:

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

Direct CMake builds use the same underlying variables:

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

Linux Build

Use the Linux helper script for CPU, CUDA, Vulkan, or HIP builds:

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 hip --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cpu --target audiocpp_cli --target audiocpp_server

The script writes to aligned build directories such as build/linux-cuda-release, build/linux-vulkan-release, build/linux-hip-release, and build/linux-cpu-release.

Without --cuda-arch, CUDA builds use the portable arch list (works on many GPUs, slower to build). For a faster build targeting only the local GPU, pass --cuda-arch native (CMake >= 3.24; on older CMake this falls back to the portable list) or an explicit arch list:

scripts/build_linux.sh --backend cuda --cuda-arch native --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cuda --cuda-arch "86;89" --target audiocpp_cli --target audiocpp_server

Composite examples:

scripts/build_linux.sh --backend cuda --model-set full --target audiocpp_cli
scripts/build_linux.sh --backend cuda --model-set custom --models qwen3_tts,pocket_tts,qwen3_asr --target audiocpp_cli
scripts/build_linux.sh --backend cpu --model-set core --target audiocpp_cli

For portable CPU kernels on machines where native ISA flags are not suitable:

scripts/build_linux.sh --backend cuda --native-cpu OFF --target audiocpp_cli --target audiocpp_server

For deployment builds with compiled package specs:

scripts/build_linux.sh --backend cuda --deployment-build --target audiocpp_cli --target audiocpp_server

For native WebUI model downloads, enable the native model manager:

scripts/build_linux.sh --backend cuda --native-model-manager --target audiocpp_server

For direct CMake commands, see docs/build/linux.md.

Windows Build

Use the Windows PowerShell build script:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\build_windows.ps1

Common presets:

.\scripts\build_windows.ps1 -Preset windows-cuda-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Preset windows-vulkan-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Preset windows-cpu-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Target audiocpp_server -Jobs 16
.\scripts\build_windows.ps1 -Preset windows-cuda-release -ModelSet custom -Models "qwen3_tts,pocket_tts,qwen3_asr" -Target audiocpp_cli

From cmd.exe, use the wrapper:

scripts\build_windows.cmd

For deployment builds with compiled package specs:

.\scripts\build_windows.ps1 -DeploymentBuild -Target audiocpp_cli

For native WebUI model downloads, enable the native model manager:

.\scripts\build_windows.ps1 -NativeModelManager -Target audiocpp_server

For requirements, CPU profiles, CUDA packaging, and release zips, see docs/build/windows.md.

macOS CPU Build

Apple builds enable Metal by default. To build a CPU-only binary, disable Metal explicitly:

cmake -S . -B build/macos-cpu-release \
  -DCMAKE_BUILD_TYPE=Release \
  -DENGINE_ENABLE_CUDA=OFF \
  -DENGINE_ENABLE_VULKAN=OFF \
  -DENGINE_ENABLE_METAL=OFF \
  -DENGINE_ENABLE_OPENMP=OFF \
  -DGGML_OPENMP=OFF
cmake --build build/macos-cpu-release \
  --parallel "$(sysctl -n hw.logicalcpu)" \
  --target audiocpp_cli audiocpp_server audiocpp_gguf

Confirm that the resulting CLI sees the host CPU backend:

build/macos-cpu-release/bin/audiocpp_cli --list-devices

Metal Build

On macOS, use the Metal helper script to build against ggml's Metal backend:

scripts/build_metal.sh --target audiocpp_cli

The script configures build/macos-metal-release by default, enables ENGINE_ENABLE_METAL=ON, disables CUDA and Vulkan, embeds the Metal shader library, and builds static libraries plus the requested target.

Useful variants:

scripts/build_metal.sh --target audiocpp_server
scripts/build_metal.sh --build-type Release --archs arm64 --target audiocpp_cli
scripts/build_metal.sh --model-set custom --models qwen3_tts,pocket_tts --target audiocpp_cli
scripts/build_metal.sh --with-tests --target audio_dsp_test
scripts/build_metal.sh --openmp auto --target audiocpp_cli
scripts/build_metal.sh --native-cpu OFF --target audiocpp_cli
scripts/build_metal.sh --deployment-build --target audiocpp_cli

The built CLI is written to:

build/macos-metal-release/bin/audiocpp_cli

HIP/ROCm Build

On Linux and Windows, HIP builds compile ggml's CUDA backend sources as HIP code for AMD GPUs. ENGINE_ENABLE_HIP and ENGINE_ENABLE_CUDA are mutually exclusive — configure with exactly one of them.

Linux (the helper script auto-detects ROCm via ROCM_PATH/HIP_PATH/hipconfig and local GPU targets via amdgpu-arch, falling back to rocminfo; pass --gpu-targets to build for other architectures, or when no AMD GPU is visible, e.g. in a VM or container):

scripts/build_linux.sh --backend hip --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend hip --gpu-targets "gfx1100;gfx1103" --target audiocpp_cli

Direct CMake:

cmake -S . -B build_hip \
  -DENGINE_ENABLE_HIP=ON \
  -DGPU_TARGETS=gfx1151 \
  -DCMAKE_C_COMPILER="$(hipconfig -l)/clang" \
  -DCMAKE_CXX_COMPILER="$(hipconfig -l)/clang++" \
  -DCMAKE_BUILD_TYPE=Release
cmake --build build_hip -j$(nproc)

Windows (the helper script auto-detects ROCm, GPU targets, cmake, and ninja):

powershell -ExecutionPolicy Bypass -File scripts\build_windows_hip.ps1

Run with --backend hip (rocm is accepted as an alias). For GPU target selection, hipBLASLt GEMM notes, iGPU tuning, and known limitations, see docs/build/HIP.md.

Build Options

OptionMeaningDefault
ENGINE_ENABLE_CUDAEnable the ggml CUDA backend. Required for --backend cuda.OFF
ENGINE_ENABLE_HIPEnable the ggml HIP backend (AMD GPUs). Required for --backend hip; mutually exclusive with ENGINE_ENABLE_CUDA.OFF
ENGINE_ENABLE_VULKANEnable the ggml Vulkan backend. Required for --backend vulkan.OFF
ENGINE_ENABLE_METALEnable the ggml Metal backend. Required for --backend metal.OFF on most platforms, ON on Apple
ENGINE_ENABLE_LLAMAFILEEnable llamafile SGEMM support in ggml CPU builds.ON
ENGINE_ENABLE_CUDA_GRAPHSEnable ggml CUDA graphs support when CUDA is enabled.ON
ENGINE_ENABLE_NATIVE_CPUBuild ggml CPU kernels with native host ISA flags such as -march=native. Disable this for portable CPU kernels or toolchains that reject generated CPU instructions.ON
ENGINE_ENABLE_OPENMPEnable OpenMP for host-side parallel work.ON
ENGINE_BUILD_EXAMPLESBuild example binaries.OFF
ENGINE_BUILD_TESTSBuild framework unit tests.OFF
ENGINE_BUILD_EXTENDED_TESTSBuild extended non-model tests and probes, such as server/app/package-manager checks and backend graph tests.OFF
ENGINE_BUILD_MODEL_TESTSBuild model-specific tests and probes.OFF
ENGINE_BUILD_WARMBENCHBuild warmbench helper binaries.OFF
AUDIOCPP_BUILD_NATIVE_MODEL_MANAGERBuild the standalone native model manager and enable server-side WebUI downloads/install management. This opt-in feature builds the HTTP/TLS dependency.OFF
AUDIOCPP_USE_SYSTEM_OPENSSLUse system OpenSSL instead of bundled BoringSSL when native model management is enabled.OFF
AUDIOCPP_DEPLOYMENT_BUILDCompile package specs into CLI/server binaries for standalone GGUF and package-spec fallback loading. Script builds expose this as --deployment-build on Linux/macOS and -DeploymentBuild on Windows.OFF
Native model manager script flagBuild scripts expose AUDIOCPP_BUILD_NATIVE_MODEL_MANAGER as --native-model-manager on Linux/macOS and -NativeModelManager on Windows. --system-openssl / -SystemOpenSsl and --boringssl-archive / -BoringSslArchive configure its TLS backend.disabled
AUDIOCPP_MODEL_SETModel composite to build: full, core, or custom. Script builds expose this as --model-set on Linux/macOS and -ModelSet on Windows.full
AUDIOCPP_MODELSComma or semicolon separated model target names when AUDIOCPP_MODEL_SET=custom, such as qwen3_tts,pocket_tts,qwen3_asr. Script builds expose this as --models on Linux/macOS and -Models on Windows.empty

Usage

For full setup, CLI, server, and workflow examples, see docs/usage.md.

CLI

The main CLI binary is:

build/bin/audiocpp_cli

High-level command shape:

audiocpp_cli --task <task> --model <path> [--family <family>] [--backend <backend>] [--mode <mode>] [options]

Core selectors:

  • --task vad|asr|diar|sep|gen|tts|clon|vc|s2s|align|vdes|spk|svc
  • --model <path>
  • --family <name> optionally narrows model-loader selection when a model path could match more than one family
  • --backend cpu|cuda|vulkan|metal|best
  • --mode offline|streaming; streaming is available for models whose docs list streaming support

Common interface options:

  • --load-option key=value passes model-load options, such as PocketTTS language selection
  • --session-option key=value passes session/runtime options, such as backend-specific weight controls
  • --request-option key=value passes per-request model options
  • --config <id> selects a discovered config asset
  • --weight <id> selects a discovered weight asset
  • --device <n> selects the backend device
  • --threads <n> sets backend and OpenMP worker threads

Examples:

Text-to-speech:

build/bin/audiocpp_cli \
  --task tts \
  --family pocket_tts \
  --model /path/to/model \
  --backend cuda \
  --text "audio.cpp is running PocketTTS locally." \
  --voice-ref assets/resources/sample.wav \
  --out build/out/pocket_tts.wav

PocketTTS with another language and a built-in voice:

build/bin/audiocpp_cli \
  --task tts \
  --family pocket_tts \
  --model /path/to/models/pocket-tts \
  --backend cuda \
  --load-option language=spanish \
  --text "Hola, esta es una prueba corta de Pocket TTS." \
  --voice-id alba \
  --out build/out/pocket_tts_spanish.wav

ASR:

build/bin/audiocpp_cli \
  --task asr \
  --family qwen3_asr \
  --model /path/to/model \
  --backend cuda \
  --audio assets/resources/sample_16k.wav

Voice conversion:

build/bin/audiocpp_cli \
  --task vc \
  --family seed_vc \
  --model /path/to/model \
  --backend cuda \
  --audio assets/resources/a.wav \
  --voice-ref assets/resources/b.wav \
  --out build/out/seed_vc.wav

Useful CLI features:

  • --help with --task shows task-oriented help
  • --help with --model <path> and optional --family <family> shows model-owned request, session, and load options
  • --inspect prints discovered configs, weights, and capabilities
  • --list-loaders prints registered model families (--json for the machine-readable contract)
  • python tools/model_manager_v2.py list --json prints installable packages from model_specs/*.json
  • --batch-text-file <txt> runs one offline request per non-empty line
  • --batch-text-dir <dir> runs one offline request per .txt, .md, or .json file, normalizing each file as one paragraph
  • --batch-audio-dir <dir> runs one offline request per .wav
  • --audio-chunk-mode auto lets ASR/alignment models choose their safe long-audio policy; expert users can override with fixed, vad, or none where supported
  • --request-sequence <json> runs a multi-request offline session
  • --batch-merge-audio none|concat controls batch audio merge behavior
  • --batch-manifest-out <json> writes a batch output manifest
  • --metrics prints compact offline wall time, audio duration, RTF, realtime speed, sample rate, and channel metrics
  • Use --request-sequence <json> --metrics for per-request metrics from one long-lived offline session
  • --pipeline <json> runs a workflow instead of a raw task
  • --list-pipelines prints registered workflows
  • --workflow-input key=value overrides pipeline inputs
  • --log streams framework logs to stdout
  • --log-file <path> streams framework logs to a file in real time
  • --segments-out, --turns-out, and --words-out write structured JSON outputs
  • --vad-chunks-out writes offline VAD-based chunk windows; tune them with --vad-chunk-max-seconds, --vad-chunk-merge-gap-seconds, and --vad-chunk-padding-seconds

Server

The server binary is:

build/bin/audiocpp_server

Build:

cmake --build build -j$(nproc) --target audiocpp_server

Create a config file with your own model paths:

cat > server.json <<'JSON'
{
  "host": "127.0.0.1",
  "port": 8080,
  "backend": "cuda",
  "device": 0,
  "threads": 1,
  "lazy_load": true,
  "models": [
    {
      "id": "pocket-tts",
      "family": "pocket_tts",
      "path": "/path/to/models/pocket-tts",
      "task": "tts",
      "mode": "offline",
      "load_options": {
        "language": "english"
      },
      "session_options": {
        "language": "english"
      }
    },
    {
      "id": "qwen3-asr",
      "family": "qwen3_asr",
      "path": "/path/to/models/Qwen3-ASR-0.6B",
      "task": "asr",
      "mode": "offline"
    }
  ]
}
JSON

Set "lazy_load": true to register configured model ids at startup while loading each model only on first use. Use per-model "lazy": true or "lazy": false to override that default.

Set top-level "backend" to "cuda", "cpu", "vulkan", "metal", or "hip". CUDA is the optimized path for audio.cpp; CPU, Vulkan, Metal, and HIP are intended for portability and testing when the binary is built with that backend, but performance and model coverage may be lower.

[!WARNING] Lazy loading does not unload models after a request. Once a model is first used, the server keeps that model and session in memory for reuse until the server exits, unless max_loaded_models limits residency.

Set top-level "max_loaded_models" (or start with --max-loaded-models <n>) to bound how many models stay resident in memory at once: loading one more past the limit first unloads the least recently used idle model, and 1 enforces a single loaded model at a time. The default 0 keeps every used model in memory. See app/server/README.md for details.

Start:

build/bin/audiocpp_server --config server.json

The server exposes:

  • GET /health
  • GET /v1/models
  • POST /v1/audio/speech
  • POST /v1/audio/transcriptions
  • POST /v1/audio/transcriptions/details
  • POST /v1/audio/alignments
  • POST /v1/tasks/run

More server examples are in app/server/README.md.

Pipelines

Pipelines are an experimental JSON workflow feature for chaining multiple model and audio-processing steps behind one CLI command. A pipeline can define default inputs, let users override them with --workflow-input key=value, split long media into model-sized chunks, merge text or audio outputs back together, write intermediate artifacts under --out-dir, and copy the declared final_audio to --out.

This is the higher-level layer for production-style audio jobs: redubbing, batch cleanup, long-form narration, voice conversion, source-separation workflows, transcription-plus-alignment, and future workflows that combine translation, diarization, denoise, enhancement, or review steps as those model surfaces are wired into the framework.

The included same-language speech redub pipeline transcribes long speech in chunks with Qwen3 ASR, merges the transcript, then regenerates the speech in a target reference voice with Qwen3 TTS. The default test input assets/resources/speech.wav is about 418 seconds long and was generated from an 8,091-character speech text, so it exercises long-audio split and merge behavior rather than a short one-shot request:

build/bin/audiocpp_cli \
  --pipeline assets/pipeline/speech_redub.json \
  --backend cuda \
  --out-dir build/out/speech_redub_pipeline \
  --out build/out/speech_redub_pipeline.wav

Override the source speech or target voice without editing the JSON:

build/bin/audiocpp_cli \
  --pipeline assets/pipeline/speech_redub.json \
  --backend cuda \
  --workflow-input source_audio=/path/to/speech.wav \
  --workflow-input target_voice=/path/to/voice.wav \
  --workflow-input language=English \
  --out-dir build/out/speech_redub_pipeline \
  --out build/out/speech_redub_pipeline.wav

Tests

The repository includes both framework-level parity validation and app-level end-to-end path checks. At a high level, the flow is:

Parity test flow

The main harness under tests/ is tests/warmbench.py. It is used for long-lived multi-request validation, parity checks against Python references, and performance-oriented session reuse scenarios. The tests/ tree also contains model-specific C++ and Python warmbench entrypoints that warmbench.py coordinates.

The main app-facing test tooling under tools/ is tools/audiocpp_cli/run_audiocpp_cli_path_tests.py. It drives audiocpp_cli through cataloged offline and streaming cases, verifies expected outputs such as audio or JSON artifacts, and is useful for checking real user-facing request paths rather than just lower-level model components. Streaming coverage is model-specific and applies to models documented with streaming support.

The Python-reference side of these tests usually requires more time-consuming setup than the C++ path because different models rely on different Python reference repos and dependency stacks. In practice, the framework-side tooling is fast to iterate on once models are installed, while Python parity runs often need extra environment preparation before they are ready.

Projects

Last update: 2026-08-17

Have a project using audio.cpp? Submit a PR or let me know, and I’ll be happy to add it here.

  • TranscrIA is a self-hosted meeting transcription platform with diarization and local LLM correction. audio.cpp is integrated as a first-class STT engine in the product.
  • Pocket TTS Browser Engine uses audio.cpp to bring fully local PocketTTS voices into Chrome and Edge through the browser TTS API.
  • GuideAnts uses audio.cpp as the default local AI stack path for basic ASR and TTS, with planned reusable skills for audio.cpp scenarios and model configurations.
  • audio.cpp-webui provides a full-task Python/Gradio WebUI for audio.cpp, focused on browser-based model downloads and common TTS, ASR, voice conversion, diarization, music, and audio workflows.
  • audio.cpp-hub is a Web GUI for audio.cpp that packages model-oriented workflows around the native runtime.
  • Delusion provide Pythonic, strongly typed wrapper classes around audio.cpp usage, including model download/cache helpers and typed request surfaces.
  • AudioCppTray is a Windows tray management tool for audiocpp_server.exe, with start/stop/restart controls, notifications, log viewing, log rotation, and server configuration shortcuts.

Performance Metrics

[!WARNING] These Python-relative numbers were measured for the initial release. Several model paths have improved substantially since then, so the figures below should be read as the original release baseline rather than the latest peak performance.

All performance metrics in this section were measured on Ubuntu with the CUDA backend on an NVIDIA GeForce RTX 5090. The Python-relative one-shot and long-lived-session comparisons come from direct framework/runtime API benchmark calls, not from audiocpp_cli; CLI path tests are separate and include app-layer request parsing, output writing, and other user-facing overhead.

Absolute RTF depends on the GPU and system setup, but the Python-relative speedups are real because audio.cpp and the matching Python reference paths were measured on the same CUDA setup.

audio.cpp already shows some genuinely exciting wins against the matching Python reference paths, especially on the TTS side, even when using the original model weights without quantization. The headline win is wall time: several TTS paths run 1.8x to up to 10x faster than Python while cutting end-to-end latency by 45%-90%.

  • In one-shot runs, several TTS-family models already land far ahead of Python:
    • vevo2: 5.03x faster with 80.11% less wall time
    • pocket tts: 3.68x faster with 72.80% less wall time
    • miotts: 2.73x faster with 63.39% less wall time
    • moss_tts_local: 2.33x faster with 57.07% less wall time
    • qwen3 tts: 1.83x faster with 45.34% less wall time
    • vibevoice: 1.40x faster with 28.75% less wall time
  • In long-lived-session runs, where the same loaded session serves multiple requests in sequence, the gains stay strong:
    • pocket tts: 3.22x faster with 68.91% less wall time
    • qwen3 tts: 2.74x faster with 63.47% less wall time
    • moss_tts_local: 2.66x faster with 62.35% less wall time
    • miotts: 2.28x faster with 56.22% less wall time
    • vibevoice: 1.77x faster with 43.55% less wall time
    • vevo2: 1.75x faster with 42.72% less wall time
  • In long-form runs on the shared 6,026-character, 1,028-word passage, the strongest Python-relative wins still show up clearly:
    • pocket tts: 3.15x faster with 68.23% less wall time
    • qwen3 tts: 3.06x faster with 67.33% less wall time
    • vibevoice: 2.86x faster with 65.07% less wall time
    • vevo2: 1.77x faster with 43.51% less wall time
    • chatterbox: 1.58x faster with 36.83% less wall time
  • These long-lived-session numbers are especially important for real applications, because they reflect the common case where model load, cached state, and reusable runtime setup are amortized across many requests.
  • Bars below the 1.0x line are useful too: they spotlight exactly where more optimization work is still worth doing.

One-shot

Long-lived session

The figures report Python wall time / audio.cpp wall time. The 1.0x line means equal wall time; bars above 1.0x mean audio.cpp is faster than Python, and bars below 1.0x mean it is slower.

For TTS-family models, the measured one-shot RTF is:

modelaudio len (s)wall time (s)RTFx faster than real time
chatterbox9.722.450.2523.97x
miotts20.403.300.1626.18x
moss_tts_local9.600.970.1019.91x
omnivoice9.001.320.1466.84x
pocket tts8.080.260.03231.09x
qwen3 tts11.444.460.3902.56x
vevo28.662.470.2853.51x
vibevoice11.075.020.4542.20x
voxcpm25.603.090.5511.81x

For long-form TTS tests, each run uses the same 6,026-character, 1,028-word input text (vibevoice uses 106,310 chars, 18,052 words, 4 speakers). Rows are CUDA unless marked CPU. The measured RTF is:

modelaudio len (s)wall time (s)RTFx faster than real time
chatterbox391.2458.570.1506.68x
index tts2422.12139.950.3323.02x
miotts399.1666.590.1675.99x
moss_tts_nano391.2043.160.1109.06x
moss_tts_local375.4473.840.1975.08x
omnivoice357.0017.770.05020.09x
pocket tts353.127.300.02148.40x
qwen3 tts327.6072.650.2224.51x
supertonic379.322.020.005187.62x
supertonic (CPU)379.4061.400.1626.18x
vevo2457.6852.470.1158.72x
voxcpm2315.8472.700.2304.34x
vibevoice5615.731376.840.2454.08x

Runtime Memory Options

Some models expose memory-saver session options such as ace_step.mem_saver=true, dramabox.mem_saver=true, heartmula.mem_saver=true, stable_audio.mem_saver=true, omnivoice.mem_saver=true, and voxcpm2.mem_saver=true. These options keep the default output path unchanged while reducing graph workspace VRAM or releasing staged graph/cache state after request phases; later requests may rebuild released graphs.

Precision/Quantization Support

Many model sessions expose quantization through --session-option <family>.weight_type=<mode>, and some families also expose more specific knobs such as ...conv_weight_type, ...talker_weight_type, or ...speech_decoder_weight_type. The exact supported modes are model-specific rather than global.

audio.cpp also supports standalone GGUF packages.

In practice, lower precision and quantized modes should be treated as model- and route-specific optimizations rather than universally safe defaults.

  • Safety. Quantization may not be safe on every path even when a model parser accepts the option. For example, in our ACE-Step 1.5 checks, lower-precision runs could fail at runtime with ACE-Step planner masked decode found no valid token while higher-precision settings completed normally.

  • Quality Drop. Output quality can drop a lot. In our VeVo2 checks, non-fp32 outputs showed noticeably weaker similarity to the fp32 reference under the repo's existing waveform and log-mel comparison metrics, and even output length could shift.

  • Performance Gain. The performance gain may be minor relative to that quality risk. For example, q8_0 was faster than the default setting by only around 3.8% on Qwen3-TTS and around 3.6% on VeVo2. Other models may benefit more, but the tradeoff should be validated per model and per route rather than assumed.

  • Memory Benefit. Lower precision and quantized weights can still be useful for reducing weight memory footprint and making larger models easier to fit within device limits. For example, in our Qwen3-TTS checks, switching from the default setting to q8_0 reduced peak RAM by about 3.7% and peak VRAM by about 25.0%. That benefit is real, but it should be evaluated together with runtime stability, output quality, and end-to-end speed rather than assumed from precision alone.

Notes

  • The repo supports multiple backends, but backend and model coverage are model-dependent.
  • GGUF is a container, not a universal architecture adapter. Existing llama.cpp or whisper.cpp GGUF files are not automatically compatible unless their tensor names and model metadata are mapped to the audio.cpp family implementation.
  • Build_xcframework.sh is outdated; Metal and Apple XCFramework packaging still need to be retested after the framework refactor.

Contributors

(top 30 of 65)

0xShug0

355 commits

mirek190

42 commits

fedeizzo

10 commits

0xShug0/audio.cpp

An all-in-one, pure C++ inference engine for audio models, powered by ggml. Supports TTS, STT, VAD, voice conversion, music generation, and more, with highly optimized performance. No Python dependency.

2,515

stars

564

commits

C++

primary language

Sep 11, 2026

updated

ai
amd-gpu
apple-silicon
asr
audio
audio-analysis
cpp
edge-ai
ggml
minimax-music3
music-generation
speech-analysis
speech-to-speech
speech-to-text
text-to-speech
tts
voice-cloning
voice-conversion
vulkan

README

audio.cpp

0xShug0/audio.cpp | Trendshift

audio.cpp is a high-performance C++ audio inference framework built on top of ggml, designed to make modern local audio models practical, portable, and fast.

Tired of juggling a dozen Conda environments, hundreds of Python packages, and dependency conflicts just to try a few audio models? audio.cpp gives those paths a shared native runtime instead. Runs on Windows, Linux, and macOS, with support for NVIDIA, AMD, Apple Silicon, and CPU-only machines.

Huggingface main repo: https://huggingface.co/audio-cpp/audio.cpp-gguf

ModelScope repo mirror: https://www.modelscope.cn/models/HereIsMark/audio.cpp-gguf

[!IMPORTANT]

Arena UI: The new Arena tab makes it easier to compare local models side by side for TTS, voice conversion, and ASR. Use one shared input, queue multiple models or GGUF variants, then review outputs with metrics!

CUDA performance headline: multiple TTS paths already run 1.8x to up to 8x faster than their Python reference paths while cutting end-to-end latency by 45%-85%.

GGUF performance: all released model families support GGUF loading, and tested Q8 packages can run up to 1.53x faster while reducing peak VRAM by up to about 37% on routes such as Higgs Audio, Fish Audio, and Voxtral. See the GGUF guide for support status and the Q8 performance report for 16-bit vs Q8 measurements.

Production deployment example: Try Fun-ASR-Nano with audio.cpp on the FunASR platform https://www.funasr.com/en/deploy/audio-cpp.html!

VibeVoice 1.5B: generates a 93.9-minute podcast in 18.2 minutes with 10 diffusion steps and without quantization, running about 5.15x faster than real time.

Supertonic 3: generates about 10 hours of audio in 3 minutes on RTX5090. Up to 200x+ real-time on CUDA, 6x+ real-time on CPU, and 47 ms TTFT in CUDA streaming mode. Demo: 10 hours of audio generated in 3 minutes.

Real-world ASR win: In TranscrIA benchmark on messy French meeting audio, audio.cpp’s Nemotron 3.5 ASR matched the same WER as other implementations while using about 1/4 of the wall time.

It is built for real end-to-end execution rather than one-off model demos: the same runtime powers TTS, voice cloning, voice conversion, ASR, diarization, VAD, source separation, alignment, codec-style models, and higher-level workflows through a common framework surface.

Highlights:

  • Parity. Strong parity tooling against Python reference paths.
  • Performance. Performance-focused execution, reusable sessions, and batch-style offline inference. Optimized for CUDA.
  • Portability. A portable native stack centered on ggml, with CUDA, HIP/ROCm, Vulkan, Metal, and CPU backends behind shared CLI and server entry points instead of Python-only deployment paths.
  • Pipelines. Experimental JSON pipeline support for higher-level multi-step workflows.
  • Audio Utilities. Built-in denoise, enhancement, resampling, and STFT/ISTFT utilities for real production-style task paths.

The goal of the framework is to provide highly optimized, reusable building blocks for audio-related models, so new model integrations can be brought up faster, shared components can be improved once and benefit many families, and real end-to-end inference paths can stay efficient, maintainable, and portable.

audio.cpp would not be moving this quickly without generous contributors bringing in real fixes, new capabilities, and careful polish. See CONTRIBUTING.md for how to contribute and for a shout-out to the people already helping shape the project.

[!TIP] Contribution focus: the most helpful contributions right now are improvements to the UI, API server, and pipeline/workflow subsystems. These areas make the existing model surface easier to use, serve, compose, and validate. See CONTRIBUTING.md for more details.

New model PRs: before starting a new model port, please check the supported model table because several families are already implemented or under testing. New ports should start under the community models surface, where review is lighter than core models but still needs reproducible validation. Please follow the measurement style in PR #19 and PR #63: exact build/run commands, model paths or package ids, generated outputs, parity or path-test results, and relevant performance or memory notes.

News

[!IMPORTANT] 2026-09-04 - Release 0.7.2: This release adds BreezeTTS 2, CosyVoice3, Chatterbox Turbo TTS, Audio8 TTS, and Audio8 ASR, plus the new multipart audio alignment endpoint.

2026-08-26 - Release 0.7: This release adds MiniMax Music 3, MagpieTTS, PersonaPlex, MeanVC2, AudioSR, ControlFoley, FireRedTTS3, FireRedAudio, MiDashengLM-Gen, F5-TTS/Habibi, Granite Speech 5.0 TurboCTC, MMS Forced Aligner, and MOSS-VoiceGenerator, plus DotTTS Edit and ACE-Step 1.5 XL variants, bringing audio.cpp to 62 total model families and 85+ model variants! It also introduces the new Arena UI for side-by-side TTS, voice-conversion, and ASR comparison with shared inputs, queued runs, metrics, and result sorting.

2026-08-13 - Release 0.6: This release adds 5 new model families - DotTTS, NeuTTS, MuScriptor, MiniMax-H3, and SenseVoice - bringing audio.cpp to 49 total model families and 70+ model variants, alongside the new native WebUI from @mirek190, expanded GGUF packaging, and more shared framework runtime pieces.

2026-07-31 - Release 0.5: audio.cpp reaches 44 model families with 9 new additions, early HIP/ROCm support for AMD GPUs, Nix ROCm/HIP build support, Metal optimizations with tested VoxCPM2 runs up to 2.56x faster on Apple Silicon, and a major GGUF-first WebUI/package-spec usability pass.

2026-06-25 to 2026-07-23 (release 0.1 to 0.4): audio.cpp grew from the first released model wave into broad TTS, ASR, music generation, source separation, VAD, diarization, codec, and voice-conversion coverage, with VibeVoice 1.5B/7B, LoRA adapter loading, initial streaming support, and major CUDA Conv1DTransp speedups.

Supported Models

Task tags: TTS text to speech, Clone voice cloning, VC voice conversion, S2S speech-to-speech, ASR speech recognition, Align forced alignment, VAD voice activity detection, Diar speaker diarization, Codec audio codec, Sep source separation, MIDI audio-to-symbolic MIDI/events, Music music/song generation, SFX sound effects, Video video generation, Edit audio/music editing, Design voice design, Dialogue multi-speaker dialogue TTS, Ctrl TTS/clone voice control such as emotion, style, instruction, caption, or non-verbal tag control.

Runtime tags summarize the supported loading paths. GGUF package precision varies by model and release; check the audio.cpp GGUF repo or docs/gguf.md for the exact package list. Bundled means the tiny runtime asset ships under assets/framework/models and needs no separate model download. Stream means the family exposes a streaming server/session path.

Speech Generation And Conversation

FamilyTaskLangVariantsRuntime
breeze_ttsTTS, Clone, Design, Ctrlzh, enBreezeTTS 2 instruction-conditioned TTS and prompt-audio voice cloningGGUF BF16/Q8, Stream
chatterboxTTS, Clone, VCar, da, de, el, en, es, fi, fr, hi, it, ko, ms, nl, no, pl, pt, sv, sw, trChatterbox with 0.5B backboneGGUF 16/Q8
confucius4_ttsClonezh, en, ja, ko, de, fr, es, id, it, th, pt, ru, ms, viConfucius4-TTS multilingual voice cloningGGUF F32, Stream
cosyvoice3TTS, Clonezh, en, ja, ko, de, es, fr, it, ru, yueFun-CosyVoice3 zero-shot, cross-lingual, and instruction-conditioned TTSGGUF F32/Q8
dots_ttsTTS, Clone, Edit, CtrlmultilingualDotTTS SOAR, MeanFlow, and EditGGUF 16/Q8, Stream
dramaboxTTS, CloneenDramaBox expressive TTS and voice cloningGGUF Q8
fish_audioTTS, Clone, Ctrlauto, en, zhFish Audio S2 ProGGUF 16/Q8
firered_audioASR, TTS, Clone, Design, Ctrlzh, enFireRedAudio multimodal speech/audio model with ASR, understanding, cloning, design, and edit pathsGGUF original/Q8
fireredtts3TTS, Clone, Design, Ctrl24 langs + 21 zh dialectsFireRedTTS3 Base and Instruct packages for voice cloning, design, semantic edit, and acoustic editGGUF original/Q8
higgs_audio_ttsTTS, Clone, CtrlautoHiggs Audio v3 TTS 4BGGUF 16/Q8
index_tts2TTS, Clone, Ctrlzh, en, ja, es, arIndexTTS-2, IndexTTS-2.5 (variant)GGUF 16/Q8
irodori_ttsTTS, Clone, Design, CtrljaIrodori-TTS-v4-Small, Irodori-TTS-500M-v3, Irodori-TTS-600M-v3-VoiceDesignGGUF 16/Q8
magpie_ttsTTSar-AE, ar-MSA, ar-SA, de, en, es, fr, hi, it, ko, pt-BR, vi, zhNVIDIA MagpieTTS Multilingual 357M (v2607) with baked speaker prompts and NanoCodec decodeGGUF original/Q8
miottsTTS, Cloneen, jaMioTTS-1.7BGGUF 16/Q8
moss_tts_localTTS, Clone, Ctrlauto, optional language hintMOSS-TTS-Local-Transformer-v1.5GGUF 16/Q8
moss_tts_nanoTTS, CloneautoMOSS-TTS-Nano-100MGGUF 16/Q8
neuttsTTS, CtrlenNeuTTS 2E with built-in speaker prompts and emotion controlGGUF original precision, Stream
omnivoiceTTS, Clone, Design, Ctrl646+ langsOmniVoice, Qwen3-0.6B basedGGUF 16/Q8, Stream
personaplexDialogue, S2SenPersonaPlex 7B v1 speech-to-speech conversational model with packaged voice/persona promptsGGUF Q4/Q8, Stream
pocket_ttsTTS, Cloneen, de, it, pt, esPocketTTS-100MGGUF 16/Q8, Stream
qwen3_ttsTTS, Clone, Design, Ctrlzh, en, fr, de, it, ja, ko, pt, ru, esQwen3-TTS-12Hz-0.6B-Base, Qwen3-TTS-12Hz-1.7B-Base, Qwen3-TTS-12Hz-1.7B-CustomVoice, Qwen3-TTS-12Hz-1.7B-VoiceDesignGGUF 16/Q8
supertonicTTSen, ko, ja, ar, bg, cs, da, de, el, es, et, fi, fr, hi, hr, hu, id, it, lt, lv, nl, pl, pt, ro, ru, sk, sl, sv, tr, uk, vi, naSupertonic 3GGUF F32, Stream
vibevoiceTTS, Dialogueen, zhVibeVoice-1.5B, VibeVoice-7BGGUF 16/Q8
voxcpm2TTS, Clone, Design, Ctrlar, da, de, el, en, es, fi, fr, he, hi, id, it, ja, km, ko, lo, ms, my, nl, no, pl, pt, ru, sv, sw, th, tl, tr, vi, zhVoxCPM2-2B, 48 kHzGGUF 16/Q8, Stream

Speech Recognition And Analysis

FamilyTaskLangVariantsRuntime
citrinet_asrASRenCitrinet-256GGUF Q8
fun_asr_nanoASRauto, zh, en, jaFun-ASR-Nano-2512GGUF 16/Q8
higgs_audio_sttASRenHiggs Audio v3 STTGGUF 16/Q8, Stream
hviske_asrASRdaHviske v5.3GGUF Q8
marblenet_vadVADlang agnosticMarbleNet VADBundled
nemotron_asrASR100+ ASR prompt codes incl. autoNemotron 3.5 ASR Streaming 0.6BGGUF 16/Q8, Stream
qwen3_asrASRzh, en, yue, ar, de, fr, es, pt, id, it, ko, ru, th, vi, ja, tr, hi, ms, nl, sv, da, fi, pl, cs, fil, fa, el, ro, hu, mkQwen3-ASR-0.6B, Qwen3-ASR-1.7B-hfGGUF 16/Q8, Stream
qwen3_forced_alignerAlignzh, yue, en, de, es, fr, it, pt, ru, ko, jaQwen3-ForcedAligner-0.6BGGUF 16/Q8
silero_vadVADlang agnosticSilero VADBundled, Stream
sortformer_diarDiarenSortformer-4spk-v1-
vibevoice_asrASRautoVibeVoice ASRGGUF 16/Q8
voxtral_realtimeASRautoVoxtral-Mini-4B-Realtime-2602GGUF 16/Q8/Q4, Stream

Audio Conversion And Processing

FamilyTaskLangVariantsRuntime
audiosrS2Slang agnosticAudioSR Basic audio super-resolution packageGGUF F32
bs_roformerSeplang agnosticBS-RoFormer vocal separation checkpointsGGUF Q8
controlfoleySFXautoControlFoley 44 kHz multimodal Foley generation from text, video, and reference audio conditioningGGUF F32/Q8
htdemucsSeplang agnosticHTDemucs, HTDemucs_ftGGUF 16/Q8
meanvc2VClang agnosticMeanVC2 120 ms/40 ms zero-shot voice conversionGGUF F32/Q4, Stream
mel_band_roformerSeplang agnosticMel-Band RoFormer MLX vocal separation variantsGGUF 16/Q8
miocodecCodec, VClang agnosticMioCodec v2, 25 Hz, 44.1 kHzGGUF 16/Q8
muscriptorMIDImusicMuScriptor Small audio-to-symbolic transcriptionGGUF F32, Stream
rvcVClang agnosticRVC F16 GGUF with packaged v1/v2 voices and optional retrieval blendingGGUF 16
seed_vcVClang agnosticSeedVC XLS-R + HiFT, SeedVC Whisper-small + BigVGANGGUF 16/Q8

Music, Media, And Editing

FamilyTaskLangVariantsRuntime
ace_stepMusic, Edit50+ langsACE-Step 1.5 Turbo/Base and XL Turbo/SFT with acestep-5Hz-lm-1.7BGGUF 16
heartmulaMusiczh, en, ja, ko, esHeartMuLa-oss-3B with HeartCodec-ossGGUF 16/Q8
midashenglm_genMusic, SFXautoMiDashengLM-Gen structured-prompt generation for speech, music, sound effects, and ambienceGGUF F32/Q8
minimax_h3Video, Music, TTS/DialogueautoMiniMax-H3 Q4_K with optional INT8 ConvRot DiTGGUF Q4/INT8
minimax_music3MusicautoMiniMax Music 3 text-to-music generation with lyrics conditioningGGUF Q4/Q8
stable_audioMusic, SFX, EditenStable Audio 3 Small Music, Stable Audio 3 Small SFX, Stable Audio 3 MediumGGUF 16/Q8
vevo2TTS, Music, VC, Editen, zhVevo2 with Qwen2.5-0.5B AR modelGGUF 16

Some model families in the supported table started as outside contributions before being promoted into the core release surface. Thanks to Mirek @mirek190 for BS-RoFormer, @justinjohn0306 for MOSS-TTS-Local, and @LauraGPT from the official FunASR team for Fun-ASR-Nano.

Community Models

Community model ports live under community_models to make the ownership boundary clear while keeping them available through the normal audio.cpp CLI and server paths. Some community-contributed models graduate into the core model tree when they become part of the main release surface. Huge thanks to the contributors who bring these models in, test them, and keep pushing the framework into new territory. See docs/community_models/models.md for community-model expectations and current entries.

FamilyTaskLangRuntimeContributorWhat They Added
audio8_asrASRen, zh, yue, ja, ko, fr, deGGUF Q8, Safetensors@gqf2008Audio8-ASR-0.1B compact multilingual autoregressive ASR reusing the Qwen3-ASR encoder with an MLP-tower adapter and an 8-layer Qwen2-style decoder (CC-BY-NC, local conversion only)
audio8_ttsTTS, Cloneauto, yue, zh, nl, en, fr, de, it, ja, ko, pl, esGGUF Q8, Stream@jasonchen31Audio8 TTS Preview 0.6B DualAR multilingual TTS and zero-shot voice cloning with a Qwen backbone and neural codec
chatterbox_turboTTS (testing)enGGUF 16/Q8@pannagapsChatterbox Turbo distilled 350M GPT2 T3 backbone + 2-step meanflow S3Gen decoder; built-in voice
echo_ttsCloneenGGUF 16/Q8@5uck1essEcho-TTS 44.1 kHz zero-shot voice cloning with EchoDiT latents and Fish S1-DAC decoding
f5_ttsTTS, Cloneen, ar (Habibi)GGUF@tarekoF5-TTS flow-matching DiT synthesis and voice cloning, with Habibi Arabic aliases habibi/habibi_tts
glm_ttsTTS, Clonezh, enGGUFMirek @mirek190GLM-TTS zero-shot synthesis and voice cloning support
granite5asrASRenGGUF Q8@ampersandruIBM Granite Speech 5.0 470M TurboCTC ultra-fast Conformer-CTC ASR with Shaw relative positional embeddings and ByteLevel BPE
inflect_v2TTSenGGUF FP32Jan @JanWerderInflect Micro v2 and Nano v2 native offline synthesis
kroko_asrASRde, en, es, fr, it, he, nl, pt, sv, trSafetensors, GGUF Q8Mirek @mirek190Kroko Community ASR native offline/streaming Zipformer2/RNN-T transcription with word timestamps
minimax_h3Video, Music, TTS/DialogueautoGGUF Q4/INT8@0xShug0MiniMax-H3 text-to-audio/video generation with Q4_K and optional INT8 ConvRot DiT
minimax_music3MusicautoGGUF Q4/Q8@0xShug0, @JoeMattieMiniMax Music 3 text-to-music generation with lyrics conditioning
mira_ttsTTS, CloneenLocal conversionMirek @mirek190MiraTTS experimental native Qwen2 + ECAPA/Perceiver zero-shot voice cloning with progressive segment streaming (CC-BY-NC-SA-4.0 weights)
mms_forced_alignerAlignnl (nld), en (eng); pre-romanized LatinSafetensors, GGUF 16/Q8CommunityMMS-300M-1130 Forced Aligner word-timestamp alignment from a wav2vec2 CTC checkpoint (safetensors or local GGUF)
moss_tts_localTTS, Clone, Ctrlauto, optional language hintGGUF@justinjohn0306MOSS-TTS-Local Transformer v1.5 support
moss_voicegenVoice Designen, zhGGUFJoost @jrohdeMOSS-VoiceGenerator speech in a voice designed from a written instruction
outettsTTS, Cloneen, ar, zh, nl, fr, de, it, ja, ko, lt, ru, es, pt, be, bn, ka, hu, lv, fa, pl, sw, ta, ukGGUFMirek @mirek190Llama-OuteTTS-1.0-1B TTS and voice cloning support
parakeet_tdtASRauto, bg, cs, da, de, el, en, es, et, fi, fr, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, ru, sk, sl, sv, ukGGUF F32/16/Q8, Stream@dleiferivesParakeet-TDT 0.6B v3 offline, long-form, and buffered-streaming ASR support
sanottsTTSen, vi, idGGUF FP32Ashish @voidashsanoTTS voice family seven voices from 294k to 2.27M parameters, native offline synthesis
sense_asrASRauto, zh, en, yue, ja, ko, pt, ru, es, it, fr, de, nl, pl, tr, ar, hi, vi, th, id, ms, fa, nospeechGGUF Q8, StreamJason Chen @jasonchen31, @LauraGPT / FunASRSenseVoice-Small offline/streaming SAN-M + CTC transcription with event/emotion/language tags and ITN
sopro_ttsTTS, Cloneen, pt, fr, deSafetensors, GGUF, StreamCommunitySopro V2 Turbo 120M zero-shot voice cloning: style-prefix semantic LM over FSQ tokens, rectified-flow acoustic DiT, Vocos ISTFT vocoder at 24 kHz
soprano_ttsTTSenGGUF Q8, Stream@drzsdrtfgSoprano-1.1-80M ultra-lightweight TTS with Qwen3 LM + Vocos decoder
vietneu_ttsTTS, Clonevi, enGGUFPhuoc @phuocnguyen90VieNeu-TTS-v3-Turbo TTS and voice cloning support
vibeasrASRenGGUF I8_S + I2_S@XsquirrelCVibeASR fully quantized port of VibeASR.cpp: VibeVoice acoustic/semantic tokenizers on INT8 weights and INT8 activations, feeding a ternary BitNet Qwen2 decoder. Offline, CPU only
voxcpm1TTS, Clonezh, en, ja, koGGUF Q8, Stream@jasonchen31VoxCPM1 tokenizer-free 0.5B TTS with 16 kHz output, streaming, and continuation-mode voice cloning

Docker

Docker CUDA and CPU images are available for both CLI and server use. See docker.md for available images, build commands and working Docker examples.

Model Manager and GGUF Downloads

Use tools/model_manager_v2.py for normal model downloads. It reads model_specs/*.json and installs the default package for each family, preferring ready-to-use GGUF packages when they are available.

Native builds configured with -DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER=ON also provide audiocpp_model_manager, a standalone headless frontend over the same reusable C++ package-management library used by the server and embedded WebUI. It supports list, info, install, clean, and remove without starting audiocpp_server; this is the preferred native path for CLI, Docker, remote provisioning, and other scripted environments. The Python v2 manager remains available as an alternative during migration. The native path uses bundled TLS by default and does not require libcurl.

audiocpp_model_manager list
audiocpp_model_manager install qwen3_asr_0_6b_q8_0 --models-dir models

The old safetensors/converter catalog has been renamed to tools/model_manager_deprecated.py. Use it only for legacy model layouts that have not moved to spec-backed GGUF packages yet.

GGUF downloads:

See the Model Manager guide for model-manager usage and package notes.

WebUI

Maintained by contributors

audiocpp_server includes an embedded SvelteKit/TypeScript WebUI for running local TTS, cloning, ASR, generation, conversion, separation, VAD, diarization, and alignment workflows. The production UI is compiled into the server binary, so using it requires neither Python nor separate frontend files:

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

Open http://127.0.0.1:8080. --ui-management enables catalog browsing, downloads, temporary uploads, and dynamic model switching, so this is the easiest way to try audio.cpp without writing a server config first. For a locked-down config-driven instance, start with --ui and a server config instead; in that mode the UI only offers models declared by the config unless management is enabled.

For Docker UI downloads, mount a writable models directory at /app/models and use --ui-management. See docker.md.

The native UI also exposes background model download/preparation, long-text split-and-merge synthesis, a browser-local saved voice library, microphone recording, and near-live ASR input. Some model preparation jobs invoke the repository's Python model manager because those packages require Hugging Face download or checkpoint conversion; model inference and the embedded UI remain Python-free. See webui/README.md for launch commands, model notes, and frontend development instructions.

Prebuilt Binaries

Official packages for every release are attached to the Releases page:

PlatformBackends
Windows x64CPU, Vulkan, CUDA (12.4 / 13.3)
Ubuntu x64CPU, Vulkan
macOS (arm64 / x64)Metal

The Windows 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 and the CUDA runtime DLLs (cudart, cuBLAS, cuFFT).

  • Windows (HIP/ROCm, AMD GPUs): community-maintained packages with the ROCm runtime bundled, so no HIP SDK installation is required. Published from @IIIIIllllIIIIIlllll's fork Releases in two tracks: ROCm 6.4 (full coverage incl. RX 7600 / gfx1102) and ROCm 7.1 (recommended for RDNA4). Version numbers follow the upstream releases; see docs/build/windows-hip-distribution.md for details.

Build

OSRequirements
LinuxGCC 13 or newer, CMake, plus the backend toolchain for the build you want: NVIDIA CUDA Toolkit for CUDA, Vulkan SDK for Vulkan, ROCm for HIP
WindowsVisual Studio Build Tools 2022 or newer with C++ desktop workload, MSVC x64 compiler, Windows SDK, CMake, Ninja, MSVC OpenMP components; official NVIDIA CUDA Toolkit for CUDA builds, Vulkan SDK for Vulkan builds, AMD HIP SDK for HIP builds
macOSXcode or Xcode Command Line Tools, plus CMake. Metal builds also require the Metal compiler available through xcrun

Homebrew Install

On macOS, audio.cpp can be installed from the Homebrew tap:

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

For Nix and NixOS builds, see docs/build/nixos.md.

Composite Builds

Composite builds let you compile only the model families you need. full is the default and is what release/Docker builds should use. custom registers only the requested loaders while still linking required internal dependencies; core builds the runtime without the optional model-family set.

The helper scripts expose this as --model-set and --models on Linux/macOS, and -ModelSet and -Models on Windows:

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

Direct CMake builds use the same underlying variables:

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

Linux Build

Use the Linux helper script for CPU, CUDA, Vulkan, or HIP builds:

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 hip --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cpu --target audiocpp_cli --target audiocpp_server

The script writes to aligned build directories such as build/linux-cuda-release, build/linux-vulkan-release, build/linux-hip-release, and build/linux-cpu-release.

Without --cuda-arch, CUDA builds use the portable arch list (works on many GPUs, slower to build). For a faster build targeting only the local GPU, pass --cuda-arch native (CMake >= 3.24; on older CMake this falls back to the portable list) or an explicit arch list:

scripts/build_linux.sh --backend cuda --cuda-arch native --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend cuda --cuda-arch "86;89" --target audiocpp_cli --target audiocpp_server

Composite examples:

scripts/build_linux.sh --backend cuda --model-set full --target audiocpp_cli
scripts/build_linux.sh --backend cuda --model-set custom --models qwen3_tts,pocket_tts,qwen3_asr --target audiocpp_cli
scripts/build_linux.sh --backend cpu --model-set core --target audiocpp_cli

For portable CPU kernels on machines where native ISA flags are not suitable:

scripts/build_linux.sh --backend cuda --native-cpu OFF --target audiocpp_cli --target audiocpp_server

For deployment builds with compiled package specs:

scripts/build_linux.sh --backend cuda --deployment-build --target audiocpp_cli --target audiocpp_server

For native WebUI model downloads, enable the native model manager:

scripts/build_linux.sh --backend cuda --native-model-manager --target audiocpp_server

For direct CMake commands, see docs/build/linux.md.

Windows Build

Use the Windows PowerShell build script:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\build_windows.ps1

Common presets:

.\scripts\build_windows.ps1 -Preset windows-cuda-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Preset windows-vulkan-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Preset windows-cpu-release -Target audiocpp_cli
.\scripts\build_windows.ps1 -Target audiocpp_server -Jobs 16
.\scripts\build_windows.ps1 -Preset windows-cuda-release -ModelSet custom -Models "qwen3_tts,pocket_tts,qwen3_asr" -Target audiocpp_cli

From cmd.exe, use the wrapper:

scripts\build_windows.cmd

For deployment builds with compiled package specs:

.\scripts\build_windows.ps1 -DeploymentBuild -Target audiocpp_cli

For native WebUI model downloads, enable the native model manager:

.\scripts\build_windows.ps1 -NativeModelManager -Target audiocpp_server

For requirements, CPU profiles, CUDA packaging, and release zips, see docs/build/windows.md.

macOS CPU Build

Apple builds enable Metal by default. To build a CPU-only binary, disable Metal explicitly:

cmake -S . -B build/macos-cpu-release \
  -DCMAKE_BUILD_TYPE=Release \
  -DENGINE_ENABLE_CUDA=OFF \
  -DENGINE_ENABLE_VULKAN=OFF \
  -DENGINE_ENABLE_METAL=OFF \
  -DENGINE_ENABLE_OPENMP=OFF \
  -DGGML_OPENMP=OFF
cmake --build build/macos-cpu-release \
  --parallel "$(sysctl -n hw.logicalcpu)" \
  --target audiocpp_cli audiocpp_server audiocpp_gguf

Confirm that the resulting CLI sees the host CPU backend:

build/macos-cpu-release/bin/audiocpp_cli --list-devices

Metal Build

On macOS, use the Metal helper script to build against ggml's Metal backend:

scripts/build_metal.sh --target audiocpp_cli

The script configures build/macos-metal-release by default, enables ENGINE_ENABLE_METAL=ON, disables CUDA and Vulkan, embeds the Metal shader library, and builds static libraries plus the requested target.

Useful variants:

scripts/build_metal.sh --target audiocpp_server
scripts/build_metal.sh --build-type Release --archs arm64 --target audiocpp_cli
scripts/build_metal.sh --model-set custom --models qwen3_tts,pocket_tts --target audiocpp_cli
scripts/build_metal.sh --with-tests --target audio_dsp_test
scripts/build_metal.sh --openmp auto --target audiocpp_cli
scripts/build_metal.sh --native-cpu OFF --target audiocpp_cli
scripts/build_metal.sh --deployment-build --target audiocpp_cli

The built CLI is written to:

build/macos-metal-release/bin/audiocpp_cli

HIP/ROCm Build

On Linux and Windows, HIP builds compile ggml's CUDA backend sources as HIP code for AMD GPUs. ENGINE_ENABLE_HIP and ENGINE_ENABLE_CUDA are mutually exclusive — configure with exactly one of them.

Linux (the helper script auto-detects ROCm via ROCM_PATH/HIP_PATH/hipconfig and local GPU targets via amdgpu-arch, falling back to rocminfo; pass --gpu-targets to build for other architectures, or when no AMD GPU is visible, e.g. in a VM or container):

scripts/build_linux.sh --backend hip --target audiocpp_cli --target audiocpp_server
scripts/build_linux.sh --backend hip --gpu-targets "gfx1100;gfx1103" --target audiocpp_cli

Direct CMake:

cmake -S . -B build_hip \
  -DENGINE_ENABLE_HIP=ON \
  -DGPU_TARGETS=gfx1151 \
  -DCMAKE_C_COMPILER="$(hipconfig -l)/clang" \
  -DCMAKE_CXX_COMPILER="$(hipconfig -l)/clang++" \
  -DCMAKE_BUILD_TYPE=Release
cmake --build build_hip -j$(nproc)

Windows (the helper script auto-detects ROCm, GPU targets, cmake, and ninja):

powershell -ExecutionPolicy Bypass -File scripts\build_windows_hip.ps1

Run with --backend hip (rocm is accepted as an alias). For GPU target selection, hipBLASLt GEMM notes, iGPU tuning, and known limitations, see docs/build/HIP.md.

Build Options

OptionMeaningDefault
ENGINE_ENABLE_CUDAEnable the ggml CUDA backend. Required for --backend cuda.OFF
ENGINE_ENABLE_HIPEnable the ggml HIP backend (AMD GPUs). Required for --backend hip; mutually exclusive with ENGINE_ENABLE_CUDA.OFF
ENGINE_ENABLE_VULKANEnable the ggml Vulkan backend. Required for --backend vulkan.OFF
ENGINE_ENABLE_METALEnable the ggml Metal backend. Required for --backend metal.OFF on most platforms, ON on Apple
ENGINE_ENABLE_LLAMAFILEEnable llamafile SGEMM support in ggml CPU builds.ON
ENGINE_ENABLE_CUDA_GRAPHSEnable ggml CUDA graphs support when CUDA is enabled.ON
ENGINE_ENABLE_NATIVE_CPUBuild ggml CPU kernels with native host ISA flags such as -march=native. Disable this for portable CPU kernels or toolchains that reject generated CPU instructions.ON
ENGINE_ENABLE_OPENMPEnable OpenMP for host-side parallel work.ON
ENGINE_BUILD_EXAMPLESBuild example binaries.OFF
ENGINE_BUILD_TESTSBuild framework unit tests.OFF
ENGINE_BUILD_EXTENDED_TESTSBuild extended non-model tests and probes, such as server/app/package-manager checks and backend graph tests.OFF
ENGINE_BUILD_MODEL_TESTSBuild model-specific tests and probes.OFF
ENGINE_BUILD_WARMBENCHBuild warmbench helper binaries.OFF
AUDIOCPP_BUILD_NATIVE_MODEL_MANAGERBuild the standalone native model manager and enable server-side WebUI downloads/install management. This opt-in feature builds the HTTP/TLS dependency.OFF
AUDIOCPP_USE_SYSTEM_OPENSSLUse system OpenSSL instead of bundled BoringSSL when native model management is enabled.OFF
AUDIOCPP_DEPLOYMENT_BUILDCompile package specs into CLI/server binaries for standalone GGUF and package-spec fallback loading. Script builds expose this as --deployment-build on Linux/macOS and -DeploymentBuild on Windows.OFF
Native model manager script flagBuild scripts expose AUDIOCPP_BUILD_NATIVE_MODEL_MANAGER as --native-model-manager on Linux/macOS and -NativeModelManager on Windows. --system-openssl / -SystemOpenSsl and --boringssl-archive / -BoringSslArchive configure its TLS backend.disabled
AUDIOCPP_MODEL_SETModel composite to build: full, core, or custom. Script builds expose this as --model-set on Linux/macOS and -ModelSet on Windows.full
AUDIOCPP_MODELSComma or semicolon separated model target names when AUDIOCPP_MODEL_SET=custom, such as qwen3_tts,pocket_tts,qwen3_asr. Script builds expose this as --models on Linux/macOS and -Models on Windows.empty

Usage

For full setup, CLI, server, and workflow examples, see docs/usage.md.

CLI

The main CLI binary is:

build/bin/audiocpp_cli

High-level command shape:

audiocpp_cli --task <task> --model <path> [--family <family>] [--backend <backend>] [--mode <mode>] [options]

Core selectors:

  • --task vad|asr|diar|sep|gen|tts|clon|vc|s2s|align|vdes|spk|svc
  • --model <path>
  • --family <name> optionally narrows model-loader selection when a model path could match more than one family
  • --backend cpu|cuda|vulkan|metal|best
  • --mode offline|streaming; streaming is available for models whose docs list streaming support

Common interface options:

  • --load-option key=value passes model-load options, such as PocketTTS language selection
  • --session-option key=value passes session/runtime options, such as backend-specific weight controls
  • --request-option key=value passes per-request model options
  • --config <id> selects a discovered config asset
  • --weight <id> selects a discovered weight asset
  • --device <n> selects the backend device
  • --threads <n> sets backend and OpenMP worker threads

Examples:

Text-to-speech:

build/bin/audiocpp_cli \
  --task tts \
  --family pocket_tts \
  --model /path/to/model \
  --backend cuda \
  --text "audio.cpp is running PocketTTS locally." \
  --voice-ref assets/resources/sample.wav \
  --out build/out/pocket_tts.wav

PocketTTS with another language and a built-in voice:

build/bin/audiocpp_cli \
  --task tts \
  --family pocket_tts \
  --model /path/to/models/pocket-tts \
  --backend cuda \
  --load-option language=spanish \
  --text "Hola, esta es una prueba corta de Pocket TTS." \
  --voice-id alba \
  --out build/out/pocket_tts_spanish.wav

ASR:

build/bin/audiocpp_cli \
  --task asr \
  --family qwen3_asr \
  --model /path/to/model \
  --backend cuda \
  --audio assets/resources/sample_16k.wav

Voice conversion:

build/bin/audiocpp_cli \
  --task vc \
  --family seed_vc \
  --model /path/to/model \
  --backend cuda \
  --audio assets/resources/a.wav \
  --voice-ref assets/resources/b.wav \
  --out build/out/seed_vc.wav

Useful CLI features:

  • --help with --task shows task-oriented help
  • --help with --model <path> and optional --family <family> shows model-owned request, session, and load options
  • --inspect prints discovered configs, weights, and capabilities
  • --list-loaders prints registered model families (--json for the machine-readable contract)
  • python tools/model_manager_v2.py list --json prints installable packages from model_specs/*.json
  • --batch-text-file <txt> runs one offline request per non-empty line
  • --batch-text-dir <dir> runs one offline request per .txt, .md, or .json file, normalizing each file as one paragraph
  • --batch-audio-dir <dir> runs one offline request per .wav
  • --audio-chunk-mode auto lets ASR/alignment models choose their safe long-audio policy; expert users can override with fixed, vad, or none where supported
  • --request-sequence <json> runs a multi-request offline session
  • --batch-merge-audio none|concat controls batch audio merge behavior
  • --batch-manifest-out <json> writes a batch output manifest
  • --metrics prints compact offline wall time, audio duration, RTF, realtime speed, sample rate, and channel metrics
  • Use --request-sequence <json> --metrics for per-request metrics from one long-lived offline session
  • --pipeline <json> runs a workflow instead of a raw task
  • --list-pipelines prints registered workflows
  • --workflow-input key=value overrides pipeline inputs
  • --log streams framework logs to stdout
  • --log-file <path> streams framework logs to a file in real time
  • --segments-out, --turns-out, and --words-out write structured JSON outputs
  • --vad-chunks-out writes offline VAD-based chunk windows; tune them with --vad-chunk-max-seconds, --vad-chunk-merge-gap-seconds, and --vad-chunk-padding-seconds

Server

The server binary is:

build/bin/audiocpp_server

Build:

cmake --build build -j$(nproc) --target audiocpp_server

Create a config file with your own model paths:

cat > server.json <<'JSON'
{
  "host": "127.0.0.1",
  "port": 8080,
  "backend": "cuda",
  "device": 0,
  "threads": 1,
  "lazy_load": true,
  "models": [
    {
      "id": "pocket-tts",
      "family": "pocket_tts",
      "path": "/path/to/models/pocket-tts",
      "task": "tts",
      "mode": "offline",
      "load_options": {
        "language": "english"
      },
      "session_options": {
        "language": "english"
      }
    },
    {
      "id": "qwen3-asr",
      "family": "qwen3_asr",
      "path": "/path/to/models/Qwen3-ASR-0.6B",
      "task": "asr",
      "mode": "offline"
    }
  ]
}
JSON

Set "lazy_load": true to register configured model ids at startup while loading each model only on first use. Use per-model "lazy": true or "lazy": false to override that default.

Set top-level "backend" to "cuda", "cpu", "vulkan", "metal", or "hip". CUDA is the optimized path for audio.cpp; CPU, Vulkan, Metal, and HIP are intended for portability and testing when the binary is built with that backend, but performance and model coverage may be lower.

[!WARNING] Lazy loading does not unload models after a request. Once a model is first used, the server keeps that model and session in memory for reuse until the server exits, unless max_loaded_models limits residency.

Set top-level "max_loaded_models" (or start with --max-loaded-models <n>) to bound how many models stay resident in memory at once: loading one more past the limit first unloads the least recently used idle model, and 1 enforces a single loaded model at a time. The default 0 keeps every used model in memory. See app/server/README.md for details.

Start:

build/bin/audiocpp_server --config server.json

The server exposes:

  • GET /health
  • GET /v1/models
  • POST /v1/audio/speech
  • POST /v1/audio/transcriptions
  • POST /v1/audio/transcriptions/details
  • POST /v1/audio/alignments
  • POST /v1/tasks/run

More server examples are in app/server/README.md.

Pipelines

Pipelines are an experimental JSON workflow feature for chaining multiple model and audio-processing steps behind one CLI command. A pipeline can define default inputs, let users override them with --workflow-input key=value, split long media into model-sized chunks, merge text or audio outputs back together, write intermediate artifacts under --out-dir, and copy the declared final_audio to --out.

This is the higher-level layer for production-style audio jobs: redubbing, batch cleanup, long-form narration, voice conversion, source-separation workflows, transcription-plus-alignment, and future workflows that combine translation, diarization, denoise, enhancement, or review steps as those model surfaces are wired into the framework.

The included same-language speech redub pipeline transcribes long speech in chunks with Qwen3 ASR, merges the transcript, then regenerates the speech in a target reference voice with Qwen3 TTS. The default test input assets/resources/speech.wav is about 418 seconds long and was generated from an 8,091-character speech text, so it exercises long-audio split and merge behavior rather than a short one-shot request:

build/bin/audiocpp_cli \
  --pipeline assets/pipeline/speech_redub.json \
  --backend cuda \
  --out-dir build/out/speech_redub_pipeline \
  --out build/out/speech_redub_pipeline.wav

Override the source speech or target voice without editing the JSON:

build/bin/audiocpp_cli \
  --pipeline assets/pipeline/speech_redub.json \
  --backend cuda \
  --workflow-input source_audio=/path/to/speech.wav \
  --workflow-input target_voice=/path/to/voice.wav \
  --workflow-input language=English \
  --out-dir build/out/speech_redub_pipeline \
  --out build/out/speech_redub_pipeline.wav

Tests

The repository includes both framework-level parity validation and app-level end-to-end path checks. At a high level, the flow is:

Parity test flow

The main harness under tests/ is tests/warmbench.py. It is used for long-lived multi-request validation, parity checks against Python references, and performance-oriented session reuse scenarios. The tests/ tree also contains model-specific C++ and Python warmbench entrypoints that warmbench.py coordinates.

The main app-facing test tooling under tools/ is tools/audiocpp_cli/run_audiocpp_cli_path_tests.py. It drives audiocpp_cli through cataloged offline and streaming cases, verifies expected outputs such as audio or JSON artifacts, and is useful for checking real user-facing request paths rather than just lower-level model components. Streaming coverage is model-specific and applies to models documented with streaming support.

The Python-reference side of these tests usually requires more time-consuming setup than the C++ path because different models rely on different Python reference repos and dependency stacks. In practice, the framework-side tooling is fast to iterate on once models are installed, while Python parity runs often need extra environment preparation before they are ready.

Projects

Last update: 2026-08-17

Have a project using audio.cpp? Submit a PR or let me know, and I’ll be happy to add it here.

  • TranscrIA is a self-hosted meeting transcription platform with diarization and local LLM correction. audio.cpp is integrated as a first-class STT engine in the product.
  • Pocket TTS Browser Engine uses audio.cpp to bring fully local PocketTTS voices into Chrome and Edge through the browser TTS API.
  • GuideAnts uses audio.cpp as the default local AI stack path for basic ASR and TTS, with planned reusable skills for audio.cpp scenarios and model configurations.
  • audio.cpp-webui provides a full-task Python/Gradio WebUI for audio.cpp, focused on browser-based model downloads and common TTS, ASR, voice conversion, diarization, music, and audio workflows.
  • audio.cpp-hub is a Web GUI for audio.cpp that packages model-oriented workflows around the native runtime.
  • Delusion provide Pythonic, strongly typed wrapper classes around audio.cpp usage, including model download/cache helpers and typed request surfaces.
  • AudioCppTray is a Windows tray management tool for audiocpp_server.exe, with start/stop/restart controls, notifications, log viewing, log rotation, and server configuration shortcuts.

Performance Metrics

[!WARNING] These Python-relative numbers were measured for the initial release. Several model paths have improved substantially since then, so the figures below should be read as the original release baseline rather than the latest peak performance.

All performance metrics in this section were measured on Ubuntu with the CUDA backend on an NVIDIA GeForce RTX 5090. The Python-relative one-shot and long-lived-session comparisons come from direct framework/runtime API benchmark calls, not from audiocpp_cli; CLI path tests are separate and include app-layer request parsing, output writing, and other user-facing overhead.

Absolute RTF depends on the GPU and system setup, but the Python-relative speedups are real because audio.cpp and the matching Python reference paths were measured on the same CUDA setup.

audio.cpp already shows some genuinely exciting wins against the matching Python reference paths, especially on the TTS side, even when using the original model weights without quantization. The headline win is wall time: several TTS paths run 1.8x to up to 10x faster than Python while cutting end-to-end latency by 45%-90%.

  • In one-shot runs, several TTS-family models already land far ahead of Python:
    • vevo2: 5.03x faster with 80.11% less wall time
    • pocket tts: 3.68x faster with 72.80% less wall time
    • miotts: 2.73x faster with 63.39% less wall time
    • moss_tts_local: 2.33x faster with 57.07% less wall time
    • qwen3 tts: 1.83x faster with 45.34% less wall time
    • vibevoice: 1.40x faster with 28.75% less wall time
  • In long-lived-session runs, where the same loaded session serves multiple requests in sequence, the gains stay strong:
    • pocket tts: 3.22x faster with 68.91% less wall time
    • qwen3 tts: 2.74x faster with 63.47% less wall time
    • moss_tts_local: 2.66x faster with 62.35% less wall time
    • miotts: 2.28x faster with 56.22% less wall time
    • vibevoice: 1.77x faster with 43.55% less wall time
    • vevo2: 1.75x faster with 42.72% less wall time
  • In long-form runs on the shared 6,026-character, 1,028-word passage, the strongest Python-relative wins still show up clearly:
    • pocket tts: 3.15x faster with 68.23% less wall time
    • qwen3 tts: 3.06x faster with 67.33% less wall time
    • vibevoice: 2.86x faster with 65.07% less wall time
    • vevo2: 1.77x faster with 43.51% less wall time
    • chatterbox: 1.58x faster with 36.83% less wall time
  • These long-lived-session numbers are especially important for real applications, because they reflect the common case where model load, cached state, and reusable runtime setup are amortized across many requests.
  • Bars below the 1.0x line are useful too: they spotlight exactly where more optimization work is still worth doing.

One-shot

Long-lived session

The figures report Python wall time / audio.cpp wall time. The 1.0x line means equal wall time; bars above 1.0x mean audio.cpp is faster than Python, and bars below 1.0x mean it is slower.

For TTS-family models, the measured one-shot RTF is:

modelaudio len (s)wall time (s)RTFx faster than real time
chatterbox9.722.450.2523.97x
miotts20.403.300.1626.18x
moss_tts_local9.600.970.1019.91x
omnivoice9.001.320.1466.84x
pocket tts8.080.260.03231.09x
qwen3 tts11.444.460.3902.56x
vevo28.662.470.2853.51x
vibevoice11.075.020.4542.20x
voxcpm25.603.090.5511.81x

For long-form TTS tests, each run uses the same 6,026-character, 1,028-word input text (vibevoice uses 106,310 chars, 18,052 words, 4 speakers). Rows are CUDA unless marked CPU. The measured RTF is:

modelaudio len (s)wall time (s)RTFx faster than real time
chatterbox391.2458.570.1506.68x
index tts2422.12139.950.3323.02x
miotts399.1666.590.1675.99x
moss_tts_nano391.2043.160.1109.06x
moss_tts_local375.4473.840.1975.08x
omnivoice357.0017.770.05020.09x
pocket tts353.127.300.02148.40x
qwen3 tts327.6072.650.2224.51x
supertonic379.322.020.005187.62x
supertonic (CPU)379.4061.400.1626.18x
vevo2457.6852.470.1158.72x
voxcpm2315.8472.700.2304.34x
vibevoice5615.731376.840.2454.08x

Runtime Memory Options

Some models expose memory-saver session options such as ace_step.mem_saver=true, dramabox.mem_saver=true, heartmula.mem_saver=true, stable_audio.mem_saver=true, omnivoice.mem_saver=true, and voxcpm2.mem_saver=true. These options keep the default output path unchanged while reducing graph workspace VRAM or releasing staged graph/cache state after request phases; later requests may rebuild released graphs.

Precision/Quantization Support

Many model sessions expose quantization through --session-option <family>.weight_type=<mode>, and some families also expose more specific knobs such as ...conv_weight_type, ...talker_weight_type, or ...speech_decoder_weight_type. The exact supported modes are model-specific rather than global.

audio.cpp also supports standalone GGUF packages.

In practice, lower precision and quantized modes should be treated as model- and route-specific optimizations rather than universally safe defaults.

  • Safety. Quantization may not be safe on every path even when a model parser accepts the option. For example, in our ACE-Step 1.5 checks, lower-precision runs could fail at runtime with ACE-Step planner masked decode found no valid token while higher-precision settings completed normally.

  • Quality Drop. Output quality can drop a lot. In our VeVo2 checks, non-fp32 outputs showed noticeably weaker similarity to the fp32 reference under the repo's existing waveform and log-mel comparison metrics, and even output length could shift.

  • Performance Gain. The performance gain may be minor relative to that quality risk. For example, q8_0 was faster than the default setting by only around 3.8% on Qwen3-TTS and around 3.6% on VeVo2. Other models may benefit more, but the tradeoff should be validated per model and per route rather than assumed.

  • Memory Benefit. Lower precision and quantized weights can still be useful for reducing weight memory footprint and making larger models easier to fit within device limits. For example, in our Qwen3-TTS checks, switching from the default setting to q8_0 reduced peak RAM by about 3.7% and peak VRAM by about 25.0%. That benefit is real, but it should be evaluated together with runtime stability, output quality, and end-to-end speed rather than assumed from precision alone.

Notes

  • The repo supports multiple backends, but backend and model coverage are model-dependent.
  • GGUF is a container, not a universal architecture adapter. Existing llama.cpp or whisper.cpp GGUF files are not automatically compatible unless their tensor names and model metadata are mapped to the audio.cpp family implementation.
  • Build_xcframework.sh is outdated; Metal and Apple XCFramework packaging still need to be retested after the framework refactor.

Contributors

(top 30 of 65)

0xShug0

355 commits

mirek190

42 commits

fedeizzo

10 commits

Languages

C++

89.3%

Python

8.4%