GUÍA

Texto a voz en Flutter con voces naturales

En Flutter, el texto a voz suele ser el plugin flutter_tts, que habla con las voces del propio teléfono. Funciona sin conexión y no cuesta nada, pero la voz cambia de un dispositivo a otro y rara vez suena como tu marca o tus personajes.

El motor gratuito SuperClonica da a una app la misma voz natural en todos los teléfonos, de dos formas: archivos de audio generados de antemano dentro de la app, o un servidor de voz al que llama la app. Esta guía muestra las dos con código Dart listo y dice cuándo flutter_tts sigue siendo la opción correcta.

Tres formas de hacer hablar una app de Flutter

La mayoría de las apps los combinan: recursos para la interfaz, servidor para el texto del usuario y la voz del sistema como respaldo.

  • flutter_tts: las voces instaladas en el teléfono, sin conexión y gratis, distintas en cada dispositivo.
  • Recursos generados: cada frase fija se genera una vez con SuperClonica y va dentro de la app.
  • Un servidor de voz: la app envía el texto a tu servidor SuperClonica y reproduce la respuesta, para texto que cambia.
  • SuperClonica habla 31 idiomas; el chino aún no está disponible.

Elige una voz gratis en línea

En la página de cualquier voz, escribe una frase de tu app, de 30 a 100 caracteres, elige el idioma y pulsa el botón para generarla. En unos segundos oyes si encaja, sin cuenta, también en el móvil.

Incluye frases generadas como recursos

El MP3 mantiene la app ligera: una frase de una oración ocupa unas decenas de kilobytes.

  • Genera cada frase en tu ordenador con el motor: python -m pip install superclonica-cpu, y luego superclonica --text "¡Hola de nuevo!" --voice F1 --lang es --output assets/voice/welcome.mp3.
  • Declara la carpeta en flutter: assets: de pubspec.yaml.
  • Reproduce una frase con el paquete audioplayers: await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
  • Los recursos funcionan sin conexión y sin retraso, pero cada cambio exige una nueva versión de la app.

Llama a tu propio servidor de voz

Ejecuta el servidor en una máquina que controles: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Ponlo detrás de HTTPS, que iOS y Android esperan por defecto, y define SUPERCLONICA_API_KEY para que solo tu app pueda usarlo. Con los paquetes http, path_provider y audioplayers, una frase es una petición: final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': 'Tu pedido ya está en camino.', 'voice': 'F1', 'lang': 'es'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); Añade una cabecera Authorization: Bearer con la clave y guarda en caché las frases que se repiten.

Cuándo basta con flutter_tts

flutter_tts basta cuando la voz solo tiene que entenderse: leer una notificación, una ayuda de accesibilidad, un prototipo o una app que debe hablar sin ninguna red y no tiene frases fijas. Elige SuperClonica cuando la voz es parte del producto: un tutor, un personaje de juego, una meditación guiada, una marca que debe sonar igual en todos los teléfonos.