Autore Topic: Il Sid Suona Campioni Su 4 Canali  (Letto 1619 volte)

Marcus

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Wizball
Il Sid Suona Campioni Su 4 Canali
« il: 03 Dicembre 2009, 14:34:39 »
 Salve a tutti,

da youtube ho avuto modo di apprezzare la demo di Vicious SID risalente a Novembre/2008 dove SounDemon ha presentato il modo di far suonare al SID con una polifonia di 4 voci ciascuna delle quali è un campione digitale.
I canali sono mixati via software a 2 a 2 impiegando 2 dei 3 oscillatori previsti dal SID, pertanto è anche possibile applicare il filtro sull'output podotto da ciascun oscillatore o su entrambi.
Wikipedia riporta una sommaria descrizione del metodo usato ma, un po' perché non mastico a sufficienza l'inglese, un po' perché posso aver frainteso quanto specificato, non ho ben capito come SounDemon sia riuscito in un'impresa del genere.
Ho cercato anche in rete ma non ho trovato null'altro.
Qualcuno può aiutarmi a capire meglio?
Marcus

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Il Sid Suona Campioni Su 4 Canali
« Risposta #1 il: 03 Dicembre 2009, 23:08:19 »
 Note di produzione di Vicious SID
http://noname.c64.org/csdb/release/?id=726...how=notes#notes
Intervista con spiegazioni su Vandalism New #50
http://noname.c64.org/csdb/release/?id=75271

Purtroppo la scena e' internazionale e parla inglese. Sarebbe stato sicuramente peggio se gli autori si esprimessero nel loro idioma (tedesco, finlandese etc) =)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Il Sid Suona Campioni Su 4 Canali
« Risposta #2 il: 03 Dicembre 2009, 23:17:02 »
 Ciao Marcus,
 immagino tu ti riferisca all'uso del test bit in combinazione con l'onda di rumore bianco.
L'argomento é piuttosto complesso, spero di spiegarmi decentemente e soprattutto di non dire fesserie!! :D
Per emettere suoni il SID utilizza un accumulatore a 24 bit al quale, ad ogni ciclo, viene sommata una frequenza di 12 bit (quella che si può impostare con i registri visibili esternamente).
Codice: [Seleziona]
Acc: 24 bit
Freq: 12 bit
Acc = Acc + Freq

- Nella forma d'onda triangolare l'output é dato dai 12 bit più significativi dell'accumulatore stesso;
Codice: [Seleziona]
output_triangolare = Acc >> 12

- Nella forma d'onda dente di sega viene analizzato il bit più significativo dell'accumulatore: se é uguale si prendono gli 11 bit seguenti così come sono, se é a 1 si prendono invertiti;
Codice: [Seleziona]
se Acc & 0x800000 = 0 output_dentedisega = Acc >> 11
          altrimenti  output_dentedisega = not  (Acc >> 11)

- Nella forma d'onda quadra c'é un operazione di confronto sui 12 bit più significativi dell'accumulatore e l'output può essere 000 o FFF in base all'esito.
Codice: [Seleziona]
se Acc > compare  output_quadra = $FFF
      altrimenti  output_quadra = 0

- Nella forma d'onda noise viene usato uno shift register da 23 bit e vengono caricati 8 bit come nello schema qua sotto. Il shift register viene spostato a sinistra di un bit ogni qualvolta il bit 19 dell'accumulatore viene portato a 1: questo permette di legare comunque la generazione della forma d'onda alla frequenza scelta.
I valori instantanei delle forme d'onda sono numeri a 12 bit: nel caso di triangolare, e quadrata la dimensione é già esatta; nel caso della forma d'onda dente si sega gli 11 bit vengono spostati a sinistra di un bit; nel caso della noise gli 8 bit vengono spostati a sinistra di 4 posizioni.

Codice: [Seleziona]
///
//                        ----------------------->---------------------
//                        |                                            |
//                   ----EOR----                                       |
//                   |         |                                       |
//                   2 2 2 1 1 1 1 1 1 1 1 1 1                         |
// Register bits:    2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 <---
//                   |   |       |     |   |       |     |   |
// OSC3 bits  :      7   6       5     4   3       2     1   0
//
Pescato dai sorgenti di resid

SounDemoN si é accorto che manipolando il bit di test possono accadere due cose:
- se il test bit viene portato a 0 lo shift register viene ruotato di 1 bit a sinistra
- se il test bit viene portato a 1 il bit 19 dello shift register viene invertito ed il risultato inserito nel bit 1 del registro stesso
Oltre a questo già sapeva che impostando più forme d'onda contemporaneamente vengono resettati i bit 22, 20, 16, 13, 11, 7, 4 e 2 dello shift register.
Combinando opportunamente queste tre ultime affermazioni é possibile creare delle forme d'onda "personalizzate".
Ciò significa di fatto "bombardare" il registro forma d'onda di una specifica voce del sid, con valori che modificano il test bit e/o le forme d'onda selezionate, con lo scopo di ottenere un valore di output specifico.

Spero di essere stato chiaro...
Ti consiglio di dare comunque un'occhiata ai link che ti ha proposto iAN.
 

Marcus

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Wizball
Il Sid Suona Campioni Su 4 Canali
« Risposta #3 il: 04 Dicembre 2009, 18:40:38 »
 
Citazione da: "iAN CooG"
Note di produzione di Vicious SID
http://noname.c64.org/csdb/release/?id=726...how=notes#notes
Intervista con spiegazioni su Vandalism New #50
http://noname.c64.org/csdb/release/?id=75271

Purtroppo la scena e' internazionale e parla inglese. Sarebbe stato sicuramente peggio se gli autori si esprimessero nel loro idioma (tedesco, finlandese etc) =)
iaN sei un mito, riesci a scovare l'introvabile! E dire che su noname64 c'ero pure passato!

Comunque la parte chiave sta nella frase "Soundemon also learned that setting waveform to 0 to hold signal level also did not stop the oscillators." e in particolre in "did not stop the oscillators". E' questa la parte che non ho trovato in altri documenti; senza questa considerazione non riuscivo a capire come fosse possibile ottenere il livello desiderato della forma d'onda, perché pensavo che si "perdesse tempo" attendendo che essa (la forma d'onda triangolare) compisse il ciclo di discesa. A parte il fatto che è possibile usare mezzo ciclo della triangolare resettando l'oscillatore, in ogni caso sarebbe stato necessario tenere conto del tempo a disposizione prima di fermare nuovamente l'oscillatore.
Utilizzando le giuste temporizzazioni per resettare il bit di test ed impostando la frequenza dell'oscillatore a zero (fermando l'evoluzione della forma d'onda) per poi riportarla subito sul valore massimo, si possono effettivamente suonare campioni di 8 bit ad una frequenza leggermente inferiore a 7812 Hz (in realtà l'oscillattore non arriva a 4000 Hz ma solamente a 3906 Hz) per consentire la "permanenza" del campione (voltaggio d'uscita) per il tempo necessario ad essere percepito come tale rispetto al tempo di transitori fra un campione ed il successivo.

In più la possibilità di mixare fino a quattro canali digitali ad 8 bit ciascuno fino a coprire tutti i 12 bit di risoluzione offerti dal DCO del SID, anche se la realtà delle temporizzazioni non consente di spingersi fino a questo punto... peccato!
 
Marcus