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.

Gráficas típicas de cada una de las vocales

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
 
021/software.txt · Última modificación: d/m/Y H:i por miguel
Recent changes RSS feed Creative Commons License Driven by DokuWiki Made on Mac