va a detener en espera de que quede espacio en la cola. Si los valores de las notas están
contenidos en listas DATA, se puede hacer que la subrutina de sonido deje de reinicializarse
cuando los datos estén a punto de agotarse.
El parámetro que va entre paréntesis en la instrucción ON SQ( ) GOSUB puede ser 1, 2 o 4,
dependiendo del canal cuya cola se desee examinar.
Hay una función, SQ( ), que se puede utilizar para determinar el estado de los canales de sonido.
Su parámetro puede ser 1, 2 o 4. El valor generado por la función se interpreta bit a bit según la
siguiente tabla:
Bit
Decimal
0, 1, 2
1 a 4
3
8
4
16
5
32
6
64
7
128
Pruebe el siguiente ejemplo:
10
SOUND
2,200
20
x=SQ(2)
30
PRINT
BIN$(x)
run
La línea 30 escribe el número binario 10000100. El bit 7 está a 1, lo que indica que en el canal
había una nota sonando cuando se ejecutó la línea 20. Los tres dígitos menos significativos son
100; equivalen al número decimal 4, y esto quiere decir que había cuatro espacios libres en la
cola. Esta función examina la situación del canal en un punto específico del programa; en cambio,
ON SQ( ) GOSUB examina la cola, y reacciona en consecuencia, en un punto indeterminado.
Hasta ahora todos los ejemplos han consistido en hacer sonar una o dos notas. Si se va a ejecutar
un grupo de notas independientes, por ejemplo las de una melodía, sus características se pueden
guardar en líneas DATA, para luego leerlas con READ e introducirlas en SOUND:
10
FOR
octava=-1
TO
20
FOR
x=1
TO
7:REM notas por octava
30
READ nota
40
SOUND 1,nota/2foctava
50
NEXT
60
RESTORE
70
NEXT
80
DATA
426,379,358,319,284,253,239
run
El ejemplo final de esta sección se basa en este concepto. En los canales A y B se hace sonar una
melodía con ritmo, utilizando la sincronización. Este ejemplo muestra cómo utilizar las listas
DATA para incluir información sobre nota, octava, duración y sincronización:
Significado
Número de huecos libres en la cola
La primera nota de la cola está marcada para sincronizar con el canal A
La primera nota de la cola está marcada para sincronizar con el canal B
La primera nota de la cola está marcada para sincronizar con el canal C
La primera nota de la cola está retenida (está a 1 el bit de retención)
En este momento está sonando una nota
2
Manual de Amstrad CPC 6128 (revisión 2008) - Página 356