Commodore 64 > Programmazione, Grafica e Musica

Sezione Musica

(1/2) > >>

dj_pakito:
 Chi sa aiutarmi?
Non riesco a capire quali valori di Hi Freq e Low Freq devo mettere in relazione alla nota da suonare.
Sul manuale del C64, nella sezione Musica, fanno un esempio di un'intera ottava con i relativi valori di HF e LF, ma sull'appendice M ogni nota ha una coppia di valori completamente diversi.
Come va, allora, interpretata la tabella dell'Appendice?

Alberto:
 
--- Citazione ---Non riesco a capire quali valori di Hi Freq e Low Freq devo mettere in relazione alla nota da suonare.
--- Termina citazione ---
Quelli indicati nell'appendice.


--- Citazione ---sull'appendice M ogni nota ha una coppia di valori completamente diversi.

--- Termina citazione ---
Appendice M ??? Forse volevi dire Appendice E :blink:

Per quanto riguarda la frequenza del suono,supponiamo che tu voglia riprodurre la prima nota della prima ottava (quella che nell'Appendice è indicata come C-0).
Per riprodurla è sufficiente mettere il byte basso e il byte alto della frequenza della nota da riprodurre nei registri che controllano uno dei 3  oscillatori del SID.

Per l'oscillatore n.1,basta scrivere

POKE 54272,1:POKE 54273,12.

Per l'oscillatore n.2

POKE 54279,1:POKE 54280,12.

Per l'oscillatore n.3

POKE 54286,1:POKE 54287,12.

Il suono così emesso ha una frequenza pari a 256*1 + 1*12 = 268 Hz.

Viceversa,se ad esempio vuoi riprodurre un suono pari a 44100 Hz,il suo valore esadecimale è AC44.
AC tradotto in decimale è 172;44 è 68.
In questo caso,per generare il suono con l'oscillatore n.1 scriverai:

POKE 54272,68:POKE 54273,172.

Il programma dimostrativo presente nella sezione musica usa altri numeri perchè utilizza un proprio algoritmo per decodificarli e risalire alla nota corrispondente.

Ciao
 ;)

dj_pakito:
 Ti ringrazio moltissimo, Alberto.
Mi sei stato di grande aiuto.
Mi domando da dove arrivano quelle formule che hai scritto. Hai forse qualche manuale del C64? Conosci qualcuno che me lo potrebbe vendere?
Purtroppo non ho libri sul C64, cerco di arrangiarmi con quello che trovo in rete, ma preferirei qualche libro.
Ciao.

Alberto:
 Ciao

La 'C64 Programmer's Reference Guide' è senz'altro la guida più completa sulla programmazione del C64:li' trovi una panoramica completa su tutto quel che ti serve per conoscere la macchina,dalla comversione binario a decimale/esadecimale,alle prime nozioni di Basic al linguaggio macchina e all'hardware.
Su questo sito,nella sezione 'C64 guida' trovi la versione italiana in formato elettronico ( in lento ma costante aggiornamento ) del suddetto manuale,ad opera del nostro collaboratore Marcello Massetti.
Ciauz :D




 

MarC=ello:
 
--- Citazione ---Viceversa,se ad esempio vuoi riprodurre un suono pari a 44100 Hz,il suo valore esadecimale è AC44.
AC tradotto in decimale è 172;44 è 68.
In questo caso,per generare il suono con l'oscillatore n.1 scriverai:

POKE 54272,68:POKE 54273,172.

--- Termina citazione ---


Per scomporre un numero in termini di byte alto e byte basso, si può fare anche così:

es. scomporre il numero 53280 in byte alto e byte basso

1.     53280/256 = 208.125
Si prende la parte intera (208): questo è il byte alto (che indica la pagina di memoria);

2.     208 * 256 = 53248 (prima locazione della pagina di memoria 208).

3.     sottrarre il numero assegnato alla prima pagina di memoria:
        53280 - 53248 = 32 (questo è il byte basso).

Così, 53280 è esprimibile come 32 byte basso e 208 byte alto.

Proviamo con 44100.

44100/256=172.26 --> 172 (byte alto)

172 * 256 = 44032

44100 - 44032 = 68

E torna!

Questo metodo, che non passa per l'esadecimale, è facilmente implementabile in BASIC.


--- Codice: ---10 REM BYTE ALTO - BYTE BASSO
20 INPUT "NUMERO";A
30 HI =INT(A/256):C=HI*256:LO=A-C
40 PRINT "BYTE BASSO";LO: PRINT"BYTE ALTO";HI

--- Termina codice ---

Ciao!

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa