Головна / Статті / audio.cpp: кросплатформне розпізнавання мовлення й TTS на чистому C++

audio.cpp: кросплатформне розпізнавання мовлення й TTS на чистому C++

Збираємо audio.cpp з Metal, Vulkan або CUDA, встановлюємо моделі й запускаємо транскрипцію Parakeet і клонування голосу VoxCPM2 без середовища Python.

833 слів

Python-бібліотеки для роботи з мовленням на Mac добрі, доки не треба запустити той самий код деінде. Гарний приклад — mlx-audio. Вона побудована на фреймворку Apple MLX, швидко виконує інференс на Apple Silicon і з коробки підтримує десятки моделей розпізнавання й синтезу мовлення. Її обмеження — переносимість: вона зроблена під Mac. audio.cpp іде протилежним шляхом. Це рушій інференсу мовлення з відкритим кодом, написаний на звичайному C++ поверх середовища ggml, з бекендами Metal, Vulkan і CUDA для швидкого інференсу на GPU.

Що він уміє

  • Запускає довгий список популярних відкритих моделей ASR і TTS.
  • Працює на Windows, macOS і Linux.
  • Використовує стек ggml, тож можна обрати CUDA, HIP/ROCm, Vulkan, Metal або просто CPU.
  • Підтримує JSON-пайплайни, щоб поєднувати кроки в більші процеси.
  • Містить утиліти для шумозаглушення, покращення звуку, ресемплінгу та STFT/ISTFT.

Які моделі можна запустити

Для синтезу мовлення є, серед іншого, Qwen3-TTS, VibeVoice, VoxCPM2, Fun-CosyVoice3, сімейство IndexTTS-2, Higgs Audio v3, Fish Audio S2 Pro, Kokoro 82M, OmniVoice, Chatterbox, BreezeTTS 2 і Supertonic 3.

До розпізнавання мовлення входять два розміри Qwen3-ASR (0.6B і 1.7B), Fun-ASR-Nano, Higgs Audio v3 STT, VibeVoice ASR у звичайному й потоковому варіантах, Nemotron 3.5 ASR Streaming і Voxtral-Mini-4B-Realtime.

Генерацію музики покривають MiniMax Music 3, ACE-Step 1.5 Turbo, версії Small і Medium моделі Stable Audio 3 та інші.

Локальне збирання

Спочатку завантажте код:

git clone https://github.com/0xShug0/audio.cpp.git
cd audio.cpp

Потім зберіть під той бекенд, який пасує вашому залізу. На Linux з Vulkan:

scripts/build_linux.sh --backend vulkan --target audiocpp_cli --target audiocpp_server

На Linux з відеокартою NVIDIA натомість використовуйте CUDA: можна дати збиранню самому визначити архітектуру або вказати конкретні:

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

На Mac використовуйте скрипт для Metal:

scripts/build_metal.sh --target audiocpp_cli

Коли збирання з Metal завершиться, бінарник audiocpp_cli з'явиться в build/macos-metal-release/bin. Цей єдиний CLI виконує широкий набір задач, які обираються за назвою:

  • Виявлення й аналіз: vad знаходить голосову активність, spk відповідає за ембединги й розпізнавання мовців, align робить примусове вирівнювання, а diar розділяє мовців.
  • Основна робота з мовленням: asr транскрибує, tts синтезує, clon клонує голоси, а vdes їх конструює.
  • Перетворення: vc змінює голос, s2s перетворює мовлення на мовлення, svc перетворює співочий голос, а sep розділяє джерела.
  • Генерація й транскрипція: gen створює музику чи звук за текстом або аудіо, а midi перетворює аудіо на символьні MIDI-події.

Як отримати моделі

Завантаженнями займається вбудований Model Manager, і він розуміє такі команди:

list                list installable packages
info                show one package or family default
sizes               check package download sizes without downloading files
installed           report locally installed packages without network access
uninstall           remove only the files belonging to one installed package
clean-partial       remove abandoned staging downloads for one package
install             install one Hugging Face or ModelScope snapshot package

Почніть зі списку доступного:

python3 tools/model_manager_v2.py list

Консоль виведе пакети, які можна встановити. Щоб спробувати обидва напрямки, встановіть Parakeet-TDT-0.6B-v3 для розпізнавання і VoxCPM2 для синтезу:

# ASR
python3 tools/model_manager_v2.py install parakeet_tdt_q8_0
# TTS
python3 tools/model_manager_v2.py install voxcpm2_q8_0

Пробуємо на ділі

Для розпізнавання вкажіть CLI файл Parakeet у форматі GGUF і WAV-файл:

build/macos-metal-release/bin/audiocpp_cli  \
  --task asr \
  --model models/Parakeet-TDT-0.6B-v3-GGUF/parakeet-tdt-0.6b-v3-q8_0.gguf \
  --audio lisa.wav

У відповідь консоль покаже сімейство моделі, задачу, режим, часові мітки на рівні слів із позиціями семплів і впевненістю, а також підсумковий текст транскрипту:

family=parakeet_tdt
task=asr
mode=offline
word_timestamps=[{"start_sample":0,"end_sample":14080,"word":"Breeze","confidence":0}, ...]
text_output=Breeze TTS2 is an open-weight text-to-speech model built for real-time interaction.

Для синтезу через VoxCPM2 простому клонуванню голосу потрібні рядок тексту й еталонний запис:

build/macos-metal-release/bin/audiocpp_cli \
  --task tts \
  --model models/VoxCPM2-GGUF \
  --text "audio.cpp is running VoxCPM2 locally." \
  --voice-ref lisa.wav \
  --out voxcpm2.wav

Точніше "ultimate"-клонування додатково отримує транскрипт еталонного фрагмента, і це допомагає моделі точніше влучити в голос:

build/macos-metal-release/bin/audiocpp_cli \
  --task tts \
  --model models/VoxCPM2-GGUF \
  --text "audio.cpp is running VoxCPM2 locally." \
  --voice-ref lisa.wav \
  --reference-text "Breeze TTS 2 is an open-weight text-to-speech model built for real-time interaction." \
  --out voxcpm2.wav

Чи варто на нього дивитися?

Порівняно з mlx-audio audio.cpp легший. Йому не потрібні ні середовище Python, ні купа сторонніх пакетів. Якщо ви робите кросплатформні ШІ-функції, що залежать від розпізнавання чи синтезу мовлення, протестуйте його. Якщо потрібна лише транскрипція, придивіться до transcribe.cpp — спорідненого проєкту, який охоплює 16 популярних відкритих моделей ASR і понад 60 їхніх варіантів.