Texto a voz en PHP y WordPress sin conexión
PHP no tiene síntesis de voz propia, así que la mayoría de tutoriales envían tu texto a una API en la nube y pagan por carácter. Para un sitio que quiere una versión para escuchar de cada artículo, avisos hablados o audio para una tienda, esa factura crece con cada post, y cada texto sale de tu servidor.
Esta guía muestra cómo llamar al motor gratuito SuperClonica desde PHP a través de un servidor HTTP local: voces naturales, archivos WAV que conservas y ninguna tarifa por petición.
Cómo puede hablar PHP
Genera el audio una vez por versión del texto y sírvelo como archivo; no sintetices en cada visita.
- API en la nube: voces naturales, pero cuenta, clave, cobro por carácter y tu texto en sus servidores.
- SuperClonica: un servidor HTTP local junto a tu sitio, con voces naturales, de personajes y propias, sin conexión.
- En ambos casos PHP envía JSON y recibe audio; solo cambia la dirección.
- Habla 31 idiomas; el chino aún no está disponible.
Escucha las voces gratis
Antes de escribir código, abre la página de cualquier voz, escribe una frase de 30 a 100 caracteres, elige el idioma y pulsa el botón para generarla. En unos segundos oyes la voz que podría tener tu sitio, sin cuenta.
Arranca el servidor de voz
Una tarjeta gráfica NVIDIA lo acelera con la imagen cuda, pero basta un procesador normal.
- Arranca el servidor en la misma máquina o en una privada: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
- El primer arranque descarga el modelo Supertonic 3, unos 385 MB, en el volumen; GET /health indica cuándo está listo.
- POST /synthesize recibe JSON con text, voice, lang, seed y normalize, y responde con un WAV mono de 16 bits.
- voice es un nombre de serie de M1 a M5 y de F1 a F5, o el contenido decodificado de un archivo de voz.
Llámalo desde PHP
No hace falta ninguna extensión aparte de las funciones estándar: $voice = json_decode(file_get_contents('voice.json'), true); $body = json_encode(['text' => '¡Hola desde PHP!', 'voice' => $voice, 'lang' => 'es', '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); La misma petición funciona con la extensión cURL o con un cliente HTTP como Guzzle. Para una voz de serie, pasa 'voice' => 'F1' en lugar del archivo decodificado. Convierte el WAV a MP3 con ffmpeg si quieres archivos más ligeros para la web.
WordPress y hábitos para producción
En WordPress, genera el audio desde un hook de publicación o una tarea en segundo plano, guárdalo en la carpeta uploads y adjúntalo al post, para que los visitantes descarguen un archivo en vez de esperar la síntesis. No expongas el puerto 8000 a internet: define SUPERCLONICA_API_KEY y envíala como token Bearer, o mantén el servidor en localhost. Elige una voz de serie neutra para publicaciones, indica que el audio está generado y mantén accesible el artículo escrito.