Microhobby 21. Año II, del 26 de marzo al 1 de abril de 1985
Software: El Spectrum puede hablar (II)
— Oscar Domingo
El primer paso para conseguir «sintetizar» algo, es «analizarlo». Nuestro sintetizador de voz precisa disponer de una pequeña base de datos donde almacena los valores de tono y frecuencia necesarios para simular la correcta pronunciación de cada una de las letras. En este artículo presentamos un «analizador» de vocales que servirá para introducir en memoria los valores pertinentes en cada caso.
Esta semana vamos a ver uno de los programas de trabajo que se desarrolló específicamente para estudiar y mejorar el sonido de las cinco vocales pudiendo acceder rápidamente a las bases de datos de cada una de ellas y oír seguidamente el sonido resultante.
En el artículo anterior, desarrollamos un programa para analizar las voces grabadas en cinta cassette y ver las distintas gráficas que presentaban. Cuando se utilizó para estudiar los distintos sonidos del idioma castellano se pudieron constatar algunas curiosidades que nos sirvieron de gran ayuda al programar el sintetizador.
Una de ellas fue la gran similitud de las gráficas generadas por una misma vocal analizada en todas sus diferentes posiciones silábicas. Por ejemplo la «a» generaba gráficas prácticamente iguales en sílabas del tipo consonante-vocal (sa, ba, ca) como en las sílabas del tipo vocal-consonante (as, ar, an).
Esta similitud se mantenía para todas las demás vocales. Por lo que se decidió que los sonidos vocales serían solo cinco. Cada una de las cinco vocales sólo tendría un sonido.
Estas gráficas tuvieron que optimizarse y se utilizaron varios métodos: Primero se intentó encontrar el ciclo promedio a partir de los diferentes ciclos repetitivos, el fracaso fue absoluto, el ciclo promedio de una vocal oído separadamente no se parecía en nada al sonido original. El segundo método, que resultó el correcto consistió en aislar los diferentes ciclos y sin pretender unificarlos, se escucharon separadamente como si toda la onda estuviera formada de ciclos iguales. De esta forma se encontraron los cinco ciclos que forman la base del sintetizador de voz.
Los ciclos son éstos:
Letra «a» ciclo de 14 bytes repetido 19 veces (19, 32, 22, 33, 7, 74, 19,42, 28, 55, 22, 43, 17, 14).
Letra «e» ciclo de 22 bytes repetido 16 veces (5, 84, 13, 5, 23, 100, 7, 17, 6, 17, 10, 12, 22, 13, 8, 16, 7, 20, 9, 10, 22, 11).
Letra «i» ciclo de 14 bytes repetido 17 veces (10, 174, 19, 2, 20, 73, 3, 12, 6, 99, 10, 5, 16, 8).
Letra «o» ciclo de 6 bytes repetido 16 veces (25, 109, 32, 146, 30, 180).
Letra «u» ciclo de 4 bytes repetido 22 veces (30, 150, 37, 127).
El siguiente programa permite manipular desde un listado Basic los ciclos de las cinco vocales, que se encuentran en líneas DATA con números 1120, 1220, 1320, 1420 y 1520. Cambiando el contenido de estas líneas DATA se puede variar el sonido de las cinco vocales.
En las líneas DATA con número 1010, 1020, 1030 y 1040 se encuentra el código máquina que lee los ciclos de cada letra y los convierte en una salida audible en el Spectrum. Pensar que esta rutina permite generar cualquier onda cuadrada (aprox.) desde una base de tiempos. Lo que permite generar cualquier ruido por raro que sea.
El listado BASIC es un poco atípico pero está hecho con la sana intención de que su extensión sea lo más corta posible. De todas maneras puede ser una pequeña miscelánea de como utilizar a fondo las instrucciones de DATA del BASIC del Spectrum.
Desensamble de la rutina contenida en las líneas data 1010, 1020, 1030 y 1040
10 ORG 63000 20 LD HL,#A400 30 LD DE,#0100 40 DI 50 LABEL1 LD B,(HL) 60 LD A, B 70 AND A 80 JR Z , LABEL3 90 LABEL2 LD A,#17 100 OUT (#FE),A 110 CALL LABEL6 120 DJNZ LABEL2 130 LABEL3 INC HL 140 LD B,(HL) 150 LD A,B 160 AND A 170 JR Z,LABEL5 180 LABEL4 LD A,#7 190 OUT (#FE),A 200 CALL LABEL6 210 DJNZ LABEL4 220 LABEL5 INC HL 230 DEC DE 240 LD A,D 250 OR E 260 JR NZ,LABEL1 270 EI 280 LABEL6 RET