Cómo utilizar programáticamente sintetizadores de voz iOS? (texto a voz)


Los dispositivos IOS tienen sintetizadores de voz integrados para la función VoiceOver de Accesibilidad. ¿Hay alguna forma de usar estos sintetizadores programáticamente para generar sonidos basados en texto?

Mi problema es: estoy trabajando en una aplicación simple para que los niños aprendan colores y en lugar de grabar los nombres de los colores en cada idioma que quiero admitir y almacenarlos como archivos de audio, prefiero generar los sonidos en tiempo de ejecución con alguna función de texto a voz.

Gracias

[EDITAR: esta pregunta se hizo antes de iOS7, por lo que realmente debe considerar la respuesta votada e ignorar las más antiguas, a menos que sea un arqueólogo de software]

Author: Dirty Henry, 2012-03-30

6 answers

A partir de iOS 7, Apple proporciona esta API.

Ver esta respuesta.

Objective-C

#import <AVFoundation/AVFoundation.h>
…
AVSpeechUtterance *utterance = [AVSpeechUtterance 
                            speechUtteranceWithString:@"Hello World!"];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];

Swift

import AVFoundation
…
let utterance = AVSpeechUtterance(string: "Hello World!")
let synth = AVSpeechSynthesizer()
synth.speakUtterance(utterance)
 62
Author: Onato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:39
#import <AVFoundation/AVFoundation.h>

AVSpeechSynthesizer *av = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:@"Text to say"]; 
[av speakUtterance:utterance];
 11
Author: user2518512,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 13:27:21

Este código funcionó para mí con Swift e iOS 8 tanto en Simulator como en iPhone 6. Necesitaba agregar la biblioteca estándar de AVFoundation:

import AVFoundation

// ...

func onSayMeSomething() {
    let utterance = AVSpeechUtterance(string: "Wow! I can speak!")
    utterance.pitchMultiplier = 1.3
    utterance.rate = AVSpeechUtteranceMinimumSpeechRate * 1.5
    let synth = AVSpeechSynthesizer()
    synth.speakUtterance(utterance)
}
 4
Author: Alex Malko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-16 01:51:02

Desafortunadamente iOS no expone una API pública para generar voz mediante programación.

Existe una API privada que puedes usar si no estás enviando a la App Store.

De lo contrario, consulte las respuestas a esta pregunta para ver una serie de bibliotecas de terceros que puede usar.

 3
Author: yuji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:47

Usted podría encontrar esto útil Hacer Que Su Aplicación de iPhone Accesible

Como se indica en "API y herramientas de accesibilidad para iPhone", los controles y vistas estándar de UIKit son accesibles automáticamente. Si solo usas controles UIKit estándar, probablemente no tengas que hacer mucho trabajo adicional para asegurarte de que tu aplicación sea accesible. En este caso, el siguiente paso es asegurarse de que la información de atributo predeterminada proporcionada por estos controles tenga sentido en su aplicación. Para aprender a hacer esto, consulte "Proporcionar información de atributos Precisa y útil."

 0
Author: Ocelot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-30 08:46:26

Puede probar estas API de terceros: iSpeech o OpenEars

 0
Author: Demz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-30 08:48:19