Curso de Basic
🎹 Sons 🎵


Você está em: MarMSX >> Cursos >> BASIC   Nesse capítulo iremos falar sobre os conceitos básicos de som e música.

  O processador de som original do MSX é o PSG AY-3-8910-A, que possui 3 canais de som, 8 oitavas e 1 canal adicional de ruído. Ele é um processador de sons que funciona de modo independente do processador principal, ou seja, possui autonomia para funcionar.
  O PSG será a base desse curso, apesar de que ao longo dos anos, foram lançados novos processadores de som para o MSX, no qual eram acoplados via cartucho. São eles o FM-PAC, SCC, MSX-Audio e o Moonsound.


  Introdução

  Para a compreensão dos tópicos a seguir, veremos alguns conceitos básicos sobre sons.

  O evento sonoro é a menor unidade possível de som. Por exemplo, uma nota tocada em um piano, o som de um pingo d'água batendo no chão, uma freada de carro etc.
  Um evento sonoro é composto por quatro características [2]:

  O Comando BEEP

  O comando BEEP tem como objetivo reproduzir um sinal de alerta. Ex:
BEEP 
Ok

  Este comando é muito útil para alertar o usuário quando erros acontecem. Veja o exemplo a seguir:
10 ON ERROR GOTO 80
20 PRINT"Divisão de um número:"
30 INPUT"Dividendo";DI
40 INPUT"Divisor";DO
50 Q=DI/DO
60 PRINT"O resultado dessa divisão é:";Q
70 END
80 ' Tratamento do erro
90 PRINT"Erro. Divisão por 0."
100 BEEP
110 END

  A partir do MSX 2, é possível alterar o tipo de som e o volume do BEEP através do comando SET BEEP. Sua sintaxe é:
SET BEEP som, volume
  Onde som e volume variam de 1 a 4.

  Exemplo:
SET BEEP 1,4 
Ok


  O Comando PLAY

  O comando PLAY toca notas musicais e é capaz de tocar até três notas simultaneamente.

  Sintaxe:
PLAY comandos_canal_A, comandos_canal_B, comandos_canal_C

  Os comandos servem para ajustar o sintetizador e indicar quais as notas serão tocadas. Eles são inseridos dentro de uma string, logo após o comando PLAY.

  Os comandos disponíveis para o comando PLAY são:

Comando Valores Descrição
Tn 32 a 255 Tempo ou andamento da música. Default é 120.
On 1 a 8 Oitava. Default é 4.
Ln 1 a 64 Duração da nota. Default é 4.
Nn 0 a 96 Especifica uma nota. Quando N0, dá uma pausa.
A-G 1 a 64 Especifica a nota musical.
Rn 1 a 64 Determina uma pausa.
.   aumenta em 50% a duração de uma nota.
Vn 0 a 15 Volume. Default é 8
Mn 0 a 65535 Período do envelope. Veja SOUND.
Sn 0 a 15 Formato do envelope. Veja SOUND.


  Notas musicais

  As sete notas musicais clássicas são: Dó, Ré, Mi, Fá Sol, Lá e Si.
  Cada nota é representada pelas letras do alfabeto entre A a G, conforme o esquema abaixo:
     
  • - C é o Dó
  • - D é o Ré
  • - E é o Mi
  • - F é o Fá
  • - G é o Sol
  • - A é o Lá
  • - B é o Si

  O exemplo a seguir toca a nota Dó através do comando PLAY.
PLAY "C" 

  Entretanto, a escala completa e usual é a escala cromática, que possui doze as diferentes notas musicais: Dó, Dó#/Ré♭, Ré, Ré#/Mi♭, Mi, Fá, Fá#/Sol♭, Sol, Sol#/Lá♭, Lá, Lá#/Si♭, Si.
  O esquema a seguir apresenta a escala cromática e as 12 notas representadas nas teclas de um piano.




  Entre cada uma dessas notas há um intervalo regular de meio-tom. Dois intervalos de meio-tom constituem um tom. Veja o exemplo a seguir.
