| Home | Contact | Il Suono Virtuale | Virtual Sound |


Indice articolo
DirectCSound
Pagina 2
Pagina 3
Pagina 4
Pagina 5
Pagina 6


3.6 Distorsione Non Lineare, Microintervalli e Banchi di Slider

Osserviamo la seguente coppia di orc/sco:

;**** distorsione.orc
sr = 44100
kr = 441
ksmps = 100
nchnls = 2
ga1 init 0
gk12e4 init 882
;///////////////////////////////////////////////////
instr 1
;///////////////////////////////////////////////////
kbend pchbend -1,1
-1,1 cpstmid i(gk12e4)
k2 linsegr 0, 1.5, 1, 6, .15, 1, .15, 1.2, 0
a1 oscili k2, i1*powoftwo(kbend), 1
vincr ga1, a1
vincr
;///////////////////////////////////////////////////
instr 2
;///////////////////////////////////////////////////
gk12e1,gk12e2,gk12e3,gk12e4,gk12e5,gk12e6,gk12e7,gk12e8 slider8f 1,\
\; ctl min max init func icutoff
1, .1, 5, .1, 0, 5, \;1- distorsione
2, 2, 500, 20, 92, 5, \;2- taglio del filtro
3, .05, 8, 1, 92, 5, \;3- risonanza del filtro
4, 880, 888.5, 882, 0, 10000, \;4- tabella dei microintervalli
5, 0, 8, 0, 0, 5, \;5- amp. modulaz. distorsione
6, .1, 10, 1, 92, 5, \;6- freq. dist.modul.
7, 0, 200, 0, 0, 5, \;7- amp. modul. del filtro
8, .1, 10, 1, 92, 5 ; 8- freq. Modul. del filtro
gk12e9 ctrl7 1, 9, 870, 878.5 ; 9- tabella della distorsione
kosc oscili gk12e5,gk12e6,879
kosc tonek gk12e1+kosc,5
aosc interp kosc
amod tableikt ga1*aosc, int(gk12e9),1, .5, 0
kfilt oscili gk12e7, gk12e8, 879
kfilt tonek gk12e2+kfilt, 5
kres tonek gk12e3, 1.5
amod lowres amod, kfilt, kres
amod = amod*6400
adel delay amod,.3
outs amod, adel
clear ga1
endin
;/////////////////////////////////////////////////
;***** distorsione.sco
;## audio table ##
f1 0 1024 10 1 ;sinusoide
;## mapping esponenziale per gli slider ##
f92 0 4097 5 .01 4096 100
;## tabelle distorcenti ##
f870 0 4097 9 .5 1 90 ;sigmoide
f871 0 4097 8 8 2032 1 32 -1 2032 -8 ; spline cubica 1
f872 0 4097 8 0.3 1024 1 2048 -1 1024 -0.3 ; spline cubica 2
f873 0 4097 8 0 256 1 3584 -1 256 0 ; spline cubica 3
f874 0 4097 8 -1 512 1 512 -1 2048 -1 512 1 512 -1
f875 0 4097 8 -1 512 1 512 -1 2048 1 512 -1 512 1
f876 0 4097 8 -1 512 6 512 -4 2048 1 512 -1 512 1
f877 0 4097 8 7 128 8 128 6 128 7 128 5 128 6 128 4 128 5 128 3
128 4 128 2 128 3 128 1 128 2 128 0 128 1 128 0
128 -1 128 0 128 -2 128 -1 128 -3 128 -2 128 -4 128 -3
128 -5 128 -4 128 -6 128 -5 128 -7 128 -6 128 -8 128 -7
f878 0 4097 8 12 128 8 128 6 128 7 128 5 128 6 128 4 128 5 128 3
128 4 128 2 128 11 128 1 128 2 128 0 128 6 128 0
128 -6 128 0 128 -2 128 -1 128 -3 128 -2 128 -4 128 -3
128 -5 128 -4 128 -6 128 -5 128 -7 128 -13 128 -8 128 -12

;## sinusoide positiva ##
f879 0 1024 19 1 1 0 1

