Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 18 липня 2026

Vocalizer: локальний синтез мовлення для PHP

Vocalizer - це нативне PHP-розширення від Akram Zerarka, яке виконує синтез мовлення з тексту локально, без API-викликів і залежностей під час виконання. Розширення вбудовує два бекенди виведення - sherpa-onnx (ONNX Runtime) та audio.cpp (ggml) - і поставляється як готовий бінарний файл .so, тому компіляція не потрібна.

Ключові можливості

Розширення надає наступний функціонал:

  • Вісім сімейств моделей, один API - Chatterbox, Supertonic, Piper/VITS, Pocket, Kokoro, Kitten, Matcha та ZipVoice з автоматичним визначенням з директорії моделі
  • Клонування голосу - Chatterbox клонує будь-який голос з 3-10 секундного WAV-зразка для 23 мов
  • Захист від артефактів - вивід Chatterbox перевіряється на пропущений текст, цикли та тишу, і повторно синтезується з новим seed при виявленні проблем
  • Ізоляція збоїв - моделі за замовчуванням працюють у fork-режимі, тому збій двигуна обробляється повторною спробою та перезавантаженням замість падіння PHP-воркера
  • Кешування моделей - моделі завантажуються один раз на PHP-воркер (витіснення LRU, vocalizer.max_models) і залишаються активними для наступних запитів
  • Асинхронний синтез - speakAsync() повертає завдання, на яке можна викликати wait(), з таймаутами для кожного виклику
  • WAV або raw PCM вивід - збереження у файл, отримання WAV як рядка або float32 PCM

Єдиний API для восьми сімейств моделей

Engine::load() вказує на директорію моделі й автоматично визначає бекенд з її вмісту. Синтез виконується одним викликом speak():

use Vocalizer\Engine;
$engine = Engine::load('/opt/voices/sherpa-onnx-supertonic-3-tts-int8-2026-05-11');
$res = $engine->speak('Votre commande est prête.', [
  'lang'       => 'fr',   // обов'язково для Supertonic
  'voice'      => 0,      // 0-9 попередньо налаштовані голоси
  'speed'      => 1.0,
  'timeout_ms' => 30_000,
]);
$res->save('/var/www/audio/notice.wav');
echo $res->seconds, " s in ", $res->generationMs, " ms\n";

Вибір моделі залежить від ваших цілей:

Мета Модель Затримка (CPU)
Найкращий реалізм, клонування голосу Chatterbox Повільно (~20× реального часу)
Швидка багатомовність (31 мова) Supertonic 3 Реальний час
Легке клонування FR/EN Pocket TTS Швидко
Найшвидша, одна модель на локаль Piper/VITS Дуже швидко

Клонування голосу з Chatterbox

Chatterbox охоплює 23 мови з однією моделлю ~7.5 ГБ і клонує голос з короткого WAV-зразка цільовою мовою:

$engine = Engine::load('/opt/voices/chatterbox', [
  'threads' => 4,
  'opts'    => ['weight_type' => 'f16'],   // за замовчуванням: q8_0
]);
$res = $engine->speak('Bonjour, votre commande est prête.', [
  'lang'       => 'fr',
  'reference'  => '/opt/voices/refs/fr.wav',
  'opts'       => [
    'temperature'        => 0.6,
    'repetition_penalty' => 1.2,
    'seed'               => 42,
  ],
  'timeout_ms' => 600_000,
]);
echo $res->qualityRetries;   // повторні спроби (0 = перший результат прийнято)
$res->save('/tmp/out.wav');

Авторегресивні TTS-моделі можуть пропускати текст, зациклюватися або генерувати тишу - саме тут спрацьовує захист від артефактів. Vocalizer перевіряє кожен вивід Chatterbox на відповідність довжині тексту та енергії сигналу, і повторно синтезує підозріле аудіо з новим seed - дві додаткові спроби за замовчуванням, налаштовується через verify_retries. Якщо всі спроби невдалі, викидається Vocalizer\Exception замість повернення пошкодженого аудіо, що спрощує перехід до швидшої моделі:

try {
  $res = $engine->speak($text, ['lang' => 'fr', 'reference' => $ref]);
} catch (\Vocalizer\Exception $e) {
  $res = Engine::load('/opt/voices/sherpa-onnx-supertonic-3-tts-int8-2026-05-11')
    ->speak($text, ['lang' => 'fr']);
}

Ізоляція збоїв та асинхронність

