El API Java Speech (JSAPI) es una interfaz de programación de aplicaciones para el soporte multi-plataforma de mando y control, sistemas de dictado reconocedores y sintetizadores de voz . Aunque JSAPI define una interfaz solo hay varias implementaciones creadas por terceros, por ejemplo FreeTTS .
Tecnologías centrales
La API Java Speech admite dos tecnologías de voz principales: síntesis de voz y reconocimiento de voz .
Síntesis de voz
La síntesis de voz proporciona el proceso inverso de producir voz sintética a partir de texto generado por una aplicación, un subprograma o un usuario. A menudo se la denomina tecnología de conversión de texto a voz.
Los pasos principales en la producción de voz a partir de texto son los siguientes:
- Análisis de estructura: procesa el texto de entrada para determinar dónde comienzan y terminan los párrafos, oraciones y otras estructuras. Para la mayoría de los idiomas, en esta etapa se utilizan datos de puntuación y formato.
- Preprocesamiento de texto: analiza el texto de entrada en busca de construcciones especiales del idioma. En inglés, se requiere un tratamiento especial para abreviaturas, acrónimos, fechas, horas, números, montos de moneda, direcciones de correo electrónico y muchas otras formas. Otros idiomas necesitan un procesamiento especial para estos formularios y la mayoría de los idiomas tienen otros requisitos especializados.
El resultado de estos dos primeros pasos es una forma hablada del texto escrito. A continuación, se muestran ejemplos de las diferencias entre texto escrito y hablado:
El hospital St. Matthew está en Main St.-> "El hospital de San Mateo está en Main Street"Agregue $ 20 a la cuenta 55374.-> "Agregue veinte dólares a la cuenta cinco cinco, tres siete cuatro".
Los pasos restantes convierten el texto hablado en voz:
- Conversión de texto a fonema: convierte cada palabra en fonemas. Un fonema es una unidad básica de sonido en un idioma.
- Análisis de prosodia: procesa la estructura de la oración, las palabras y los fonemas para determinar la prosodia apropiada para la oración.
- Producción de forma de onda: utiliza la información de la prosodia y los fonemas para producir la forma de onda de audio para cada oración.
Los sintetizadores de voz pueden cometer errores en cualquiera de los pasos de procesamiento descritos anteriormente. Los oídos humanos están bien preparados para detectar estos errores, pero el trabajo cuidadoso de los desarrolladores puede minimizar los errores y mejorar la calidad de la salida de voz. Mientras que Java Speech API 1 se basó en Java Speech API Markup Language (JSML), la versión más reciente utiliza SSML para brindarle muchas formas de mejorar la calidad de salida de un sintetizador de voz.
Reconocimiento de voz
El reconocimiento de voz proporciona a las computadoras la capacidad de escuchar el lenguaje hablado y determinar lo que se ha dicho. En otras palabras, procesa la entrada de audio que contiene voz convirtiéndola en texto.
Los pasos principales de un reconocedor de voz típico son los siguientes:
- Diseño gramatical: define las palabras que puede pronunciar un usuario y los patrones en los que se pueden pronunciar.
- Procesamiento de señales: analiza las características del espectro (es decir, la frecuencia) del audio entrante.
- Reconocimiento de fonemas: compara los patrones del espectro con los patrones de los fonemas del idioma que se reconoce.
- Reconocimiento de palabras: compara la secuencia de fonemas probables con las palabras y patrones de palabras especificadas por las gramáticas activas.
- Generación de resultados: proporciona a la aplicación información sobre las palabras que el reconocedor ha detectado en el audio entrante.
Una gramática es un objeto en la API de Java Speech que indica qué palabras se espera que diga un usuario y en qué patrones pueden aparecer esas palabras. Las gramáticas son importantes para los reconocedores de voz porque limitan el proceso de reconocimiento. Estas restricciones hacen que el reconocimiento sea más rápido y preciso porque el reconocedor no tiene que buscar oraciones extrañas.
La API 1 de Java Speech admite dos tipos de gramática básica: gramáticas de reglas y gramáticas de dictado. Estos tipos difieren de varias formas, incluida la forma en que las aplicaciones configuran las gramáticas; los tipos de oraciones que permiten; cómo se proporcionan los resultados; la cantidad de recursos computacionales requeridos; y cómo se utilizan en el diseño de aplicaciones. Las gramáticas de reglas se definen en JSAPI 1 por JSGF , el formato de gramática de voz de Java. El JSAPI 2 más nuevo admite el formato SRGS más reciente . JSAPI 2 no ofrece soporte para dictado.
Las clases y las interfaces de la API de Java Speech
Las diferentes clases e interfaces que forman la API de Java Speech se agrupan en los siguientes tres paquetes:
- javax.speech: contiene clases e interfaces para un motor de voz genérico
- javax.speech.synthesis: contiene clases e interfaces para la síntesis de voz.
- javax.speech.recognition: contiene clases e interfaces para el reconocimiento de voz.
La clase EngineManager es como una clase de fábrica que utilizan todas las aplicaciones de la API de Java Speech. Proporciona métodos estáticos para permitir el acceso de síntesis de voz y motores de reconocimiento de voz. La interfaz del motor encapsula las operaciones genéricas que un motor de voz compatible con la API de Java Speech debería proporcionar para las aplicaciones de voz.
Las aplicaciones de voz pueden utilizar principalmente métodos para realizar acciones como recuperar las propiedades y el estado del motor de voz y asignar y desasignar recursos para un motor de voz. Además, la interfaz del motor expone mecanismos para pausar y reanudar el flujo de audio generado o procesado por el motor de voz. Las transmisiones pueden ser manipuladas por el AudioManager. La interfaz Engine está subclasificada por las interfaces Synthesizer y Recognizer, que definen funciones adicionales de síntesis de voz y reconocimiento de voz. La interfaz Synthesizer encapsula las operaciones que un motor de síntesis de voz compatible con Java Speech API debería proporcionar para aplicaciones de voz.
La API de Java Speech se basa en el manejo de eventos. Los eventos generados por el motor de voz se pueden identificar y manejar según sea necesario. Los eventos de voz se pueden manejar a través de la interfaz EngineListener y, más específicamente, a través de RecognizerListener y SynthesizerListener.
Especificaciones relacionadas
La API de Java Speech se escribió antes de Java Community Process (JCP) y se dirigió a Java Platform, Standard Edition (Java SE). Posteriormente, se creó Java Speech API 2 (JSAPI2) como JSR 113 bajo el JCP. Esta API se dirige a Java Platform, Micro Edition (Java ME), pero también cumple con Java SE.
Referencias
- Preguntas frecuentes sobre la API Java Speech de Sun / Oracle
- JavaDocs para JSAPI 1
- Contenedor JSAPI 2 de código abierto
- Esta tecnología se utiliza para diferentes fines de seguridad.