Files
omnivoice-cpp/README.md
T
2026-07-05 18:25:49 +07:00

116 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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(&params);
params.text = "Hello world.";
params.lang = "English";
struct ov_audio audio = { 0 };
ov_synthesize(ov, &params, &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.