Aprende a usar la increíble API de síntesis de voz en un proyecto Cordova.

Cómo convertir texto a voz (síntesis de voz) en Cordova

La síntesis de voz es la simulación generada por computadora del habla humana. Se utiliza para traducir información escrita en información auditiva donde es más conveniente, especialmente para aplicaciones móviles como correo electrónico habilitado por voz y mensajería unificada. Como desarrollador que usa Javascript para crear aplicaciones híbridas, asumimos que conoce la API de síntesis de voz disponible en la mayoría de los navegadores web. El uso de esta API es realmente fácil, sin embargo, no está disponible dentro de una aplicación cordova, por lo que debe recurrir a la API nativa del dispositivo a través de un complemento cordova.

En este artículo, aprenderá cómo convertir texto a voz fácilmente en su proyecto cordova.

Requisitos

Para utilizar la API de síntesis de voz nativa del dispositivo, vamos a utilizar un complemento para ello. El complemento Cordova TTS es un complemento escrito por @vilic que le permite utilizar la API de síntesis de voz nativa del dispositivo a través de Javascript. Este complemento proporciona soporte para las siguientes plataformas:

  • iOS 7+
  • Windows Phone 8
  • Android 4.0.3+ (API nivel 15+)

Instale el complemento en su proyecto ejecutando el siguiente comando en una terminal:

cordova plugin add cordova-plugin-tts

Después de la instalación, podrá utilizar el objeto TTS en la ventana. Para obtener más información, visite el repositorio oficial de Github aquí . Este complemento utiliza la clase AVSpeechSynthesizer en iOS, la clase TextToSpeech en Android y la  clase de síntesis de voz de Windows Phone en Windows Phone.

Texto a voz

Para convertir texto a voz con Javascript, use el método speak del objeto TTS. Este método espera como primer parámetro un objeto con hasta 3 propiedades:

Property name Type Description
text String Especifica el texto que se pronunciará.
locale String Un código de 4 caracteres que especifica el idioma que se debe usar para sintetizar el texto.
rate Float la velocidad de habla del objeto SpeechSynthesizer, de 0,1 a 1

Y se puede utilizar como en el siguiente ejemplo:

TTS.speak({
    text: 'Good morning, how are you?',
    locale: 'en-US',
    rate: 1
}, function () {
    console.log('Text succesfully spoken');
}, function (reason) {
    console.log(reason);
});

Vale la pena decir que si desea sintetizar texto cuando se inicia su aplicación, debe envolver su código dentro del evento deviceready:

document.addEventListener('deviceready', function () {
    TTS.speak('Welcome to my awesome app', function () {
        console.log('Ready !');
    }, function (reason) {
        console.log(reason);
    });
});

¿Por qué no hay un método para parar?

En términos técnicos, con la API nativa, puede detener cualquier objeto de expresión oral. Sin embargo, con este complemento no hay forma de detener la síntesis de voz (al menos no de la forma tradicional) si ya se está ejecutando y la razón es muy simple ( no, el complemento no es malo ni está incompleto ).

Como usamos Cordova, estamos limitados a enviar y recibir algunos datos, podemos interactuar con código nativo y Javascript a través de devoluciones de llamada, pero no podemos interactuar dinámicamente con una sola instancia nativa de la clase de complemento  porque la ejecución de cada método Javascript crea un nuevo instancia de la clase nativa del complemento .

Confused meme speech synthesis

Cada vez que ejecuta alguna acción en este caso start, Cordova instancia, por ejemplo, la clase TTS en Java que extiende CordovaPlugin una vez y almacena el objeto TTS en una variable local en la clase. Desde el objeto TTS almacenado, puede ejecutar el método de detención y la síntesis de voz debe detenerse según lo planeado. Pero, si ejecuta otro método desde Javascript, en este caso stop, se creará una nueva instancia de la clase TTS en Java que extiende CordovaPlugin (eso significa que ya no tenemos acceso al mismo objeto TTS desde el método de inicio). Lo mismo ocurre con iOS y Windows.

Aunque no hay un método de detención incluido en el complemento, puede usar un pequeño truco para lograrlo. ¡Di una cuerda vacía y la síntesis de voz se detendrá! Puede ampliar el complemento y crear su propio método de detención:

// Extienda el objeto TTS con el nuevo método de detención.
TTS["stop"] = function(){
    TTS.speak({text: ''});
};

// Habla un texto
TTS.speak({
    text: 'Hola buenos días. Hoy para el desayuno hay pan con mantequilla.',
    locale: 'es-ES',
    rate: 0.75
}, function () {
    console.log('success');
}, function (reason) {
    console.log(reason);
});

// Deténgase después de 3 segundos
setTimeout(function() {
    TTS.stop();
    console.log("Speech synthesis stopped");
}, 3000);

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores