Monday, September 08, 2008

Manejando la síntesis de voz

La tecnología casera ofrece muchas posibilidades, algunas inimaginables para la mayoría de los usuarios. Esto ocurre porque i. la ciencia y los avances tecnológicos son cada vez más rápidos y ii. el poder actual de los equipos de cómputo caseros sobrepasa muchas veces las alternativas que se tenían hace apenas un par de años. Así, si observamos cualquier computadora casera, hallaremos probablemente la multimedia, la cual se representa a partir de tarjeta de sonido de alta resolución (mínimo 16 bits en estéreo en canales A/D), lector de DVD, de 24 velocidades, tarjeta de vídeo con 24 millones de colores, etc. Esto representa muchísima más tecnología que lo que se podía conseguir a nivel laboratorio de cualquier prestigiada universidad hace no más de diez años. Los avances son increíbles, sin lugar a dudas.

Las computadoras actuales para la casa contienen muchas una tarjeta de sonido SoundBlaster o compatible, es decir, uno de los pretendidos estándar en esta industria. Sin embargo, en los últimos años las computadoras ya incluyen todos los dispositivos más populares dentro de la misma tarjeta madre (motherboard). Así, prácticamente cualquier computadora actual contiene una tarjeta de vídeo y otra de audio compatible con el estándar más reconocido en su momento.

Hacer un programa que -por ejemplo- lea un texto en viva voz podría depender de si la tarjeta tiene algún subsistema o interfaz para hacer síntesis de voz. Afortunadamente actualmente la mayoría de las tarjetas de audio tienen esa posibilidad. A partir de esto se me ocurrió qué tan difícil sería hacer un programa que leyera un texto con voz. Puse pues manos a la obra.

Lo primero que pensé es que quizás cada fabricante tenía su propio "driver" (manejador) para hacer síntesis de voz. Si así fuese, evidentemente eso limitaría las posibilidades de cualquier software. La idea es tener compatibilidad con todas las posibles tarjetas de audio, en la medida de lo posible. Encontré la solución: usar una biblioteca que sea compatible con Windows y que además, nos permita acceso a la tarjeta de audio particular que el usuario tenga disponible. Por ello, se tomó la decisión de usar SAPI 5.3, el cual es Speech Application Program Interface, el cual contiene toda la información relevante y necesaria para hacer que la computadora hable. Dicho de otra manera, gracias a esta biblioteca (que Microsoft incluye en su Windows), podemos hacer que la computadora “lea” (por decirlo de alguna manera), a través de ésta, un texto en español. Desafortunadamente, el SAPI 5.3 que Microsoft pone a disposición de los desarrolladores, el cual es el manejador del sintetizador de voz, está pensado para el idioma inglés y no para el castellano. Si nosotros usamos este paquete para pedirle al sistema que lea un texto en formato ASCII, encontraremos que lo dice como si fuese un gringo leyendo algo en español. Con todo respeto, francamente patético.

En cierto sentido el SAPI 5.3 se convierte en una puntada, en una curiosidad que no usamos mucho. No obstante, debido a la manera en que está construido este sintetizador, es posible modificarlo (vía software), para que hable en español. Microsoft y otras empresas venden sintetizadores con fonemas para otros lenguajes, incluyendo el español mexicano. Desafortunadamente, hay que adquirlos por separado, es decir, no vienen gratuitamente como el SAPI 5.3 en inglés.

Habiendo decidido esto, comencé a trabajar sobre un programa que permitiera leer un texto en español usando el sintetizador de voz de la tarjeta de sonido, modificándolo de manera que use los fonemas ingleses en su modo más españolizado posible, o bien, usando simplemente el sintetizador que SAPI 5.3 otorga. Esto es un sistema de demostración que pretende mostrar cómo se hace la interfaz del usuario, cómo se liga el programa con el sintetizador de voz y gracias a que se entrega con todo el código fuente, el usuario interesado puede revisarlo y modificarlo a su antojo.

Para que este software funcione, lo que se hizo fue hacer que los fonemas del inglés se comportaran —en la medida de lo posible— como si estuviesen en castellano. Esta tarea fue realizada por Michael Covington y la explica en su artículo: El Hablador, que apareció en PC Techniques, de feb/mar 1995.

Es importante destacar que la discusión que sigue a continuación no necesita ser seguida por nadie que quiera usar el programa. Es de utilidad como una referencia elemental sobre el sintetizador y el cómo se han manipulado los fonemas. Que sirva como introducción al tema apasionante de la síntesis de voz.

La pronunciación de las palabras en español es muy fácil de deducir a partir de la manera en que se escriben y eso hace la tarea mucho más sencilla. El proceso a seguir contempla los siguientes pasos:
  • Separar las palabras de la oración.
  • Analizar cada palabra y acentuarla adecuadamente (ver la función acentua).
  • Fonetizar la palabra (traducir a fonemas) (ver función fonemizas).
  • Pasar a sonidos que dirá el manejador del sintetizador (ver función fonetics).
