---------------------------------------------------------------
                     ZX81 MUSIC INTERPRETER
                      KELLY ABRANTES MURTA
                           ABRIL 2005
                      kmurta@yahoo.com.br
                        http://zx-81.tk
---------------------------------------------------------------

Este programa implementa no ZX81 uma macro linguagem musical 
similar ao comando "PLAY" dos microcomputadores TRS Color e 
MSX. Foram implementados todos os subcomandos necessários para 
a execução de músicas em uma ampla faixa de escalas, os quais 
são apresentados mais adiante.

A sintaxe da chamada à rotina em linguagem de máquina é a 
seguinte:

PRINT USR 16656," STRING MUSICAL "

A string musical é um conjunto de subcomandos que representa a 
informação musical, composta de vários parâmetros:

- NOTAS: São codificadas com as letras de 'A' a 'G' e possuem 
as seguintes equivalências:

  Dó  Ré  Mi  Fá  Sól  Lá  Sí
  C   D   E   F   G    A   B

Para obter um sustenido, basta colocar o caracter '+' logo após
a nota; para bemol, use o caracter '-'. Exemplo:

  C+ = Dó sustenido        D- =  Ré bemol

- Oitavas: São codificadas com a letra 'O' seguida do número da
oitava. O valor default é O4, que corresponde à oitava central 
do piano.

- Duração da nota: É codificada com a letra 'L' seguida de um  
número de 1 a 255. O valor default é L4 e as durações usuais 
são:

L1 = Semibreve
L2 = Mínima
L4 = Semínima
L8 = Colcheia
L16 = Semicolcheia
L32 = Fusa
L64 = Semifusa

O ponto ('.') para aumentar a duração da nota em 50% deverá ser
colocado logo após a nota: L16C.

- Pausas: São codificadas com a letra 'P' seguida de um número 
de 1 a 255, valendo as mesmas definições de duração de 'L'. As 
pausas também podem ter a duração aumentada em 50% com o uso do
'.' logo após as mesmas: P16.

- Andamento: É codificado com a letra 'T' seguida de um número 
de 1 a 255. Para músicas mais lentas, use valores menores e, 
para mais rápidas, valores maiores. O valor default é 120, que 
equivale a 120 semínimas por minuto.

- Subcomando X: Permite a execução de strings musicais 
armazenadas, por conveniência, em linhas 'REM', como por 
exemplo, trechos que se repetem dentro da música. É usado na 
forma 'Xn', onde n é o número da linha 'REM' onde se encontra a 
string musical.

Como exemplo do uso de todos esses subcomandos musicais, veja 
como fica a codificação de um trecho da Nona Sinfonia de 
Beethoven:

 810 REM BP96BO5CDP96DCO4BAGP96GAB
 820 REM AP96ABGAL8BO5CO4L4BGAL8BO5CO4L4BAGADL4B
 830 PRINT USR 16656,"T112O4L4X810P96B.L8AP96L4AP4
X810A.L8GP96L4GP4X820X810A.L8GP96L4GP4"


OBS.: Duas notas iguais tocadas uma após a outra soa aos 
ouvidos como se fosse uma nota só, mas em um instrumento 
musical elas são tocadas separadamente. A solução para esse 
pequeno problema, é usar uma pequena pausa entre as duas notas 
iguais. No exemplo anterior, foram usadas pausas de duração 96 
(P96) quando nos deparamos com essa situação.