2026-07-05 18:24:47 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:24:47 +07:00
2026-07-05 18:11:23 +07:00
2026-07-05 18:11:23 +07:00

omnivoice.cpp - docker version

Локальный искусственный интеллект для синтеза речи (Text-to-Speech) с клонированием и конструированием голоса, работающий на базе GGML. Порт проекта OmniVoice на C++17. Поддержка 646 языков, выходной сигнал 24 кГц (моно), контейнер работает на CPU и Vulkan.

Возможности

  • Клонирование голоса по эталонному 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).

#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.

Исходная модель : OmniVoice от Xiaomi / k2-fsa, Apache 2.0. Аудиокодек: Higgs Audio v2 (bosonai/higgs-audio-v2-tokenizer), Apache 2.0.

S
Description
No description provided
Readme MIT 4.1 MiB
Languages
C++ 57.8%
C 23.5%
Cuda 8.6%
Metal 2.4%
GLSL 1.8%
Other 5.9%