Brasil

SETI@Home: units

  Seti@Home

 
.
Mail

.


você esta em: / MSX Basic

>> MSX Basic

Por: Luciano Sturaro

.

A B C D E F G H I K L M N O P R S T U V W Menu
SOUND

SOUND (sound)

Escreve dados diretamente nos registros do PSG (gerador de som programável)

 

  • FORMATO:
SOUND número de registro, expressão
  • EXEMPLO:
SOUND 7,8
  • FUNÇÃO:
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           deixa o canal A sob o controle do gerador
SOUND 12,1             de envelope

 

(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.

 




 

  • PROGRAMA EXEMPLO:
100 CLS                    limpa a tela

110 PRINT "HISTORIA        titulo
(INACABADA) DA AVIACAO"

120 SOUND 6,12             determina a freqüência do ruído
                           (9600Hz)

130 SOUND 7,246            habilita saída de som e ruído pe-
                           lo canal A

140 SOUND 0,93             determina a freqüência do canal
150 SOUND 1,4              A (100 Hz)

160 FOR V = 0 TO 16        loop para obter valores crescentes
                           de volume. O último valor (16) ha-
                           bilita o gerador de envelope

170 FOR T = 0 TO 250:NE    loop de tempo para fazer o volume
XT T                       subir lentamente

180 SOUND 8,V              atribui o volume gerado pelo loop
                           ao canal A

190 NEXT V                 retorno ao loop de volume

200 SOUND 11,180           determina a freqüência do envelope
210 SOUND 12,1             (16 Hz)

220 SOUND 13,14            seleciona o envelope

230 FOR T = 0 TO 1000:N    loop de tempo. O PSG permanece
EXT T                      alguns segundos com o envelope
                           selecionado

240 SOUND 1,0              prepara o registro A para produzir
                           tons puros

250 SOUND 7,254            habilita a saída de som, sem ruído
                           pelo canal A

260 SOUND 8,15             seleciona o volume máximo

270 FOR X = 255 TO 0 ST    loop para variar a freqüência do ca-
EP -1                      nal A

280 SOUND 0,X              coloca no registro 0 o valor gerado
                           pelo loop (a cada passagem a fre-
                           qüência aumenta)

290 NEXT X                 retorno do loop de freqüências

300 SOUND 0,232            determina a freqüência do canal A
310 SOUND 1,8              (49 Hz)

320 SOUND 7,246            seleciona a saída de ruído e som
                           pelo canal A

330 FOR T = 0 TO 50:NEX    loop de tempo que mantêm o ruído
T T                        por alguns décimos de segundo

340 SOUND 8,0              seleciona o volume mínimo para o ca-
                           nal A

  • DOWNLOAD:



 

 

 

© 2002 by MSXPró

.
 

Esta página é melhor visualizada em
resolução de 1024x768 @ True Color
Utilizando o navegador Firefox

Visitante:

.

Valid HTML 4.01 Transitional  Valid CSS!