GUÍA

Texto a voz en Swift para iOS con voces naturales

En iOS, el texto a voz empieza con AVSpeechSynthesizer: unas líneas de Swift y el teléfono lee cualquier texto con sus voces integradas, sin conexión y gratis. Pero esas voces dependen de lo que el usuario haya instalado y son las mismas que usan todas las demás apps.

El motor gratuito SuperClonica da a una app de iOS o macOS su propia voz natural, de dos formas: archivos de audio generados de antemano e incluidos en la app, o un servidor de voz al que llama la app. Esta guía muestra las dos con código Swift listo y dice cuándo AVSpeechSynthesizer sigue siendo la herramienta adecuada.

Tres formas de hacer hablar una app de iOS

Muchas apps los combinan: frases incluidas para la interfaz, servidor para el texto del usuario y la voz del sistema como respaldo.

  • AVSpeechSynthesizer: las voces del sistema, sin conexión y gratis, según lo que tenga instalado el usuario.
  • Audio incluido: 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 el WAV que devuelve.
  • 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, en tu propio iPhone.

Incluye frases generadas en la app

Los archivos incluidos funcionan sin conexión y sin retraso; un cambio exige una nueva versión de la app.

  • Genera cada frase en tu Mac con el motor: python -m pip install superclonica-cpu, y luego superclonica --text "¡Hola de nuevo!" --voice F1 --lang es --output welcome.mp3.
  • Añade los archivos al proyecto de Xcode para que se copien en el paquete de la app.
  • Reproduce una frase con AVFoundation: player = try AVAudioPlayer(contentsOf: Bundle.main.url(forResource: "welcome", withExtension: "mp3")!); player.play()
  • Guarda player en una propiedad de tu clase: un AVAudioPlayer local se calla en cuanto se libera.

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. iOS espera HTTPS por defecto, así que ponlo detrás de un certificado, y define SUPERCLONICA_API_KEY para que solo tu app pueda usarlo. Así, una frase es una petición: var request = URLRequest(url: URL(string: "https://tts.example.com/synthesize")!); request.httpMethod = "POST"; request.setValue("application/json", forHTTPHeaderField: "Content-Type"); request.httpBody = try JSONEncoder().encode(["text": "Tu pedido ya está en camino.", "voice": "F1", "lang": "es"]); let (data, _) = try await URLSession.shared.data(for: request); player = try AVAudioPlayer(data: data); player.play() Añade una cabecera Authorization con la clave y guarda en caché los datos de las frases que se repiten.

Cuándo basta con AVSpeechSynthesizer

AVSpeechSynthesizer 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. Elige SuperClonica cuando la voz es parte del producto: un profesor de idiomas, un personaje de juego, una meditación guiada, una marca que debe sonar igual para cada usuario.