audio.cpp: кроссплатформенное распознавание речи и TTS на чистом C++
Собираем audio.cpp с Metal, Vulkan или CUDA, ставим модели и запускаем транскрипцию Parakeet и клонирование голоса VoxCPM2 без среды Python.
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 их вариантов.