РУКОВОДСТВО

Озвучка текста в PHP и WordPress офлайн

В PHP нет собственного синтеза речи, поэтому большинство инструкций отправляют текст в облачный API и платят за каждый символ. Для сайта, которому нужна аудиоверсия каждой статьи, голосовые уведомления или аудио для магазина, этот счёт растёт с каждым постом, а каждый текст покидает ваш сервер.

В этом руководстве — как вызывать бесплатный движок SuperClonica из PHP через локальный HTTP-сервер: естественные голоса, WAV-файлы, которые остаются у вас, и никакой оплаты за запрос.

Как PHP может говорить

Генерируйте аудио один раз на версию текста и отдавайте его файлом; не синтезируйте при каждом просмотре страницы.

  • Облачные API: естественные голоса, но аккаунт, ключ, оплата за символы и ваш текст на чужих серверах.
  • SuperClonica: локальный HTTP-сервер рядом с сайтом, естественные голоса, голоса персонажей и свои, офлайн.
  • В обоих случаях PHP отправляет JSON и получает звук; меняется только адрес.
  • Он говорит на 31 языке; китайский пока не поддерживается.

Послушайте голоса бесплатно онлайн

Прежде чем писать код, откройте страницу любого голоса, впишите фразу от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите голос, который может быть у вашего сайта, без регистрации.

Запуск сервера речи

Видеокарта NVIDIA ускоряет работу с образом cuda, но хватит и обычного процессора.

  • Запустите сервер на той же машине или на закрытой: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
  • Первый запуск скачивает модель Supertonic 3, около 385 МБ, в том; GET /health покажет, когда сервер готов.
  • POST /synthesize принимает JSON с полями text, voice, lang, seed и normalize и отвечает 16-битным моно-WAV.
  • voice — стандартное имя от M1 до M5 и от F1 до F5 или декодированное содержимое файла голоса.

Вызов из PHP

Никаких расширений сверх стандартных функций не нужно: $voice = json_decode(file_get_contents('voice.json'), true); $body = json_encode(['text' => 'Привет из PHP!', 'voice' => $voice, 'lang' => 'ru', 'seed' => 7]); $wav = file_get_contents('http://localhost:8000/synthesize', false, stream_context_create(['http' => ['method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => $body]])); file_put_contents('hello.wav', $wav); Тот же запрос работает через расширение cURL или HTTP-клиент вроде Guzzle. Для стандартного голоса передайте 'voice' => 'F1' вместо декодированного файла. Если для сайта нужны файлы поменьше, сконвертируйте WAV в MP3 через ffmpeg.

WordPress и привычки для продакшена

В WordPress генерируйте аудио из хука публикации или фоновой задачи, сохраняйте в папку uploads и прикрепляйте к посту — тогда посетители скачивают готовый файл, а не ждут синтеза. Не открывайте порт 8000 в интернет: задайте SUPERCLONICA_API_KEY и передавайте его как Bearer-токен или держите сервер на localhost. Для публикаций выбирайте нейтральный стандартный голос, сообщайте слушателям, что аудио сгенерировано, и сохраняйте доступность текстовой статьи.