Озвучка текста в 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. Для публикаций выбирайте нейтральный стандартный голос, сообщайте слушателям, что аудио сгенерировано, и сохраняйте доступность текстовой статьи.