Dada la oración a decir, primero hay que separar las palabras de la oración. Esto se hace a partir de la función ExtractWords de la unit StrngTTT. Teniendo cada palabra, el siguiente paso es acentuar adecuadamente cada palabra. Esta acentuación es artificial, porque las palabras graves no se deben acentuar si terminan en n, s o vocal. Sin embargo, para que el programa hable lo más correctamente español, hay que acentuar ortográficamente las palabras correspondientes. Por ejemplo, considérese la palabra ‘pelota’. No necesita originalmente acento ortográfico. Así entonces, la palabra pasa a la siguiente etapa del procesamiento como ‘pelóta’.

Una vez realizado este paso, el siguiente es el de pasar a fonemas las palabras. Esto quiere decir, transformar la palabra a los fonemas que la representan. Mucho ojo, esto no son los sonidos que el sintetizador debe decir, sino que son los símbolos que representan estos sonidos. Por ejemplo, la palabra ‘astillero’ Al acentuarla para procesarla adecuadamente, es decir, para que el Monologue la diga de manera correcta, pasa a ser: ‘astilléro’. Una vez hecho esto, la función fonemiza la convierte en los fonemas correspondientes. Esto quedaría así: ‘astiyéro’.

Habiendo hecho uso de esta función, resta entonces traducir a los sonidos que el SAPI tendrá que decir. Estos tienen una representación, la cual le dice a SAPI 5.1 qué decir, así como los silencios o aspiraciones que debe tomar. En este sentido, la palabra ‘astillero’ se termina por convertir en AasstIYyEHEHDXOW que es precisamente lo que dice el SAPI. La función que hace esto es fonetics.

La siguiente Tabla I (resumida) es la de los fonemas en español:


Para una descripción más completa de la transformación de los fonemas ingleses al español, es necesario consultar la revista mencionada anteriormente, particularmente en el artículo escrito por Covington.

¿Cómo se usa el software?

Nos Hablamos (así se llama el programa), requiere de una serie de archivos de Windows, los cuales vienen en SAPI 5.3. Debido a que éste programa es meramente experimental, Nos Hablamos asume que existe instalado el SAPI 5.3 para poder hacer uso del sintetizador de voz. Cabe señalar que SAPI hace más que síntesis de voz. También puede reconocer palabras, permitir que el usuario dicte por voz a un procesador de palabras, por ejemplo, o que dé instrucciones habladas. Es un sistema que al menos ocupa 150 megas al bajarlo del sitio de Microsoft.

Sin embargo, también es posible solamente instalar los manejadores mínimos para que el sistema funcione. Para ello, ejecute spchapi.exe, el cual viene incluido en este sistema para que Windows pueda usar la parte de audio y voz (sin necesidad de instalar todo el SDK). Hay que decir que en Windows Vista el sistema no funciona. No sé las razones pero ya estoy investigando al respecto.

¿Cómo se Ejecuta Nos Hablamos?

Una vez habiéndose asegurado que SAPI 5.1 está instalado, simplemente córrase Nos Hablamos. Si todo sale bien, aparecerá la siguiente imagen (ventana):


El sistema permite leer un texto completo. Cargue cualquier archivo (modo txt o rtf) y escuche cómo el sistema lee completo el texto.

El sistema tiene parámetros que pueden ser cambiados, como son si la voz que habla es de hombre o mujer, así como la velocidad y el volumen de audio de la misma.

¿Por qué Nos Hablamos?

La historia tiene algunos años. En cierto momento, en la vida del autor de este software, esta frase significaba mucho pues cierta mujer divina me lo decía al despedirnos. “Nos hablamos”... me decía... y permitía seguir la liga de la relación más adelante. Puede para muchos ser el equivalente al “hasta luego”, en lugar del “adiós” pero en mi caso iba más allá. Este software va dedicado precisamente a ella.


Créditos Adicionales

Nos Hablamos no es una labor de un solo hombre (o morsa, en este caso), sino de una serie de programadores que han donado su tiempo y esfuerzo para desentrañar las facilidades que otorga la PC en muchas de sus modalidades. Así, hay que agradecer a Microsoft que haya dado acceso a su SDK de manera gratuita, ya que sin éste la labor sería poco menos que infame. A Michael Covington, (mcovingt@aisun1.ai.uga.edu), porque fue quien mostró la manera en como se pueden usar los fonemas en español a partir del inglés. A la gente de Borland, por su extraordinaria herramienta de programación (Delphi), sin la cual, muchos esfuerzos y proyectos de software estarían todavía en la imaginación.

A quien le interese este sistema experimental, escríbame a morsa@la-morsa.com y se lo mandaré a vuelta de correo.

1 comment:

Antonio L. Z. said...

Muy interesante, muy interesante Manuel. El problema es que en mi veintiúnica computadora tengo Windows Vista... estaré pendiente ;)