Нативні двигуни виведення можуть падати, і segfault всередині PHP-розширення зазвичай вбиває FPM-воркер разом з ним. Режим ізоляції fork за замовчуванням у Vocalizer запускає синтез у форкнутому дочірньому процесі, тому збій перехоплюється, повторюється (до vocalizer.max_retries), а модель перезавантажується - Vocalizer\CrashException викидається лише коли відновлення неможливе. Chatterbox - виняток: його пул потоків ggml не безпечний для fork, тому він завжди працює в прямому режимі.

Для довших текстів speakAsync() виносить синтез за межі шляху запиту:

$job = $engine->speakAsync($paragraph);
$res = $job->wait(30_000) ?? throw new RuntimeException('still running');

Поведінка налаштовується через директиви php.ini: vocalizer.isolation (fork проти direct), vocalizer.timeout_ms, vocalizer.max_models для кешу моделей на воркер та vocalizer.max_concurrency для асинхронного пулу. Важлива примітка з README: RAM моделей виділяється на кожен FPM-воркер, і сам Chatterbox потребує кілька ГБ.

Встановлення

Vocalizer вимагає Linux x86-64 (glibc ≥ 2.28) та PHP 8.4 або 8.5 NTS - Alpine/musl, ARM та ZTS-збірки не підтримуються. Скрипт встановлення завантажує готове розширення (~44 МБ) і перевіряє його через SHA256:

curl -fsSL https://raw.githubusercontent.com/akramzerarka/vocalizer/main/install.sh | bash

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

./scripts/download-model.sh chatterbox                                    # ~7.5 ГБ
./scripts/download-model.sh sherpa-onnx-supertonic-3-tts-int8-2026-05-11  # ~120 МБ
./scripts/download-model.sh vits-piper-en_US-amy-low                      # ~65 МБ

Розширення ліцензовано під MIT і статично компонує свої залежності, включаючи sherpa-onnx (Apache-2.0), audio.cpp/ggml (MIT), ONNX Runtime (MIT) та espeak-ng (GPL-3.0 дані фонемізації).

Повний довідник API, деталі конфігурації та каталог моделей доступні на GitHub.

9

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Новини 27 жовтня 2026

Filament v5.11.0: поля й віджети на React, Vue і Svelte та жорсткіший захист Livewire

Filament v5.11.0 дозволяє писати власні поля форм, компоненти схем і віджети на React, Vue, Svelte або чистому JavaScript. Паралельно v5.11.0 і v4.16.0 закривають для клієнта внутрішні Livewire-методи та стан і додають опційні ліміти для репітерів і пагінації таблиць.

2
Новини 27 жовтня 2026

Livewire 4.4.8 закриває обхід #[Authorize], а NativePHP Mobile - сім вразливостей

Livewire 4.4.8 виправляє GHSA-mhf7-xp6r-6qrc (CVSS 6.5): атрибут #[Authorize] можна було обійти й виконати дію над чужим записом. Того ж тижня NativePHP опублікувала сім попереджень для NativePHP for Mobile - виправлення в nativephp/mobile 4.6.1 і 3.3.11, але до користувачів вони дійдуть лише з новою збіркою застосунку.

1

Вакансії за темою

Nova Digital Нова
Сьогодні

PHP Developer (Logistics Integrations)

Розробка, розширення та підтримка сервісів інтеграції з міжнародними логістичними партнерами, поштовими операторами та суміжними системами. Проєктування REST API та RPC, розробка й оптимізація серверних додатків на PHP, моніторинг стабільності сервісів і написання тестів. Основний стек: PHP 8, Laravel, MongoDB, черги повідомлень (RabbitMQ, Kafka), Docker, GitLab CI. Вимоги: досвід розробки на PHP від 5 років.

Mobilunity Нова
Сьогодні

Commerce Developer

Розробка та підтримка eCommerce-сайтів на Adobe Commerce (Magento), Shopify або BigCommerce, побудова інтеграцій через REST і SOAP веб-сервіси, усунення технічних проблем на клієнтських проєктах. Участь в оцінках і технічній документації, спільна робота з Tech Lead та Project Manager. Вимоги: комерційний досвід з однією з цих платформ, сильний PHP, знання REST і SOAP, добрі комунікативні навички.

Middle Backend Engineer PHP/Laravel

Розробка бекенду для нової платформи запису й редагування відео з AI: REST API для керування контентом (S3-завантаження, метадані, мініатюри, планування), оркестрація задач обробки відео на AI-воркерах RunPod, інтеграції з платежами, аналітикою та AI-сервісами, WebSocket-синхронізація з клієнтами та фонові черги. Потрібен досвід із бекенд-фреймворками, проєктуванням баз даних, автентифікацією й безпекою API, роботою з вебхуками та Docker, Git і CI/CD.

Пакети за темою

Kalimera

welldigit/kalimera

Interactive installer that scaffolds Laravel applications the Well Digit way.

v1.0.0 15