;## tabelle di intonazione ##
;# temperamento equabile #
;   numgrades    freqbase   scaleRatio (eq.temp.)
;     interval     basekeymidi
f880 0 16 -2 12 2 261 60
1 1.059463094359 1.122462048309 1.189207115003
1.259921049895 1.33483985417 1.414213562373 1.498307076877
1.587401051968 1.681792830507 1.781797436281 1.887748625363
;# diatonic pure #
f881 0 16 -2 12 2 261.62 60 1 1.04166667 1.125 1.171875 1.25 1.3333 1.40625 1.5 1.5625 1.66666 1.777777777777 1.875

# progressione armonica 1( 36 gradini ) #
f882 0 64 -2 36 2 30.5 24 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

;# progressione armonica 2( 24 gradini) #
f883 0 32 -2 24 2 30.5 24 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

;# progressione armonica 3( 24 gradini) #
f884 0 32 -2 24 2 15.25 24 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

;# progressione armonica 4( 12 gradini) #
f885 0 16 -2 12 2 61 60 4 5 6 7 8 9 10 11 12 13 14 15

;# progressione armonica 5( 12 gradini) #
f886 0 16 -2 12 2 61 60 8 9 10 11 12 13 14 15 16 17 18 19

;# progressione armonica 6( 24 gradini) #
f887 0 16 -2 12 2 61 60 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

;# scala ‘scordata’ #
f888 0 16 -2 12 2 261.62 60 1 1.111111111 1.142857143 1.25 1.285714286 1.388888889 1.428571429 1.5 1.607142857 1.666666667 1.714285714 1.928571429

;## nota ##
i2 0 3600
e

Questo è un esempio di distorsione non lineare, con una tabella distorcente unica per tutte le voci della polifonia. Ciò produce un effetto simile alla distorsione di una chitarra elettrica, quando si attivano più note contemporaneamente.

Analizziamo lo strumento 1:

L’opcode pchbend gestisce il messaggi MIDI di pitch-bend. In questo caso, i valori dell’uscita di questo opcode coprono un intervallo da -1 ad 1 (questi valori sono poi interpretati come una ottava sopra e una ottava sotto per mezzo della funzione powoftwo( ) ). L’opcode cpstmid permette di definire tabelle contenenti sistemi di intonazione definiti dall’utente. cpstmid è simile a cpsmidi, perché è stato progettato per essere usato con gli strumenti attivati dal MIDI, e richiede un numero di tabella come argomento di ingresso. In questo caso diversi sistemi di intonazione possono essere selezionati per mezzo di messaggi MIDI di control-change durante la performance stessa. Infatti il valore contenuto nella variabile globale gk12e4 viene catturato durante la fase di inizializzazione (con la funzione i( ) ) e trasformato in un parametro ad i-rate in modo che possa essere usato come argomento di cpstmid, e possa essere cambiato in note differenti (rimanendo costante all’interno di ogni singola nota). Notare che la variabile gk12e4 deve essere inizializzata nello header dell’orchestra, altrimenti si otterrebbe un errore di variabile usata prima di essere definita.
L’opcode linsegr genera l’inviluppo d’ampiezza di un oscillatore sinusoidale e l’uscita di tale oscillatore viene poi distorta nello strumento 2. L’uscita dell’oscillatore incrementa la variabile globale audio ga1, che viene poi riutilizzata dallo strumento 2. ga1 era stata già definita nello header prima di essere usata.
Lo strumento 2 inizia con l’opcode slider8f, che gestisce un banco di 8 controller, dando la possibilità di scegliere il canale MIDI (un canale unico per tutti i controller), i numeri di controller MIDI, i valori minimi e massimi, i valori iniziali, una tabella opzionale da usare per il mapping (quando non si desidera usare tale funzione basta porre l’argomento corrispondente a zero), e la frequenza di taglio di un filtro passa-basso posto prima dell’uscita, per levigare le discontinuità dovute alla bassa risoluzione dei dati a 7- bit.
Questi parametri devono essere definiti per ogni controller, e questo è il motivo per cui l’opcode slider8f viene diviso in otto linee di testo usando il carattere ‘\’, che viene interpretato da Csound come continuazione della stessa linea. Notare che dopo il carattere ‘\’ è possibile porre commenti che iniziano col carattere ‘;’.
Siccome i controller richiesti da questa orchestra sono nove, e l’opcode slider8f ne gestisce solo otto, è stata aggiunta un’altra linea contenente l’opcode ctrl7.
Le variabili che interpretano i messaggi MIDI di control-change sono:

