020:software

Microhobby 20. Año II, del 19 al 25 de marzo de 1985

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.

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).

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
  • 020/software.txt
  • Última modificación: d/m/Y H:i
  • por miguel