Gerar som programando
diretamente os registros do PSG. O PSG dispõe de 3 canais que podem gerar
tons com a freqüência desejada pelo usuário. É também possível aplicar ruído
a todos esses canais, controlar os envelopes (variação de volume durante a
geração de um tom) e a duração de cada nota em cada um dos canais. O PSG
possui 16 registros. Veja na tabela as funções de cada um (os registros 14 e
15 não são utilizados para composição musical). No comando:
SOUND número de registro, expressão
o número de registro deve ser um inteiro entre 0 e 13. As expressões
também são inteiras e devem obedecer aos limites estabelecidos na tabela.
Um registro é um "lugar" no PSG onde se armazenam temporariamente dados
para o processamento. Variando o dado de um registro, modificamos o som
produzido
NÚMERO DO REGISTRO |
VALORES PERMITIDOS |
FUNÇÃO |
0
1 |
0 a 255
0 a 15 |
Determina a freqüência do canal A
(a) |
2
3 |
0 a 255
0 a 15 |
Determina a freqüência do canal B
(b) |
4
5 |
0 a 255
0 a 15 |
Determina a freqüência do canal C
(c) |
6 |
0 a 31 |
Determina a freqüência do ruído
(d) |
7 |
0 a 63 |
Seleciona um canal para geração de tons e ruído
(e) |
8 |
0 a 15 |
Volume do canal A *
(f) |
9 |
0 a 15 |
Volume do canal B *
(g) |
10 |
0 a 15 |
Volume do canal C *
(h) |
11
12 |
0 a 255
0 a 255 |
Freqüência do gerador de ruído
(i) |
13 |
0 a 14 |
Seleção da forma do envelope
(j) |
* NOTA: Só pode haver geração de envelope se o registro de volume do
canal for programado com o valor 16.
NOTAS
(a),(b),(c) . . . . . . . . . . . . Para determinar os valores dos
registros para uma determinada freqüência use este programa:
10 ' Para R0 ate R5
20 INPUT"Qual a frequencia";F
30 A=3575611#/8192/F
40 H=INT(A)
50 L=INT(.5+256*A-H))
60 PRINT"Alto (impar)=";H,"Baixo (par)=";L
 |
O valor de H deve ser colocado nos registros ímpares (1 para o canal A, 3
para o canal B e 5 para o canal C) e o valor L deve ser colocado nos
registros pares (0 para o canal A, 2 para o canal B e 4 para o canal C). Por
exemplo, imagine que você quer programar o canal A com uma freqüência de
1000Hz. Rode o programa e introduza o número 1000.
RUN
Qual a frequencia? 1000
Alto (impar)= 0
Baixo (par)= 112
Ok |
Portanto devemos fazer:
SOUND 0,112
SOUND 1,0
(d) . . . . . . . . . . . . . . . . . Para programar a frequência do
ruído use o programa:
10 INPUT"Qual a frequencia do ruido";F
20 R6=3575611#/32/F
30 PRINT"O valor a ser atribuido ao registro","6 e':";INT(R6+.5)

RUN
Qual a frequencia do ruido? 9600
O valor a ser atribuido ao registro 6 e': 12
Ok |
Portanto fazendo:
SOUND 6,12
Temos um ruído de aproximadamente 9600Hz.
(e) . . . . . . . . . . . . . . . . . Apenas com as instruções anteriores
o PSG ainda não pode produzir som. É preciso determinar o volume (veremos a
seguir) e habilitar a saída do canal que se está programando. Para
especificar o canal utilize a tabela:
SOM |
Canal
A |
Canal
B |
Canal
C |
1 |
2 |
3 |
|
|
RUÍDO |
Canal
A |
Canal
B |
Canal
C |
8 |
16 |
32 |
|
Para programar o registro 7 deve-se somar os valores correspondentes às
saídas desejadas e subtrair esse total de 255. Por exemplo: para selecionar
só o canal A, o valor é 1. Subtraindo temos:
255 - 1 = 254
Portanto, para selecionar o canal A fazemos:
SOUND 7,254
Se quiséssemos selecionar os canais A e B para reproduzir som e A, B e C
para produzir ruído, teríamos:
255 - (1+2+8+16+32) = 196
Portanto:
SOUND 7,196
(f),(g),(h) . . . . . . . . . . . . Há 16 níveis de volume (0 a 15). Para
programar o volume do canal A, fazemos:
SOUND 8,15
Volume máximo no canal A
Para os outros canais, o procedimento é semelhante, bastando mudar o
número do registro (9 para o canal B, 10 para o canal C). Para utilizar o
gerador de envelope (veremos a seguir) os registros escolhidos devem ser
carregados com o valor 16.
(i) . . . . . . . . . . . . . . . . . Os registros 11 e 12 determinam a
freqüência do envelope (variação de volume durante a produção de um tom).
Para obter o valor desse registros utilize este programa:
10 ' Para R11 e R12
20 INPUT"Qual a frequencia";F
30 A=3575611#/131072!/F
40 H=INT(A)
50 L=INT(.5+256*A-H))
60 PRINT"Alto (11)=";H
70 PRINT"Baixo (12)=";L
 |
Execute-o, digitando:
RUN
Na tela, deverão surgir as mensagens:
RUN
Qual a frequencia? 16
Alto (12)= 1
Baixo (11)= 180
Ok |
Portanto para obter uma freqüência de envelope de 16Hz no canal A devemos
fazer:
SOUND 8,16
SOUND 11,180 SOUND 12,1
|
(j) . . . . . . . . . . . . . . . . . Vários envelopes podem ser
selecionados para modular a(s) nota(s) emitida(s). O valor atribuído ao
registro 13 seleciona um entre os seguintes:
VALOR ATRIBUÍDO AO
REGISTRO 13
(valores
atribuídos a Sn da
função PLAY) |
FORMA DO ENVELOPE |
0, 1, 2, 3 ou 9 |
 |
4, 5, 6, 7 ou 15 |
 |
8 |
 |
10 |
 |
11 |
 |
12 |
 |
13 |
 |
14 |
 |
Nota: Os valores atribuídos ao registro 13 selecionam os envelopes das
mesma forma e com os mesmos valores que o subcomando Sn da função
PLAY.
|