AMSTRAD CPC 6128 Manual Del Usario página 356

Ocultar thumbs Ver también para CPC 6128:
Tabla de contenido
7
RELEASE
donde 7=1+2+4. Si no hay sonido retenido en ningún canal, la orden no tiene efecto. Pruebe
lo siguiente:
SOUND
1+64,90
SOUND
2+64,140
SOUND
4+64,215
RELEASE 3:FOR
t=1
No se produce ningún sonido mientras no se ejecuta la primera orden RELEASE, la cual libera
los sonidos de los canales A y B. Después de una pausa, la segunda orden RELEASE libera el
canal C.
Hay otro método para sincronizar sonidos. Cuando se retiene un sonido sumando 64 a su
número de situación de canal, no sólo queda él retenido, sino todos los que se envíen a
continuación a ese mismo canal. Si se envían más de cuatro sonidos a una cola que está retenida,
la máquina queda bloqueada hasta que se libere la cola (posiblemente al ejecutarse una subrutina
invocada por AFTER o EVERY). Ésta no es una buena forma de gestionar los sonidos, ya que la
máquina se detendrá cada vez que se llene una cola. Lo mismo ocurre si se ejecutan varias
órdenes SOUND seguidas. Pruebe este programa:
10
FOR
a=1
TO
8
20
SOUND
1,100*a,200
30
NEXT
40
PRINT"hola"
run
El texto no aparece en la pantalla inmediatamente, sino al cabo de tres segundos. Esto ocurre
porque el programa no puede llegar a la línea 40 mientras no haya espacio libre en la cola para
almacenar todos los sonidos.
BASIC dispone de un mecanismo de interrupción, similar al que se utiliza en AFTER, EVERY y
ON BREAK GOSUB, mediante el cual se puede hacer que se ejecute una subrutina cada vez que
queda espacio libre en una cola especificada:
10 a=0
20
ON
SQ(1)
GOSUB
30
PRINT
a;
40
GOTO
30
1000 a=a+10
1010
SOUND
1,a,200
1020
IF
a<200
THEN ON
1030
RETURN
Observe que el programa no se detiene. La instrucción SOUND no se ejecuta mientras no hay
espacio libre en la cola del canal A (1), hecho que detecta la orden ON SQ( ) GOSUB de la
línea 20. Esta orden inicializa un mecanismo de interrupción que ejecuta la subrutina cada vez
que queda un hueco libre en la cola especificada. El mecanismo tiene que ser reinicializado cada
vez que se ejecuta la subrutina (línea 1020). En este ejemplo, la reinicialización sólo se produce si
a es menor que 200.
En un programa que lleve a cabo acciones relativamente lentas (por ejemplo, mover objetos por
la pantalla), se puede poner música de fondo programando una subrutina que ejecute una nota
cada vez que quede un hueco libre en la cola. De esta forma se asegura que el programa no se
TO 1000:NEXT:RELEASE
1000
SQ(1)
GOSUB
1000
Manual de Amstrad CPC 6128 (revisión 2008) - Página 355
4
Tabla de contenido
loading

Tabla de contenido