Storia della generazione del suono all'epoca del Commodore 64
Il COMMODORE 64 era in grado di produrre suoni; non solo note senza alcun carattere, ma poteva riprodurre strumenti reali e generare suoni non producibili da alcuno strumento musicale dell'epoca. Così come rendeva possibile la simulazione dei più diversi rumori. Perché dotare un calcolatore di capacità sonore?
Forse la prima cosa che viene in mente sono i videogiochi. Se a delle buone immagini si associavano degli effetti sonori realistici allora il videogioco diventava decisamente più interessante e divertente.
Il COMMODORE 64 era in grado di offfire una grafica eccezionale con degli effetti sonori ottimi.
Ma non è questo tutto ciò per cui si poteva utilizzare il suono.
In programmi comuni esso poteva servire per il cosiddetto AUDIO FEEDBACK, cioè per segnalare all'utente che il calcolatore aveva svolto una determinata azione. Il suono poteva essere usato per indicare che i dati ricevuti fossero errati, oppure che il programma era in attesa di comandi, o ancora, il termine di una lunga elaborazione, per segnalare che i risultati erano pronti, o semplicemente come SUONERIA per un orologio computerizzato. La possibilità di produrre suoni a programma dava all'utente una maggiore libertà di azione; mentre il calcolatore lavorava egli poteva fare altre cose, a un certo punto ricevere un avviso e provvedere a intervenire.
Se poi interessava la musica, con il COMMODORE 64 si avevano a disposizione 3 generatori indipendenti per creare melodie di tutti i generi; se il diffusore del televisore o del monitor non sembrava sufficiente per i suoni che si voleva generare, si poteva collegare il calcolatore allo stereo.
Inoltre suoni ed effetti speciali potevano essere ottenuti con delle POKE.
.:Generare suoni
L'utilità di dotare un microcalcolatore della capacità di emettere suoni era ormai riconosciuta, ma non tutti lo facevano.
Esistevano almeno due modi per permettere a un calcolatore di suonare:
1) Metodo software: il calcolatore era dotato di un altoparlante interno, collegato a un registro o una porta di I/O (cioè un indirizzo al quale si accedeva per comunicare con dispositivi esterni). Per generare un suono si doveva scrivere ripetutamente nelle locazioni adatte valori che creassero una sequenza di impulsi, che inviati all'altoparlante ne facevano vibrare la membrana e quindi produrre un suono.
2) Metodo hardware: il calcolatore era equipaggiato con una serie di circuiti o con un integrato programmabile in grado di ricevere i dati relativi al suono da produrre e quindi generare un segnale da miscelare al segnale video, e/o un segnale da inviare ad un altoparlante, e/o un segnale prelevabile con apposita presa ed inviabile al proprio HI-FI.
Altri metodi si potevano ottenere da una fusione dei due ed erano usati in generale nei SINTETIZZATORI e nei CAMPIONATORI.
Per il COMMODORE 64 fu stato scelto il secondo metodo. lnnanzi tutto esso permetteva una maggior comodità e velocità nella generazione dei suoni, poichè, una volta selezionati i parametri necessari, era l'integrato che si preoccupava di tutto e il programma poteva proseguire.
Esso inoltre era generalmente più versatile e più potente. Lo svantaggio era naturalmente nell'aumento del costo del calcolatore, che però la COMMODORE fu in grado di evitare, dato che l'integrato sonoro, di codice 6581 e nome SID, era CUSTOM, cioè prodotto dalla ditta per i suoi scopi.
L'accesso alla programmazione del SID era ottenuta facendo in modo che la scrittura in determinati byte ponesse i valori scritti nei registri interni del SID, utilizzando la tecnica di MAPPATURA IN MEMORIA del dispositivo.
.:Suoni con il C64
Centro del sistema sonoro del COMMODORE 64 era un integrato programmabile detto SID (Sound Interface Device, cioè dispositivo di interfaccia per il suono).
Come per il VIC II esisteva una zona di memoria riservata al SID, ove si potevano effettuare le POKE per ottenere i suoni desiderati. Tale zona iniziava alla locazione 54272 (D400H) ed era composta da 29 registri, cioè i byte in cui si effettuavano le POKE.
Il SID metteva a disposizione 3 diversi canali o VOCI per produrre suoni, che erano totalmente indipendenti tra loro. Per ognuna delle voci erano riservati 7 registri e gli ultimi 8 erano comuni alle 3 voci.
In particolare il registro numero 24 (il 25-esimo), cioè quello all'indirizzo 54296, controllava il volume di tutte le tre voci. Il valore assoluto del volume poteva variare tra 0 (bassissimo, non eliminava completamente il suono) e 15 (il massimo, molto spesso si poneva il volume a 15 e poi lo si regolava più finemente con il volume del proprio televisore) e la sua variazione si otteneva modificando i bit 0-3 del registro indicato e lasciando inalterati i restanti bit.
Se V è il volume e VP il valore precedentemente posto in questo byte:
POKE 54296,VP AND 240 + V
selezionava il volume desiderato.
Torniamo adesso un attimo alla caratteristica del suono chiamata frequenza.
L'orecchio umano riesce a percepire suoni la cui frequenza sia compresa tra 20 e 20000 Hz. Il SID era in grado di generare suoni di frequenza compresa tra 0 Hz e 4000 Hz (cioè poteva generare anche suoni sotto la soglia uditiva umana).
Per indicare al SID la frequenza del suono che si voleva ottenere si doveva trasformarla in un numero a 16 bit, compreso tra 0 e 65535. Erano i primi due registri di ogni voce che contenevano il byte basso e il byte alto di questo numero a 16 bit. Poichè il valore massimo della frequenza era 4000 Hz e i numeri rappresentabili con 16 bit sono da 0 a 65535, il numero da scrivere in memoria era:
N = Frequenza / (4000 / 65535) = Frequenza / 0.06097
(ovvero N = Frequenza * 16.3835)
il che vuol dire che la variazione di N di una unità equivaleva ad una variazione della frequenza di soli 0.06 Hz.
Per trovare gli 8 bit più significativi (byte alto) e i meno significativi (byte basso) del numero N:
NHI = INT(N / 256) e NLO = N - NHI * 256
.:Forme d'onda
Il timbro che caratterizzava un suono era determinato dalla FORMA DELL'ONDA che si propagava nell'aria, pertanto volume e frequenza non erano sufficienti al SID per produrre un suono; era necessario indicare quale tipo di forma d'onda utilizzare. Il SID metteva a disposizione 4 forme d'onda: triangolare, dente di sega, impulsiva e rumore bianco.
Per selezionarle si doveva porre a 1 un determinato bit nel quinto registro della voce che si voleva usare.
Se poi si selezionava l'onda impulsiva, si doveva indicare al SID che percentuale dell'onda doveva essere positiva.
Il rapporto PW = P / T * 4095, sotto forma di numero a 12 bit, andava trascritto nel terzo e quarto registro per la voce che si usava, gli 8 bit meno significativi nel terzo e i 4 più significativi nel quarto. Il valore che si ottieneva era:
PW = PWHI * 256 + PWLO
ed in uscita la percentuale positiva dell'impulso era:
(PW / 40.95)%
Se PW = 0, solo livello basso, o PW = 4095 solo livello alto, l'uscita dell'altoparlante era nulla. Se PW = 2047, cioè PWHI = 8 e PWLO = 0, l'onda era quadra. Se R è la percentuale positiva dell'onda impulsiva, allora PW = R * 40.95, e le POKE da fare, ad esempio, nel caso della prima voce erano:
POKE 54274, PWLO
POKE 54275, PWHI
Vediamo perché cambiando la forma d'onda cambiava il suono.
Quando senti una nota essa è generata da un'onda sinusoidale, la cui frequenza è la frequenza del suono e ne definisce in pratica la tonalità (frequenza fondamentale).
Contemporaneamente sono generate altre onde, dette ARMONICHE, la cui caratteristica è avere frequenza multipla per un intero della frequenza fondamentale.
Un'onda sonora perciò è la somma della frequenza fondamentale più tutte le armoniche necessarie per produrla.
A ogni armonica è associato l'intero che dà il rapporto con la frequenza fondamentale, cioè l'armonica numero 1. La seconda armonica ha frequenza doppia, la settima armonica ha frequenza sette volte la fondamentale e cosi via.
Il timbro, cioè la FORMA DELL'ONDA, dipende dalle armoniche che costituiscono il suono e dall'ampiezza di ognuna di esse, quindi tali valori saranno diversi per diverse corde vibranti.
Per le FORME D'ONDA a disposizione valevano queste regole:
- ONDA TRIANGOLARE: solo le armoniche dispari; l'ampiezza di ogni armonica era proporzionale al reciproco del quadrato del numero dell'armonica, cioè, ad esempio, l'armonica numero 5 era ampia 1/25 dell'armonica fondamentale.
- ONDA DENTE DI SEGA: tutte le armoniche; l'ampiezza di ogni armonica era proporzionale al reciproco del numero dell'armonica.
- ONDA QUADRA: solo le armoniche dispari; l'ampiezza di ogni armonica era proporzionale al reciproco del numero dell'armonica (per rapporti R diversi da 50%, cioè per onde rettangolari generiche, la composizione dell'onda impulsiva variava notevolmente).
- RUMORE BIANCO: tutte le armoniche; ampiezza costante per tutte le armoniche.
Per i suoni reali la struttura armonica (cioè le armoniche presenti e la loro ampiezza) è molto più complessa. Per poter ottenere dei suoni più vicini ai reali si poteva ricorrere alla tecnica di filtrare le frequenze superiori o inferiori ad una certa frequenza data.
Un'altra carattetistica che distingue un suono da un altro è il modo di variare di ampiezza nel tempo. Questa caratteristica è detta INVILUPPO del suono (ENVELOPE). Se si preme un tasto del pianoforte il suono raggiunge istantaneamente la massima ampiezza ed altrettanto velocemente si smorza, se percuoti un triangolo il suono si smorza più lentamente.
Il SID disponeva di un GENERATORE Dl INVILUPPO (ENVELOPE GENERATOR) indipendente per ogni voce. Esso permetteva di descrivere l'andamento del volume del suono dividendolo in 4 fasi:
- A: ATTACCO (ATTACK), era il tempo che il suono impiegava per raggiungere il massimo del volume. Con il SID si poteva definirlo da 2 msec a 8 sec.
- D: DECADIMENTO (DECAY), era il tempo che il suono impiegava, dopo aver raggiunto il picco, per calare di intensità fino a zero, oppure fino a un dato livello chiamato di SOSTENIMENTO; da 6 msec a 24 sec.
- S: SOSTENIMENTO (SUSTAIN), era il livello di volume al quale il suono si assestava dopo la fase di decadimento. Si poteva mantenere i suoni a questo livello finché occorreva e poi, con una POKE, iniziare la fase di RILASCIO.
- R: RILASCIO (RELEASE), era il tempo che il suono impiegava per raggiungere il volume zero. Anche per il rilascio i valori variavano da 6 msec a 24 sec.
Molto spesso si faceva cominciare una nuova nota prima che la nota precedente fosse completamente smorzata. Ciò consentiva anche, usando adeguatamente le 3 voci, di creare dei veri e propri inseguimenti tra le note.
Per ognuna delle voci, il sesto e il settimo registro controllavano l'ADSR (Attacco, Decadimento, Sostegno, Rilascio).
Nel sesto registro andavano memorizzati dei valori compresi tra 0 e 15, per selezionare i tempi di attacco e decadimento.
Nel settimo registro andavano memorizzati i valori relativi al sostenimento e al tempo di rilascio.
La procedura tipica per generare una nota era:
- Selezionare ATTACCO, DECADIMENTO, SOSTENIMENTO e RILASCIO per la nota.
- Selezionare le frequenze desiderate ed eventualmente la procedura dell'onda impulsiva.
- Selezionare la forma d'onda e mettere a 1 il primo bit dello stesso registro; questo bit, detto GATE BIT, indicava che la voce era selezionata per suonare e quando veniva riportato a 0 faceva iniziare la fase di rilascio.
Fonte