Intervalo de 1 semi-tom:

Dó----Dó#----Ré----Ré#----Mi----Fá ...


Intervalo de 1 tom ou 2 semi-tons:

Dó----Ré----Mi----Fá#----G#----A# ...

  O símbolo # indica o sustenido (em inglês sharp) e eleva uma nota em meio-tom. Por exemplo, Dó# eleva o Dó em meio-tom e é pronunciado como Dó sustenido.
  E as notas Mi# e Si#? O Mi acrescido de meio-tom vira o Fá, assim como o Si acrescido de meio-tom vira o Dó.
  No comando PLAY, o sustenido é obtido acrescentando-se o símbolo de "#" ou "+" à nota. O exemplo a seguir toca o Dó sustenido.
PLAY "C#" 
  Toque o Mi# e Fá e compare o som das duas notas. Devem ser iguais.
PLAY "E#" 
PLAY "F" 

  O símbolo ♭ indica o bemol (em inglês flat) e abaixa uma nota em meio-tom. Por exemplo, Ré♭ abaixa o Ré em meio-tom e é pronunciado como Ré bemol. O Ré bemol é equivalente ao Dó#.
  E as notas Dó♭ e Fá♭? Equivalem às notas Si e Mi, respectivamente.
  No comando PLAY, o bemol é obtido acrescentando-se o símbolo de "-" à nota. O exemplo a seguir toca o Si bemol.
PLAY "B-" 
  Toque o Dó# o Ré♭ e compare o som das duas notas. Devem ser iguais.
PLAY "C#" 
PLAY "D-" 


  Oitava

  Quando dobramos a freqüência de uma nota ou a dividimos por dois, iremos repetir essa nota em outra oitava. Por exemplo, ao dobrarmos a freqüência de um Dó, encontraremos o Dó em uma escala acima e com o som mais agudo. Ao dividirmos pela metade a freqüência do mesmo Dó, encontraremos esse Dó em uma escala abaixo e com o som mais grave.

  O MSX possui 8 oitavas e é como se fossem 8 teclados lado a lado:

Oitava 1 Oitava 2 Oitava 3 Oitava 4 Oitava 5 Oitava 6 Oitava 7 Oitava 8
← Mais grave Mais agudo →

  A oitava é controlada pela letra O, seguida de um número de 1 a 8. Os exemplos a seguir tocam o Dó na quarta e quinta oitavas, respectivamente.
PLAY "O4C" 
PLAY "O5C" 

  O comando PLAY tem a notação N, que toca uma das 96 notas apresentadas no esquema anterior. A nota varia de 1 a 96, começando pelo lado esquerdo do teclado.
  Por exemplo, PLAY"N1" toca a nota Dó da Oitava 1. A nota N0 indica uma pausa.

  A fórmula para calcular a nota é:
N<n>

n = 12 x (Oitava - 1) + Nota

Notas: 1=C, 2=C#, ..., 12=B


  Duração

  Indica o tempo que cada nota irá soar.

  A duração da nota ou pausa pode ser:

Duração 1 1/2 1/4 1/8 1/16 1/32 1/64
Nota 𝅝 𝅗𝅥 𝅘𝅥 𝅘𝅥𝅮 𝅘𝅥𝅯 𝅘𝅥𝅰 𝅘𝅥𝅱
Semibreve Mínima Semínima Colcheia Semicolcheia Fusa Semifusa
Pausa 𝄻 𝄼 𝄽 𝄾 𝄿 𝅀 𝅁


  A duração de uma nota ou pausa é uma duração relativa. Ela não vai contar em segundos o tempo que cada nota irá soar/pausar, e sim o quanto ela dura em relação às outras notas. Por exemplo, partindo-se da nota de referência '♩', temos que '♪' tem a metade da duração de '♩'. Logo ♩ = ♪♪ . A partitura, na verdade, guarda um padrão rítmico [2].

  A duração relativa no comando PLAY é feita de duas formas:   Em ambos os casos o número é o denominador da duração na tabela de tempos apresentada acima. Por exemplo, uma semicolcheia tem duração de 1/16 e é representada por L16.

  O exemplo a seguir toca as notas Dó, Ré e Mi em um tempo de 1/4, das duas formas apresentadas.