gk12e1 - quantità di distorsione (corrispondente all’ampiezza del segnale generato dall’oscillatore)
gk12e2 - frequenza di taglio del filtro passa-basso risonante, usato per rendere musicalmente più gradevole il segnale distorto, altrimenti molto aspro all’ascolto
gk12e3 - risonanza del filtro
gk12e4 - seleziona il numero di tabella contenente i micro-intervalli (letta dallo strumento 1)
gk12e5 - ampiezza dell’oscillatore che modula la quantità di distorsione
gk12e6 - frequenza dell’oscillatore che modula la quantità di distorsione
gk12e7 - ampiezza dell’oscillatore che modula la frequenza di taglio del filtro, connesso al filtro passa-basso risonante
gk12e8 - frequenza dell’oscillatore che modula la frequenza di taglio del filtro, connesso al filtro passa-basso risonante
gk12e9 - seleziona il numero della tabella contenente la funzione distorcente

Lo scopo del prossimo oscillatore è di modulare in ampiezza il segnale ga1 (generato dallo strumento 1), che poi è la stessa cosa di modulare la quantità di distorsione. L’uscita dell’oscillatore viene sommata all’uscita dello slider controllante la quantità assoluta di distorsione (gk12e1). Il valore risultante viene poi filtrato per levigare l’uscita a gradini dovuta alla bassa risoluzione del MIDI, al fine di evitare i “tic”.
L’uscita così filtrata (che è un segnale a k-rate) viene poi convertita ad a-rate (variabile aosc) per mezzo dell’opcode interp, che interpola linearmente tra il valore corrente di kosc ed quello precedente, levigando ulteriormente il segnale.
Poi possiamo vedere l’opcode tableikt, che è simile a tablei (lettura di tabella interpolata linearmente), ma permette di variare il numero di tabella a k-rate. Lo scopo di questo opcode è di distorcere il segnale di ingresso (in questo caso ga1), secondo la tabella distorcente corrispondente. Nel nostro caso questa tabella può essere cambiata durante la vita stessa di una singola nota.
Questo ci permette di ascoltare le variazioni timbriche prodotte dall’uso di tabelle distorcenti differenti. Notare che la quantità di distorsione viene modulata dal segnale aosc che moltiplica il segnale ga1.
Il prossimo oscillatore modula la frequenza di taglio del filtro passa-basso risonante (effetto wah-wah). Il segnale kfilt, generato da questo oscillatore, viene poi sommato ad un offset (il segnale gk12e2, controllato da uno slider), e filtrato da un filtro passa-basso per evitare i tic. Il segnale che controlla la quantità di resonance (gk12e3) viene anch’esso filtrato.
Poi l’uscita della funzione distorcente (segnale amod) viene inviata al filtro passabasso (opcode lowres) che viene controllato in frequenza ed in quantità di resonance da kfilt e kres. Infine, il segnale del canale destro viene ritardato di 0.3 secondi, per arricchire il suono in uscita.
L’opcode clear azzera la variabile ga1 per evitare che nuovi valori continuino ad accumularsi indefinitamente.



 
English Version
Home
- - - - - - - - - - - -
Il Suono Virtuale
- - - - - - - - - - - -
Articoli
- - - - - - - - - - - -
Tutorial
- - - - - - - - - - - -
Corsi Online
- - - - - - - - - - - -
Software
- - - - - - - - - - - -
Forum
- - - - - - - - - - - -
Search
- - - - - - - - - - - -
Contact
- - - - - - - - - - - -