Microhobby 20. Año II, del 19 al 25 de marzo de 1985
Software: El Spectrum puede hablar (I)
— Oscar Domingo
Aquellos que creen que las posibilidades sonoras del Spectrum son la faceta más negativa del mismo, pueden empezar a dudar de sus aseveraciones. El presente programa, y otros que se desarrollarán en números sucesivos de esta revista, han sido la base de trabajo del sintetizador de voz por soft que, cuando estés leyendo estas líneas, ya habrá hecho seguramente tus delicias.
Con este programa vamos a intentar introducirnos en el mundo de la síntesis de voz. Para ello, lo primero que necesitaremos es una grabación en cinta de un texto hablado, de la mayor calidad posible, para utilizarla como base de estudio.
El listado Basic consta de tres programas fundidos en uno, los dos primeros están realizados en código máquina y, el tercero, está escrito en Basic.
El primer programa es un codificador que transforma la señal de audio presente en el jack de EAR y la transforma en una serie de impulsos modulados en frecuencia, dos contadores internos se encargan de medir la duración de cada onda y un gestor de memoria va almacenando en la misma toda la información, ocupando desde la posición 42.000 a la 61.999.
El segundo programa es el correspondiente decodificador del anterior. Y su misión es la de leer los códigos generados por el programa codificador y sintetizar de nuevo la onda original.
El tercer programa convierte la codificación en memoria de la voz en una gráfica muy interesante, pues con ella podremos estudiar las diversas inflexiones que tiene la voz.
Para los aficionados al lenguaje ensamblador, se han incorporado al artículo los dos listados correspondientes a los dos programas en código máquina. El primero se ensambla en la posición 41.000 de la memoria y el segundo en la posición 41.200 a continuación del primero. En el programa Basic estas dos rutinas están contenidas en las líneas DATA y se colocan en su posición correcta al poner en marcha el programa.
Cómo utilizar correctamente este programa
Como ya hemos dicho al principio, lo primero que se necesita es una buena grabación de texto hablado, también se puede analizar música u otros sonidos con este programa, aunque todavía se ha hecho un estudio sistemático de los resultados.
Copiar el listado del programa y hacer una grabación de seguridad antes de probarlo. Pues como tiene dos rutinas en código máquina, cualquier error puede ser fatal y obligar a copiar de nuevo todo el programa. Prestar mucha atención a las cuatro líneas DATA que contiene el listado.
Para analizar una grabación conectar el cassette como si se fuera a cargar un programa y pulsar la opción —A—. Poner en marcha la cinta y cuando vaya a empezar el trozo que queramos analizar, pulsar ENTER. Si la grabación esta baja de volumen, el programa tardará en volver de nuevo al menú y si el volumen está demasiado alto, el retorno al menú será más rápido. Un tiempo de unos 12 segundos desde que se pulsa ENTER hasta que se retorna al menú debería ser lo ideal para un texto hablado.
Cuidado con analizar silencios muy largos pues como éstos ocupan muy poca memoria, el tiempo de grabación será muy largo y nos dará la sensación de que algo no funciona, esto puede ocurrir por ejemplo al utilizar la opción —A— sin tener conectado nada al jack de EAR.
Después de que se haya hecho la operación anterior, se puede escuchar lo que se ha codificado, pulsando la opción —B— o se puede ver la gráfica con la opción —C—.
Para realizar la gráfica, el Spectrum lo hace de la siguiente manera:
La gráfica es una base de tiempos. Dado que la onda generada por el ordenador es cuadrada de frecuencia variable. La gráfica se forma según los tiempos a nivel alto o a nivel bajo de la onda. Cada período completo de la onda genera una barra en la gráfica proporcional al tiempo. La parte superior es proporcional al tiempo en que el valor es alto y la parte inferior es proporcional al tiempo en que el valor es bajo. Por ejemplo, un silencio será representado por una serie de barras en las que la parte alta será mínima (un pixel) y la parte baja será maxima (un draw de 82 pixels).
Desemsamble de la rutina
10 ;RUTINA CODIFICADORA 20 30 40 ORG 41000 50 60 XOR A 70 OUT (254),A 80 LD HL,42000 90 LD DE,10000 100 DI 110 RA1 IN A,(254) 120 BIT 6,A 130 JR Z,RA1 140 RA2 LD C,255 150 RA3 INC C 160 LD A,255 170 CP C 180 JR Z,RA4 190 IN A,(254) 200 BIT 6,A 210 JR NZ,RA3 220 RA4 LD (HL),C 230 INC HL 240 LD C,255 250 RA5 INC C 260 LD A,255 270 CP C 280 JR Z,RA6 290 IN A,(254) 300 BIT 6,A 310 JR Z,RA5 320 RA6 LD (HL),C 330 INC HL 340 DEC DE 350 LD A, D 360 OR E 370 JR NZ,RA2 380 EI 390 RET 400 410 420 ;RUTINA DECODIFICADORA 430 440 450 ORG 41200 460 470 LD HL,42000 480 LD DE,10000 490 DI 500 SA1 LD B,(HL) 510 LD A, B 520 AND A 530 JR Z,SA3 540 SA2 LD A,17 550 OUT (254),A 560 CALL DEL 570 DJNZ SA2 580 SA3 INC HL 590 LD B,(HL) 600 LD A,B 610 AND A 620 JR Z,SA5 630 SA4 LD A,7 640 OUT (254),A 650 CALL DEL 660 DJNZ SA4 670 SA5 INC HL 680 DEC DE 690 LD A,D 700 OR E 710 JR NZ , SA1 720 EI 730 RET 740 750 DEL RET