PLAY "L4CDE" 
PLAY "C4D4E4" 

  A pausa é representada pela letra R, seguida do denominador da duração. Uma pausa correspondente a uma colcheia dura 1/8 e é representada por "R8". Veja o exemplo a seguir.
PLAY "L4CR8DE" 

  A duração em segundos das notas (tempo absoluto) é feita para toda a música através do andamento. A letra T indica o andamento, seguida de um número entre 32 e 255. Esse número indica a duração da nota '♩' (semínima), onde:
T<n>

Tempo = 1/n minutos.
  Assim, quando T=60, a nota '♩' irá durar 1 segundo.

  O exemplo a seguir irá tocar as notas Dó, Ré e Mi com diferentes durações e com andamento de 120.
PLAY "T120C4D1E8" 


  Volume e canais

  O PSG possui 3 canais de som, onde em cada um podemos escrever uma melodia diferente. O volume é controlado em cada canal distintamente, através da variável V, que varia de 0 a 15.

  Sintaxe dos canais:
PLAY "frase1","frase2","frase3"

  O exemplo a seguir irá tocar três melodias diferentes nos três canais, com volumes distintos.
PLAY "V15C4D8D8E2","V13G2A8A8A8A8","V14F1" 


  Uso de variáveis

  Podemos utilizar variáveis dentro do comando PLAY, para maior flexibilidade e reuso. Exemplos:
10 A$="CDEFG"
20 VOL=15
30 PLAY A$
40 PLAY "V=VOL;CDXA$;"
  Após o uso da variável, devemos utilizar sempre o ponto e vírgula ";". A letra X indica o uso de um string contendo parte da música. Ela não é seguida do sinal de igual.

  No capítulo extra "lendo partituras", será ensinado como ler uma partitura simples e convertê-la para o comando PLAY.



  O Comando SOUND

  O comando SOUND permite enviar dados diretamente aos registradores do PSG [1][2]. Sua sintaxe é:
SOUND número_do_registrador, valor

  Os registradores do PSG são:

Registrador Valores Descrição
0 0 a 255 Período do canal A
1 0 a 15
2 0 a 255 Período do canal B
3 0 a 15
4 0 a 255 Período do canal C
5 0 a 15
6 0 a 31 Freqüência do ruído
7 0 a 63 Seleção de canal para som e ruído
8 0 a 15 Volume do canal A
9 0 a 15 Volume do canal B
10 0 a 15 Volume do canal C
11 0 a 255 Período do envelope
12 0 a 255
13 0 a 14 Forma do envelope



  O conceito de sinal sonoro

  O sinal sonoro é a vibração do ar em forma de ondas, no qual se propaga e chega até aos nossos ouvidos. A onda é composta das seguintes propriedades:   A figura a seguir apresenta um sinal sonoro, com as propriedades de período e amplitude.   Observe na figura acima, que o sinal é repetitivo (periódico). A letra A assinala a amplitude do sinal e a letra T o período no qual delimita o inicio e fim de um ciclo.
  A freqüência é o inverso do período, pois conta o número de oscilações em um determinado espaço de tempo. Assim, temos:
F = 1/T
T = 1/F

  Por exemplo, se o tempo gasto para completar 1 ciclo é de 0,25 segundos, temos que a freqüência é de 1/0,25 ou 4 ciclos por segundo. A unidade básica da freqüência é o Hertz (ciclos por segundo).   Observe na figura acima, que em 1 segundo temos quatro oscilações completas do sinal.
  A fatia de tempo da freqüência é sempre a mesma, o que irá variar de sinal para sinal é o número de ciclos dentro dela.

  Uma onda pode ser produzida com diversos formatos. Veja os exemplos a seguir.   O PSG não controla o formato da onda.


  Som x ruído

  O "som" é um sinal com o período de oscilação identificável. O "ruído" é um sinal com o período de oscilação não identificável (chiado).


  Como calcular o período do sinal no PSG

  Observando as tabelas dos registradores do PSG no inicio da seção SOUND, temos que os registradores 0-5 controlam o período do sinal (e não a freqüência) nos três canais de som. Entretanto, a unidade do período informado não é o segundo e sim um valor equivalente a 16 vezes o período do clock interno do micro [2].

  O PSG utiliza a metade da freqüẽncia de clock do Z-80. Assim, temos:
Clock = 35756110 Hz
FC = 1787805,5 Hz

  O período base do PSG é 16 vezes o período desse clock. Dessa forma, a relação entre período do PSG e freqüência de um sinal [2] é:
      FC
T = ------    
    16 X F 
  Onde:
  Por exemplo, uma freqüência de 1000 Hz terá o período a ser enviado para os registradores de 112.

  Uma vez que é possível atribuir valores de período entre 0 e 4095, os registradores de período de som do PSG trabalham em pares, de modo a permitir valores inteiros maiores que 255.
  O primeiro registrador contém o LSB do valor, enquanto que o segundo o MSB. Assim, temos:
Canal A  Canal B  Canal C
0-LSB    2-LSB    4-LSB    
1-MSB    3-MSB    5-MSB

  As duas equações a seguir mostram como calcular o valor a ser enviado a cada registrador de som [2].
MSB = VALOR \ 256
LSB = VALOR MOD 256

  O programa completo em Basic que calcula os períodos a serem enviados para o par de registradores do canal A é apresentado a seguir [2].
10 CL = 1787805!
20 C = CL/16
30 F = 1000
40 PM = C/F
50 SOUND 0, PM MOD 256
60 SOUND 1, PM \ 256
70 SOUND 8,15 ' Volume
80 PRINT"Tecle enter para parar."
90 A$=INPUT$(1)
100 SOUND 8,0
  Observa-se no exemplo acima que o som só pára quando colocamos o volume igual a 0.

  Para calcularmos a freqüência do ruído, utilizamos a seguinte fórmula:
      FC
T = -------    
    16 X FR

  Assim, o cálculo do período do ruído é o mesmo utilizado para calcular o período do som. A diferença é que o período do ruído varia de 0 a 31.

  Para calcularmos a freqüência da envoltória (veremos mais adiante o que é), utilizamos a seguinte fórmula:
       FC
T = --------   
    256 X FE

  Para evitarmos erro de overflow (estouro) para valores de T maiores que 32767, devemos utilizar as seguintes expressões [2]:
se T <= 32767 então
  MSB = VALOR \ 256
  LSB = VALOR MOD 256
senão
  MSB = (VALOR - 32767) \ 256 + 128
  LSB = (VALOR - 32767) MOD 256
fim_se

  O manual do Expert MSX [1] apresenta três programas em Basic para calcular o valor dos registros associados ao período. Vamos a eles:

  Canais A, B ou C:
10 ' Para R0 a R5
20 INPUT"Qual a freqüência";F
30 A=3575611#/8192/F
40 H=INT(A)
50 L=INT(0.5+256*(A-H))
60 PRINT"Alto (ímpar)=";H,"Baixo (par)=";L

  Canais de ruído:
10 ' Para R6
20 INPUT"Qual a freqüência do ruído";F
30 R6=3575611#/32/F
40 PRINT"O valor a ser atribuído ao registro 6 é:";INT(R6+.5)

  Envelope:
10 ' Para R11 a R12
20 INPUT"Qual a freqüência";F
30 A=3575611#/131072!/F
40 H=INT(A)
50 L=INT(0.5+256*(A-H))
60 PRINT"Alto (12)=";H
70 PRINT"Baixo (par)=";L

  A tabela a seguir apresenta as variações de período T (PSG) e da freqüência F do sinal para cada tipo.

Tipo Periodo Freqüência
Som 0 a 4095 111737,81 a 27,28 Hz
Ruído 0 a 31 111737,81 a 3604,45 Hz
Envoltória 0 a 65535 111737,8125 a 1,71 Hz


  Seleção de canal - Mixer

  A seleção do canal é feita através do registro 7, no qual o valor atribuído a ele é a subtração do valor 255 pela soma das seguintes opções [1]:
  Ex: ligar o som no canal B e o ruído no canal C:
SOUND 7, 255-(2+32)


  Gerando sons e ruídos no MSX

  Com o que foi visto até aqui, podemos gerar sons e ruídos através do comando SOUND.

  A nota Lá central de um piano possui uma freqüência de 440 Hz [2]. No MSX, é a nota Lá da oitava número 4.
  O programa a seguir reproduz a freqüência da nota Lá da 4a. oitava através do comando SOUND.
10 ' Determina a freqüência de 440 Hz em A
20 F=440
30 PM=1787805!/(16*F)
40 SOUND 0, PM MOD 256
50 SOUND 1, PM \ 256
60 ' Mixer - seleciona som no canal A
70 SOUND 7,255-1
80 ' Volume
90 SOUND 8,15
  O som não pára até que pressionemos CONTROL + STOP ou digitemos: SOUND 8,0.

  Para conferir o som da nota Lá, digite o programa abaixo:
10 PLAY"V15O4A"

  A nota Lá obtida através do comando PLAY tem uma duração definida, enquanto que a gerada pelo SOUND é infinita. Dessa forma, para interromper o som, mude a freqüência de A para zero ou o volume de A para zero.

  Agora, vamos gerar um ruído de 9800 Hz no canal B:
10 ' Determina a freqüência de 9800 Hz em A
20 F=9800
30 PM=1787805!/(16*F)
40 SOUND 6, PM
60 ' Mixer - seleciona ruído em B
70 SOUND 7,255-16
80 ' Volume
90 SOUND 9,15


  A relação entre freqüência e notas musicais

  O Lá central é a nota Lá encontrada no meio de um teclado/piano, no qual possui a freqüência de 440 Hz. Essa nota é utilizada como padrão para afinação de diversos instrumentos musicais. Entretanto, cada nota Lá em diferentes oitavas irá possuir sua própia freqüência [2].
  Quando nos movemos em uma oitava, multiplicamos ou dividimos o valor de freqüência de uma nota por 2. Assim, temos a seguintes regras [2]:
Para subir uma oitava, multiplique a freqüência por dois
Para descer uma oitava, divida a freqüência por dois

  Como exercício, vamos descer uma oitava da nota Lá 440. Então, a freqüência da nota Lá na oitava 5 será de 880 Hz.
10 ' Determina a freqüência de 880 Hz em A
20 F=880
30 PM=1787805!/(16*F)
40 SOUND 0, PM MOD 256
50 SOUND 1, PM \ 256
60 ' Mixer - seleciona som no canal A
70 SOUND 7,255-1
80 ' Volume
90 SOUND 8,15
  Compare o som emitido com a nota:
10 PLAY"V15O5A"

  A fórmula geral para oitavas em uma nota é [2]:
FN+O = 2O x FN
  Onde:
  Exemplos:
Lá 1 oitava acima:

FLá+1 = 21 x F
FLá+1 = 2 x 440 = 880
Lá 1 oitava abaixo:

FLá-1 = 2-1 x F
FLá-1 = 0,5 x 440 = 220

  Como calcular a freqüência para cada uma das 12 notas? Quando subimos uma oitava, na verdade subimos 12 meio-tons [2]. Assim, podemos reescrever a fórmula das oitavas para as notas:
FN+st = 2st/12 x FN
  Onde:   Obs: 21/12 = 1,059463094.

  Exemplos:
Lá# (1 semi-tom acima do Lá central):

FLá+1 = 21/12 x F
FLá+1 = 1,059463094 x 440 = 466,16
  Teste o valor 466 no programa de freqüência e compare com PLAY"V15O4A#".

Ré (7 semi-tom abaixo do Lá central):

FLá-1 = 2-7/12 x F
FLá-1 = 0,667419927 x 440 = 293,67
  Teste o valor 293 no programa de freqüência e compare com PLAY"V15O4D".


  Formato da onda - timbre

  O volume do sinal sonoro indica o quão forte percebemos esse sinal. A freqüência determina o quão grave ou agudo percebemos o som, conforme vimos na última seção. O formato da onda sonora irá influenciar em como percebemos esse som: se ele é suave, áspero, metálico etc. A essa característica chamamos de timbre.
  Podemos tocar a nota Lá em três instrumentos diferentes, com a mesma intensidade, a mesma freqüência, mas a percepção do som será diferente para cada um dos instrumentos. Isso se deve ao formato da onda emitida por cada instrumento.
  Veja o exemplo a seguir, com notas Lá emitidas com o mesmo volume e freqüência por três instrumentos distintos:   Observe que as três ondas possuem a mesma freqüência, a mesma amplitude, mas formatos diferentes.

  O PSG não é capaz de modificar o formato da onda. Entretanto, os dispositivos de som adicionais como o FM-PAC, permitem ajustar o timbre e produzir sons diferentes para cada instrumento musical.
  Veja o exemplo para diferentes timbres no FM-PAC:
10 CALL MUSIC
20 PLAY #2,"V15@0CDE"  ' @0  = Piano 1
30 PLAY #2,"V15@2CDE"  ' @2  = Violino
40 PLAY #2,"V15@7CDE"  ' @7  = Pipe organ
50 PLAY #2,"V15@12CDE" ' @12 = Guitarra elétrica
  No exemplo acima, são as mesmas notas tocadas com sons de instrumentos diferentes.

  Obs: para realizar o teste acima é necessário o FM-PAC. Os emuladores de MSX geralmente possuem o FM-PAC.


  Moldando a onda - envelopes

  Foi visto até aqui que o sinal gerado possui freqüência e volume constantes.
  A proposta dos envelopes é criar uma variação de volume do sinal ao longo do tempo. A variação pode ser feita de forma manual ou automática, esta através do conjunto de formas envelope pré-definidas do PSG.

  Vejamos como funciona um envelope.

  Um exemplo prático de envelope é quando uma nota é tocada em uma corda de violão. Ela começa forte e decai o volume até parar de vibrar. Veja o formato do envelope de uma corda de violão tocada na figura abaixo, assinalado em vermelho.
  Obs: o envelope possui freqüência diferente do sinal emitido.
  Quando o envelope é uma vibração periódica de volume, chamamos de vibrato. O vibrato é alcançado em guitarras e violão quando o músico vibra o dedo que segura a corda da nota tocada.

  Podemos reproduzir os fenômenos de decaimento e vibrato, através do exemplo da nota Lá.
  No programa de freqüências, o volume é constante e possui valor igual a 15. A idéia aqui é realizar o decaimento do volume de 15 até 0, reproduzindo a forma do envelope aproximada do exemplo da corda do violão.
10 ' Determina a freqüência de 440 Hz em A
20 F=440
30 PM=1787805!/(16*F)
40 SOUND 0, PM MOD 256
50 SOUND 1, PM \ 256
60 ' Mixer - seleciona som no canal A
70 SOUND 7,255-1
80 ' Volume
90 FOR V=15 TO 0 STEP -.01
100 SOUND 8,V
110 NEXT V

  No próximo exemplo, vamos criar um envelope periódico para a nota Lá (vibrato). Nesse caso, o volume oscila entre 6 a 15 ao longo do tempo [2].
10 ' Determina a freqüência de 440 Hz em A
20 F=440
30 PM=1787805!/(16*F)
40 SOUND 0, PM MOD 256
50 SOUND 1, PM \ 256
60 ' Mixer - seleciona som no canal A
70 SOUND 7,255-1
80 ' Volume
90 FOR V=15 TO 6 STEP -.1
100 SOUND 8,V
110 NEXT V
120 FOR V=6 TO 15 STEP .1
130 SOUND 8,V
140 NEXT V
150 GOTO 90
  Experimente mudar a freqüência do sinal de 440 para 466. O tempo de oscilação do volume permanece o mesmo, mas o som se tornou mais agudo.

  Uma vez entendido o conceito de envelope, podemos utilizar os envelopes de fábrica do PSG.
  Os envelopes do PSG controlam automaticamente o volume do sinal de som, baseado na freqüência do envelope.

  Lista de envelopes:

Valor do registro 13 Forma da onda
0, 1, 2, 3 ou 9 | ◺            
4, 5, 6, 7 ou 15 | ◿            
8 | ◺◺◺◺◺◺◺
10 | ◺△△△△△△
11 | ◺|▔▔▔▔▔
12 | ◿◿◿◿◿◿◿
13 | /▔▔▔▔▔▔
14 | △△△△△△△

  O envelope que foi feito manualmente no exercício anterior para o decaimento da nota Lá, corresponde ao envelope 0.

  Vamos modificar o programa anterior, de forma a utilizarmos o envelope do PSG.
  Desejamos fazer o volume cair em 4 segundos. A freqüência F correspondente a 4 segundos é 1/4 ou 0.25 Hz.
10 ' Determina a freqüência de 440 Hz em A
20 F=440
30 PM=1787805!/(16*F)
40 SOUND 0, PM MOD 256
50 SOUND 1, PM \ 256
60 ' Mixer - seleciona som no canal A
70 SOUND 7,255-1
80 ' Envelope
90 SOUND 8,16
100 FE=0.25
110 PE=1787805!/(256*FE)
120 IF PE > 32767 THEN 160
130 SOUND 11, PE MOD 256
140 SOUND 12, PE \ 256
150 GOTO 180
160 SOUND 11, (PE - 32767) MOD 256 + 128 
170 SOUND 12, (PE - 32767) \ 256
180 SOUND 13,0
  Obs: quando utilizamos envelopes para controlar o volume, indicamos o volume do respectivo canal com o valor igual a 16.

  O envelope que utilizamos não é periódico. Entretanto, se utilizarmos o envelope número 14, por exemplo, vamos produzir um "vibrato" na nota Lá. Mudanças:
100 FE=1 ' Periodo = 0.25 segundos
  e
180 SOUND 13,14


  O comando PLAY com envelope

  Podemos utilizar o envelope para "moldar" as ondas das notas musicais no comando PLAY. O comando S escolhe uma das formas de envelope disponíveis no PSG, enquanto que o comando M informa o período do mesmo modo calculado no SOUND. Entretanto, o período aqui é um número de 16 bits (2 bytes) e não mais dois valores de 8 bits, como no SOUND.

  Veja o exemplo do livro do Expert [1] a seguir.
10 REM PROGRAMA PLAY
20 PLAY"S0M10000T180"
30 PLAY"L4O3GFL8EDECO2BABG"
40 PLAY"O3L4CEAGBO4L3CO3"
50 PLAY"L8AGFEL3EL4DGBO4C"
60 PLAY"L6CEL4DL6DFL4ECFEDE"
70 PLAY"L6FEDCL4CO3B"
80 PLAY"O4L4CC#L3DL6DFL4E"
90 PLAY"L6GL4FDO3GBO4C"

  O que o envelope com S=0 e M=10000 (39 e 16 no SOUND) faz na música? Ele deixa a duração das notas mais curta. Substitua a linha 20 por esta e observe a diferença.
20 PLAY"V15180"

  Obs: no programa original do livro, há o comando V15 logo após o envelope. Foi visto na seção do SOUND que para o envelope funcionar, deve-se atribuir o volume igual a 16. Além disso, o envelope é um controle automático de volume. Dessa forma, esse comando anula o efeito do envelope. Coloque ele na linha 20 do programa original e observe.
20 PLAY"S0M10000V15T180"



  Referências:

  [1] - Livro: Linguagem Basic MSX, editora Aleph, 5a. Edição, 1987.
  [2] - Livro: MSX Música, José Maurício Bussab, McGraw Hill, 1987.


<< Anterior Basic Próxima >>