# omnivoice.cpp - docker version Локальный искусственный интеллект для синтеза речи (Text-to-Speech) с клонированием и конструированием голоса, работающий на базе GGML. Порт проекта OmniVoice на C++17. Поддержка 646 языков, выходной сигнал 24 кГц (моно), контейнер работает на CPU и Vulkan. Исходный проект: https://github.com/ServeurpersoCom/omnivoice.cpp ## Возможности - Клонирование голоса по эталонному WAV-файлу и его транскрипту - Конструирование голоса через ключевые атрибуты (пол, возраст, высота тона, стиль, громкость, эмоции) - Авто-голос с сохранением идентичности говорящего на длинных текстах - Длительный синтез с учетом пунктуации, выделение голосовых промптов, кроссфейд и удаление тишины по стандартам pydub - Побитовая детерминированность в жадном режиме (greedy mode), генерация через семафорное распределенное случайное число (PRNG Philox) - Квантование модели Qwen3 (612 млн параметров) в формат Q8_0 - Два консольных инструмента: omnivoice-tts (текст -> WAV) и omnivoice-codec (WAV <-> RVQ коды) - OpenAI API-совместивый сервер с возможностью интеграции в Open WebUI (tools/tts-server) ## Сборка образа Docker ``` git clone --recurse-submodules https://github.com/ServeurpersoCom/omnivoice.cpp.git cd omnivoice.cpp ./buildvulkan.sh # Most GPUs (Vulkan) and CPU (if GPU unavailable) reference docker-compose build ``` ## Конвертация моделей Предварительно сконвертированные GGUF доступны на Hugging Face: https://huggingface.co/Serveurperso/OmniVoice-GGUF Положите их в папку models/ и переходите к быстрому старту. Для конвертации из исходного чекпоинта: ``` ./checkpoints.sh # hf download k2-fsa/OmniVoice -> checkpoints/ ./convert.py # 2 GGUFs in BF16 -> models/ ./quantize.sh # base LM Q8_0 (tokenizer stays at native dtype) ``` ## Быстрый старт ``` echo "Hello world." | ./build/omnivoice-tts \ --model models/omnivoice-base-Q8_0.gguf \ --codec models/omnivoice-tokenizer-F32.gguf \ --lang English -o hello.wav ``` Копирование голоса : ``` ./build/omnivoice-tts \ --model models/omnivoice-base-Q8_0.gguf \ --codec models/omnivoice-tokenizer-F32.gguf \ --ref-wav ref.wav --ref-text ref.txt \ --lang English -o out.wav < prompt.txt ``` Готовый эталон (clone.sh): утилита `omnivoice-codec` кодирует эталонный WAV в компактный латент .rvq. Она применяет точную предобработку эталона для синтеза, поэтому коды битово идентичны файлу из `--ref-wav`. Передача через --ref-rvq пропускает кодировку кодеком при каждом синтезе: ``` build/omnivoice-codec --model models/omnivoice-tokenizer-F32.gguf -i ref.wav build/omnivoice-tts \ --model models/omnivoice-base-Q8_0.gguf \ --codec models/omnivoice-tokenizer-F32.gguf \ --ref-rvq ref.rvq --ref-text ref.txt \ --lang English -o out.wav < prompt.txt ``` ## Встраивание библиотеки Консольные утилиты — это тонкая оболочка над открытым ABI. Однозаголовочная библиотека, единый префикс имени, чистая C-связка. Это позволяет использовать её одинаково в C, C++, Python (ctypes), Rust (bindgen) и Go (cgo). ```c #include "omnivoice.h" struct ov_init_params iparams; ov_init_default_params(&iparams); iparams.model_path = "models/omnivoice-base-Q8_0.gguf"; iparams.codec_path = "models/omnivoice-tokenizer-F32.gguf"; struct ov_context * ov = ov_init(&iparams); struct ov_tts_params params; ov_tts_default_params(¶ms); params.text = "Hello world."; params.lang = "English"; struct ov_audio audio = { 0 }; ov_synthesize(ov, ¶ms, &audio); /* audio.samples, audio.n_samples, audio.sample_rate, audio.channels */ ov_audio_free(&audio); ov_free(ov); ``` tests/abi-c.c собирается с флагами -std=c99 -Wall -Werror -pedantic при каждой сборке. Любая регрессия, ломающая совместимость с чистым C, остановит сборку, а не просто станет опциональной целью. Для создания связывающей разделяемой библиотеки (libomnivoice.so / .dll / .dylib) используйте конфигурацию cmake -DOMNIVOICE_SHARED=ON .... Разделяемый объект экспортирует только символы ov_*; все внутренние pipeline_* и backend_* остаются скрытыми внутри .so. Ознакомьтесь с docs/ARCHITECTURE.md для сведений о модели, структуре GGUF, конвейере вывода (inference pipeline), всех флагах CLI, справке по общедоступному API и результатах валидации. ## Лицензия MIT. См. [LICENSE](LICENSE). Исходная модель : OmniVoice от Xiaomi / k2-fsa, Apache 2.0. Аудиокодек: Higgs Audio v2 (`bosonai/higgs-audio-v2-tokenizer`), Apache 2.0.