|
Pagina 5 di 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.
|