PURE DATA
Manuale introduttivo di musica elettronica
vers. 0.1.2
Francesco Bianchi
elettrochuck@gmail.com
2010
N OTA SUL C OPYRIGHT
• di modificare quest’opera
alle seguenti condizioni:
2
INDICE
Introduzione 9
i L’AMBIENTE 10
1 FONDAMENTI 11
1.1 Cos’è Pure Data? . . . . . . . . . . . . . . . . . . . . 11
1.2 Pd-extended . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Installazione . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 GNU/Linux . . . . . . . . . . . . . . . . . . . 12
1.3.2 Windows e Mac Os X . . . . . . . . . . . . . 13
2 PANORAMICA DELL’AMBIENTE 14
2.1 Pd window e patch window . . . . . . . . . . . . . . . 14
2.1.1 il motore DSP . . . . . . . . . . . . . . . . . . 15
2.1.2 print . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Le scatole di Pd . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 oggetti e connessioni . . . . . . . . . . . . . . 16
2.2.2 messaggi e liste . . . . . . . . . . . . . . . . . 18
bang e number box . . . . . . . . . . . . . . . . 19
ii DATI 21
3 BASI DI PROGRAMMAZIONE CON PURE DATA 22
3.1 Variabili e costanti . . . . . . . . . . . . . . . . . . . 22
3.1.1 pack e unpack . . . . . . . . . . . . . . . . . . . 25
3.2 Gestione del tempo . . . . . . . . . . . . . . . . . . . 26
3.2.1 metro . . . . . . . . . . . . . . . . . . . . . . . 26
un contatore . . . . . . . . . . . . . . . . . . . 26
3.2.2 line . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3 delay . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.4 line multirampa con delay . . . . . . . . . . . 29
3.3 Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.1 operatori aritmetici . . . . . . . . . . . . . . . 31
3.3.2 expr . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 Generatori di numeri casuali . . . . . . . . . . . . . 32
3.5 Connessioni senza cavi . . . . . . . . . . . . . . . . . 35
3.6 Subpatches e Abstractions . . . . . . . . . . . . . . . . 36
3.6.1 subpatch . . . . . . . . . . . . . . . . . . . . . 37
3
Indice
3.6.2 abstraction . . . . . . . . . . . . . . . . . . . . 39
3.6.3 graph on parent . . . . . . . . . . . . . . . . . 41
4 VETTORI, GRAFICI E TABELLE 43
4.1 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.1 leggere un vettore . . . . . . . . . . . . . . . 46
4.1.2 l’oggetto table . . . . . . . . . . . . . . . . . . 48
5 PROGRAMMAZIONE AVANZATA 50
5.1 Istruzioni condizionali . . . . . . . . . . . . . . . . . 50
5.1.1 operatori relazionali . . . . . . . . . . . . . . 50
5.1.2 select . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.3 operatori logici . . . . . . . . . . . . . . . . . 53
5.1.4 If . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.2 loops e iterazioni . . . . . . . . . . . . . . . . . . . . . 57
6 OGGETTI GUI 60
6.1 Altre GUI dalle librerie di Pd . . . . . . . . . . . . . 63
7 LISTA DEGLI OGGETTI PER MANIPOLARE DATI 66
iii AUDIO 67
8 L’AUDIO DIGITALE 68
8.1 L’oscillatore . . . . . . . . . . . . . . . . . . . . . . . 68
8.1.1 frequenza e ampiezza del segnale . . . . . . 70
8.1.2 osc∼ . . . . . . . . . . . . . . . . . . . . . . . 73
8.1.3 tabwrite∼ . . . . . . . . . . . . . . . . . . . . 74
8.1.4 la rappresentazione del suono . . . . . . . . 74
8.2 Le forme d’onda . . . . . . . . . . . . . . . . . . . . . 78
8.2.1 tabosc4∼ . . . . . . . . . . . . . . . . . . . . 79
8.2.2 onda quadra . . . . . . . . . . . . . . . . . . . 79
pulse width modulation (PWM) . . . . . . . 82
8.2.3 onda a dente di sega . . . . . . . . . . . . . . 85
phasor∼ . . . . . . . . . . . . . . . . . . . . . 86
8.2.4 onda triangolare . . . . . . . . . . . . . . . . 86
9 IL panning 90
9.1 l’oggetto dac∼ . . . . . . . . . . . . . . . . . . . . . . 90
9.2 Controllo del panning . . . . . . . . . . . . . . . . . . 91
9.2.1 Segnali bipolari e unipolari . . . . . . . . . . 93
9.2.2 il DC offset . . . . . . . . . . . . . . . . . . . 93
10 SINTESI ADDITIVA, SINTESI TABELLARE E SINTESI VET-
TORIALE 97
10.1 Operatori di segnale . . . . . . . . . . . . . . . . . . 97
10.1.1 expr∼ . . . . . . . . . . . . . . . . . . . . . . 97
4
Indice
5
Indice
6
INTRODUZIONE
7
Indice
8
Indice
Buon divertimento!
9
Parte I
L’A M B I E N T E
1
FONDAMENTI
11
1.2 PD-EXTENDED
1.2 P D - EXTENDED
1.3 I NSTALLAZIONE
12
1.3 INSTALLAZIONE
pd
1.3.2 W INDOWS E M AC O S X
13
2
PA N O R A M I C A D E L L ’A M B I E N T E
14
2.1 PD window E patch window
15
2.2 LE scatole DI PD
2.1.2 print
Hello World!
2.2 L E scatole DI P D
16
2.2 LE scatole DI PD
random 250
random
select 0 5 7
17
2.2 LE scatole DI PD
counter
pack 0 0
random 1000
osc~
dac~
18
2.2 LE scatole DI PD
questo è un messaggio
questo è un messaggio
19
2.2 LE scatole DI PD
bang grafico
bang
oggetti bang
b
+ 5
12
20
Parte II
DAT I
3
B A S I D I P R O G R A M M A Z I O N E C O N P U R E DATA
22
3.1 VARIABILI E COSTANTI
10 20
+ 5
30
14 3
+ 5
17
1 L’oggetto ’+’ oltre ad accettare numeri in entrata, accetta anche bang nell’inlet
di sinistra. Il bang non fa altro che dire all’oggetto di far uscire ciò che ha in
memoria, cioè il risultato dell’addizione
23
3.1 VARIABILI E COSTANTI
loadbang
+ 5
12
Figura 12: all’apertura della patch si avrà come output la somma fra 7
e 12
12
scelgo il numero $1
24
3.1 VARIABILI E COSTANTI
Nel caso in cui una messege box contenga più di una variabile è
necessario che ognuna abbia un’univoca denominazione. Così
la prima variabile sarà $1, la seconda $2 e così via.
L’inlet del messaggio riceve una lista con i valori che le vari-
abili devono assumere. Per realizzare tali liste esiste un oggetto
apposito chiamato pack, che mette insieme diversi valori singoli
(atomi), combinandoli in liste. Gli argomenti di pack inizializzano
il valore del relativo inlet al valore segnato. Ad esempio pack 2
19 25 avrà 3 inlet rispettivamente inizializzati con i valori 2, 19,
25. Un bang in entrata nell’inlet sinistro produrrà l’output della
lista in memoria in quel momento (fig. 14).
0 0 0
pack 20 1 2010
Figura 14: pack: un click sul bang senza cambiare i valori delle num-
ber box produce l’uscita dei valori inizializzati. Una vari-
azione delle number box produce un output nel momento in
cui viene cambiato il valore dell’inlet di sinistra. Osservare
il risultato nella Pd window
25
3.2 GESTIONE DEL TEMPO
20 1 2010
unpack 0 0 0
20 1 2010
3.2.1 metro
UN CONTATORE
26
3.2 GESTIONE DEL TEMPO
1 un numero diverso da 0 o un
"bang" attivano metro
bang
0
0 o "stop" fermano metro
stop
3.2.2 line
27
3.2 GESTIONE DEL TEMPO
0 1
metro 500
loadbang
int
+ 1
23
28
3.2 GESTIONE DEL TEMPO
1000 5000
line
0, 1000 5000
line
3.2.3 delay
29
3.3 ARITMETICA
2000 5000
metro 1000
delay 500
con delay. Nel caso della patch in figura 22 c’è un oggetto grafi-
co per rappresentare le rampe, una slider orizzontale, di cui ci
occuperemo in un apposito capitolo.
3.3 A RITMETICA
30
3.3 ARITMETICA
line
Operazioni aritmetiche:
• +
• -
• *
• /
• pow
Operazioni trigonometriche:
• sin
• cos
• tan
31
3.4 GENERATORI DI NUMERI CASUALI
• atan
• atan2
Operazioni sulle frazioni
• mod
• div
e molti altri...
3.3.2 expr
32
3.4 GENERATORI DI NUMERI CASUALI
* 24 - 7
42.6667 42.6667
33
3.4 GENERATORI DI NUMERI CASUALI
1 0
metro 500
random 250
1 0
metro 500
random 1001
/ 1000
34
3.5 CONNESSIONI SENZA CAVI
1 0
metro 500
random 100
moses 25
1 0
metro 500
drunk 100 10
80
35
3.6 subpatches E abstractions
random
drunk
36
3.6 subpatches E abstractions
4 r numero
send numero
4
r numero
receive numero
* 2
4
8
3.6.1 subpatch
37
3.6 subpatches E abstractions
metro 500
random 500
+ 1
moses 250
pd miasubpatch
38
3.6 subpatches E abstractions
inlet
metro 500
random 500
+ 1
moses 250
Figura 32: l’interno della subpatch con gli inlet e gli outlet
3.6.2 abstraction
Un’abstraction non è altro che una patch che può essere richia-
mata dall’interno di una patch. Anch’essa, come la subpatch con-
tiene gli oggetti inlet e outlet per creare le varie entrate e uscite
dell’object box e, a differenza della subpatch, può essere utilizzata
in qualunque patch. L’importante è che il file dell’abstraction sia
salvato con l’estensione .pd e che si trovi nella stessa directory in
cui si sta lavorando o in una delle directory definite nel Path del
programma (cap. 2.1).
39
3.6 subpatches E abstractions
inlet
pack $1 $2
line
outlet
40
3.6 subpatches E abstractions
1 0
pd submetro
regola_metro
301
Figura 35: Una subpatch con una number box in graph on parent
41
3.6 subpatches E abstractions
inlet
regola_metro
301
metro 500
outlet
42
4
V E T TO R I , G R A F I C I E TA B E L L E
4.1 V ETTORI
43
4.1 VETTORI
i
10
0
0 1 2 3
44
4.1 VETTORI
45
4.1 VETTORI
;
i resize 4
i 0 0.5 0.75 -0.6 0.1
;
i sinesum 32 0.5
;
i cosinesum 32 0.25 0.5 0.25
Figura 38: attivare le tre message box con un click e verificarne il risul-
tato sul grafico. Il comando resize ridimensiona il vettore
secondo quanto indicato dal suo argomento, in questo caso
32
46
4.1 VETTORI
i
1
-1
32
until
int 1 + 1
randomF 2
- 1
tabwrite i
Figura 39: click sulla message box in alto e verificare il risultato sul
grafico
47
4.1 VETTORI
i
1
-1
0 100
; ;
i xlabel -1.2 0 100 i xlabel hide
; ;
i ylabel -5.5 -1 0 1 i ylabel hide
; ;
i xticks 0 2 10 i xticks hide
; ;
i yticks 0 0.1 5 i yticks hide
48
4.1 VETTORI
i punti i polygon
i bezier
i reset
16
s reset until
0
0
int + 1
1 0 tabwrite new
new
metro 1000
r reset
int 0 + 1
mod 16
t i i sel 15
tabread i $1 950
0, $1 950 line
line size $1
tabwrite new
49
5
P R O G R A M M A Z I O N E AVA N Z ATA
1 Il concetto di vero o falso è mutuato dalla logica classica che ha prestato al mon-
do dell’informatica i suoi modelli. La primitiva fondamentale dell’informatica,
il bit, può infatti assumere il valore di 1 o 0, acceso o spento, vero o falso.
50
5.1 ISTRUZIONI CONDIZIONALI
> 10
5.1.2 select
5 123 10
sel 10
select può selezionare più atomi, in tal caso avrà tanti outlet quan-
ti saranno gli atomi da valutare, più uno, da cui farà uscire gli
atomi che non soddisfano la selezione (figura 45).
Con gli operatori relazionali e select realizziamo un algoritmo
che opera una selezione su dei numeri. Quando la selezione
è soddisfatta e select emette 1, verrà attivata una rampa con
l’oggetto line (figura 46).
51
5.1 ISTRUZIONI CONDIZIONALI
123
10
sel 10 4
20 32 69
> 50
sel 1
0, 127 2000
line
Figura 46: valutare l’algoritmo con un click sulle 3 message box in alto
52
5.1 ISTRUZIONI CONDIZIONALI
0, 100 2000
line
100
> 50
change
sel 1
0, 127 2000
line
2 Le tavole di verità sono tabelle usate nella logica per determinare se, attribuiti
i valori di verità alle proposizioni che la compongono, una determinata
proposizione è vera o falsa.
53
5.1 ISTRUZIONI CONDIZIONALI
a b a∧b
0 0 0
0 1 0
1 0 0
1 1 1
21 = 1 0 1 0 1 ∧
6 = 0 0 1 1 0 =
4 = 0 0 1 0 0
a b a∨b
0 0 0
0 1 1
1 0 1
1 1 1
54
5.1 ISTRUZIONI CONDIZIONALI
t b b
21 6
&
t b b
41 22
63
55
5.1 ISTRUZIONI CONDIZIONALI
10 10
&&
Figura 50: l’operatore ’&& ’ confronta due valori in base alla tavolà di
verità per AND
113 = 1 1 1 0 0 0 1 <<
2 =
452 = 1 1 1 0 0 0 1 0 0
t b b
113 2
<<
452
5.1.4 If
56
5.2 loops E ITERAZIONI
i f ( espressione )
f a i una c e r t a cosa ;
else
fanne un ’ a l t r a ;
che significa: Se l’espressione è vera fai una certa cosa, altrimen-
ti fanne un’altra. In Pd invece la sintassi è:
57
5.2 loops E ITERAZIONI
1 0
metro 500
loadbang
float + 1
0 sel 9
f o r ( i = 0 ; i < 1 0 0 ; i ++)
espressione ;
che significa: finché il contatore, partito da 0 non arriva a 99, va-
luta l’espressione. Se l’espressione fosse un ordine di stampare
il valore della variabile-contatore avremmo:
f o r ( i = 0 ; i < 1 0 0 ; i ++)
p r i n t f ("%d " , i ) ;
Nella figura 54 si vede la patch di Pd che fa la stessa cosa.
58
5.2 loops E ITERAZIONI
100
until
loadbang
int + 1
Figura 54: ciclo until: valutare l’algoritmo con un click sulla message
box in alto e osservare il risultato nella Pd window
59
6
OGGETTI GUI
Nel corso dei nostri primi esperimenti abbiamo già avuto modo
di incontrare alcuni oggetti grafici, che nell’ambito del mondo
informatico sono dette GUI (graphical user interfaces). Pd mette a
disposizione un certo numero di GUI’s, alcuni nativi, cioè facen-
ti parte del pacchetto standard del programma, altri derivati da
librerie esterne, la maggior parte delle quali sono caricate nel-
la versione extended. Genericamente possiamo dire che tutte le
GUI di Pd possono essere configurate tramite le properties, acces-
sibili col tasto destro del mouse sulla GUI stessa.
- bang
- toggle
- VU-meter
- canvas
- number2
Sul bang non c’è molto altro da dire, lo abbiamo incontrato già
moltissime volte. toggle invece è un oggetto molto utile che
permette di restituire 1 quando è attivo, 0 quando è disattivo.
Praticamente è una variabile binaria che si attiva con un click
del mouse. Quando è attivato mostra una croce all’interno del
quadrato che la costituisce (figura 55).
60
OGGETTI GUI
Pd offre due tipi di slider, che sono delle leve attivabili con il
mouse o da altri oggetti. Fra le due non c’è alcuna differenza
se non nel fatto che un tipo è verticale, l’altro orizzontale. Dalle
proprietà si può impostare la dimensione, ma soprattutto il range
dell’output.
1 0
metro 500
int 1 + 1
mod 2
sel 0
61
OGGETTI GUI
r slide
metro 100
expr ($f1 / 127) * 20
int 1 + 1
mod 2
r slide
$1 90
line
62
6.1 ALTRE GUI DALLE LIBRERIE DI PD
Oltre alle GUI native che abbiamo appena discusso, diamo ora
una panoramica veloce di alcune altre GUI introdotte con le
nuove librerie:
- grid
- gcanvas
- knob
- envgen
63
6.1 ALTRE GUI DALLE LIBRERIE DI PD
array1
r ordinata
tabwrite array1
64
6.1 ALTRE GUI DALLE LIBRERIE DI PD
65
7
L I S TA D E G L I O G G E T T I P E R M A N I P O L A R E DAT I
66
Parte III
AUDIO
8
L ’A U D I O D I G I T A L E
8.1 L’ OSCILLATORE
y = A sin(2π f x + φ)
1 http://it.wikipedia.org/wiki/Sinusoide
68
8.1 L’OSCILLATORE
2
1
1
ampiezza
0
0
−1
−1
−2
−2
tempo
69
8.1 L’OSCILLATORE
Sinusoide digitale
1.0
1.0
0.5
0.5
ampiezza
0.0
0.0
−0.5
−0.5
−1.0
−1.0
tempo
70
8.1 L’OSCILLATORE
osc~ 440
dac~
0 1 2 3 4
Wavetable
5 6 7 8 9 10
1.0
1.0
●
● ●
● ●
● ●
0.5
0.5
● ●
ampiezza
0.0
0.0
● ●
−0.5
−0.5
0 1 2 3 4 5 6 7 8 9 10
index
71
8.1 L’OSCILLATORE
Cosinusoide
1.0
1.0
0.5
0.5
ampiezza
0.0
0.0
−0.5
−0.5
−1.0
−1.0
tempo
2
τ ➤ λ
➤❘
➤❘
❘
➤
❘
1
1
➤ ❘
ampiezza
A
➤ ❘
0
0
−1
−1
−2
−2
tempo
72
8.1 L’OSCILLATORE
8.1.2 osc∼
242
osc~ 200
dac~
Figura 64: l’oggetto osc∼ con frequenza controllata da una number box
line
osc~ 20
dac~
73
8.1 L’OSCILLATORE
osc~ 440
*~ 0.5
dac~
8.1.3 tabwrite∼
74
8.1 L’OSCILLATORE
1.0
1.0
0.5
0.5
a)
0.0
0.0
−0.5
−0.5
1.0 −1.0
1.0 −1.0
0.5
0.5
b)
0.0
0.0
−0.5
−0.5
−1.0
−1.0
Figura 67: la realizzazione di un glissando con l’oggetto line
amp
osc~ 440
*~ 0.5
dac~
$1 20
line
75
8.1 L’OSCILLATORE
amp
883
r~ sig
metro 100
osc~ 440
tabwrite~ amp
*~ 0.5 amp
dac~
$1 20
send~ sig
line
76
8.1 L’OSCILLATORE
0.5
0.5
ampiezza
0.0
0.0
−0.5
−0.5
tempo
Spettrogramma ampiezza/frequenza
ampiezza
0 100 200 300 400 500 600 700 800 900 1000
frequenza
77
8.2 LE FORME D’ONDA
Spettrogramma ampiezza/frequenza/tempo
1000
1000
800
800
frequenza
600
600
400
400
200
200
0
0
tempo
Oltre alla forma d’onda più semplice, quella sinusoidale, che ab-
biamo esaminato nella sezione precedente, esistono altre forme
d’onda periodiche. Il numero di esse è teoricamente infinito, an-
che se esistono alcune forme d’onda classiche che si possono ot-
tenere dalla somma di sinusoidi semplici in rapporto armonico
fra loro.
Forme d’onda classiche sono l’onda quadra, l’onda triangolare e
l’onda a dente di sega che esamineremo fra poco.
78
8.2 LE FORME D’ONDA
8.2.1 tabosc4∼
Quella quadra è una forma d’onda che alterna solo due valori,
generalmente 1 e -1, ma anche 1 e 0 se si usa come segnale di
controllo.
Secondo il Teorema di Fourier, un qualsiasi suono complesso pe-
riodico può essere ottenuto dalla somma di sinusoidi in rappor-
to armonico fra loro. Come abbiamo imparato dal capitolo sui
vettori (4 possiamo disegnare in un vettore una forma d’onda
ottenuta dalla somma di sinusoidi tramite il comando sinesum.
L’onda quadra si ottiene dalla somma degli armonici dispari
con ampiezza inversamente proporzionale al numero d’ordine
dell’armonico, schematizzando:
L’oggetto tabosc4∼ può essere usato per implementare un’onda
quadra scritta in un vettore tramite il comando sinesum. E’ suf-
ficiente usare una message box con il comando sinesum e scrivere
tutti i valori di ampiezza delle varie armoniche. In alternativa
79
8.2 LE FORME D’ONDA
frq sine
0
tabosc4~ sine
amp
$1 20
wave
line
*~
start
metro 100
Figura 73: l’uso di tabosc∼ per leggere un vettore con una forma
d’onda sinusoidale
80
8.2 LE FORME D’ONDA
Onda quadra
2
1
1
ampiezza
0
0
−1
−1
−2
−2
tempo
0 quadra9 quadra40
set quadra40
set quadra9
set quadralg
tabosc4~ quadra9
;
quadra9 sinesum 512 1 0 0.33 0 0.2 0 0.1428 0 0.1111;
quadra9 normalize 1
dac~
;
quadra40 sinesum 512 1 0 0.33 0 0.2 0 0.1428 0 0.1111 0
0.0909 0 0.0769 0 0.0666 0 0.0588 0 0.0526 0 0.0476 0
0.0434 0 0.04 0 0.037 0 0.0344 0 0.0322 0 0.0303 0 0.0285 0
0.027 0 0.0256 0;
quadra40 normalize 1
quadralg
515
reset
until 0
int 0 + 1
tabwrite quadralg
81
8.2 LE FORME D’ONDA
I due modi che abbiamo usato nella sezione precedente per gener-
are un’onda quadra non sono gli unici possibili. Un altro sistema
infatti è quello di intervenire direttamente su un segnale sinu-
soidale e modificarlo in tempo reale. Nella patch di figura 76 il
segnale di osc∼ entra in expr∼ che genera un’onda quadra con
un semplice ciclo if: se i valori sono positivi, esce 1, altrimenti
esce -1.
150 wave
osc~ 200
metro 100
dac~
tabwrite~ wave
82
8.2 LE FORME D’ONDA
osc~ 200
$1 40
line
metro 100
dac~
tabwrite~ wave
83
8.2 LE FORME D’ONDA
frq
300
osc~ 200
osc~ 0.25
*~ 0.99
metro 100
dac~
tabwrite~ wave
84
8.2 LE FORME D’ONDA
;
dentedisega sinesum 515 -1 -0.5 -0.33 -0.25 -0.2 -0.166666
-0.142857 -0.125 -0.111111 -0.1 -0.0909 -0.0833 -0.0769
-0.0714 -0.0666 -0.0625 -0.0588 -0.0555 -0.0526 -0.05
-0.0476 -0.0454 -0.0434 -0.0416;
dentedisega normalize 1
515
until
int 0 + 1
mod 515
tabwrite dentedisega2
85
8.2 LE FORME D’ONDA
phasor∼
metro 120
tabwrite~ saw
86
8.2 LE FORME D’ONDA
osc~ 0.125
phasor~ 400
expr~ ($v1 * 0.49) + 0.5
dac~
87
8.2 LE FORME D’ONDA
triang triang2
;
triang sinesum 515 1 0 -0.111111 0 0.04 0 -0.020408 0
0.012345 0 -0.008264 0 0.005917 0 -0.044444 0 0.00346 0
-0.00277;
triang normalize 1
pd triang2
loadbang
131
256 until
int 0 + 1 + 128 t f f
tabwrite triang2
88
8.2 LE FORME D’ONDA
phasor~ 200
metro 100
Figura 84
0.367
expr~ if ($v1 <= $f2, $v1 * (1 / $f2), (1 - $v1) * (1 /
(1-$f2))) * 2 - 1
tri
metro 100
Figura 85
89
9
I L PA N N I N G
1 2
*~ 0.25
dac~ dac~
90
9.2 CONTROLLO DEL panning
sx dx
0.346
osc~ 440
expr sqrt($f1 / 100)
0.808 0.588
$1 20 $1 20
line~ line~
*~ *~
dac~
Figura 87
91
9.2 CONTROLLO DEL panning
expr~ sqrt($v1)
*~ *~
dac~
Figura 88
92
9.2 CONTROLLO DEL panning
expr~ sqrt($v1)
*~ *~
dac~
Figura 89
9.2.2 IL DC OFFSET
93
9.2 CONTROLLO DEL panning
a)
b)
Figura 90: L’ampiezza del segnale (a) oscilla fra valori positivi e
negativi, mentre (b) è polarizzato nel campo positivo
94
9.2 CONTROLLO DEL panning
1.0
1.0
➤
0.5
0.5
a)
0.0
0.0
❘
❘
−0.5
−0.5
−1.0
−1.0
➤
1.0
1.0
➤
0.5
0.5
b)
0.0
0.0
❘
−0.5
−0.5
−1.0
−1.0
95
9.2 CONTROLLO DEL panning
metro 100
tabwrite~ bipolare
unipolare
tabwrite~ unipolare
dac~
96
10
S I N T E S I A D D I T I VA , S I N T E S I TA B E L L A R E E
SINTESI VETTORIALE
10.1.1 expr∼
97
11
S I N T E S I S OT T R AT T I VA
segnale in entrata
filtro
segnale in uscita
11.1.1 IL RUMORE
98
11.1 LA SINTESI SOTTRATTIVA
Rumore bianco
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
99
11.1 LA SINTESI SOTTRATTIVA
Rumore rosa
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
100
11.2 I FILTRI
2500
0
polygate~ 3 100
dac~
11.2 I FILTRI
- filtri passa-alto
- filtri passa-basso
- filtri passa-banda
- filtri escludi-banda
101
12
M O U L A Z I O N E A D A N E L LO ( R M ) , T R E M O LO,
M O D U L A Z I O N E D ’A M P I E Z Z A ( A M )
RM = sigα ∗ sigβ
RM = (α f + β f ), (α f − β f )
1
cos(α) ∗ cos( β) = [cos(α + β) + cos(α − β)] (12.1)
2
Quando i due segnali sono suoni complessi, il risultato della
modulazione ad anello sarà l’insieme delle somme e differenze
fra tutte le frequenze dei due suoni. Nella patch in figura 100
si ha una doppia modulazione ad anello, con le sinusoidi di
frequenza 2000, 500 e 650 hertz. Il risultato della prima RM da
frequenze di 2500 e 1500 hertz che vengono modulati con la terza
sinusoide (650 hz), producendo un suono finale formato dalla
somma di 4 onde: 3150, 1850, 2150, 850 hertz (vedi lo spettro in
figura 101. Schematizzando:
102
12.1 LA MODULAZIONE AD ANELLO
Modulazione ad anello
*~
dac~
- RM1 = (α f + β f ), (α f − β f )
103
12.1 LA MODULAZIONE AD ANELLO
- RM2 = RM1 f ∗ γ f
*~
osc~ 650
*~
dac~
104
12.2 SEGNALI BIPOLARI E UNIPOLARI
105
12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO
1.0
1.0
➤
0.5
0.5
a) 0.0
0.0
❘
❘
−0.5
−0.5
−1.0
−1.0
➤
1.0
1.0
➤
0.5
0.5
b)
0.0
0.0
❘
−0.5
−0.5
−1.0
−1.0
Figura 102: la distanza massima fra l’ampiezza positiva e quella nega-
tiva del segnale bipolare (a) è doppia rispetto a quella del
segnale (b)
106
12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO
metro 100
tabwrite~ bipolare
unipolare
tabwrite~ unipolare
dac~
107
12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO
controllo_tremolo
osc~ 800
2
osc~ 1
*~
$1 20
line~
*~
dac~
Tremolo
a)
b)
c)
108
12.4 LA MODULAZIONE D’AMPIEZZA
a)
b)
c)
109
12.4 LA MODULAZIONE D’AMPIEZZA
osc~ 1600
frequenza
ampiezza
1
37
osc~ 1
/ 100
wave
*~
$1 20
line~
*~
metro 25
dac~ tabwrite~ wave
lo bipolare.
110
12.4 LA MODULAZIONE D’AMPIEZZA
( P f ), ( P f + M f ), ( P f − M f ) =
800, (800 + 160), (800 − 160) =
800, 960, 640
( Pf ∗ M1 ) ∗ M2 =
[1500, (1500 + 500), (1500 − 500)] ∗ M2 =
(1500, 2000, 1000) ∗ M2 =
111
12.4 LA MODULAZIONE D’AMPIEZZA
*~
$1 20
line~
*~
dac~
112
12.4 LA MODULAZIONE D’AMPIEZZA
osc~ 1500
osc~ 500
osc~ 300
*~
$1 20
line~
*~
dac~
113
12.4 LA MODULAZIONE D’AMPIEZZA
114
12.4 LA MODULAZIONE D’AMPIEZZA
*~
$1 20
line~
*~
dac~
115
13
V I B R ATO E M O D U L A Z I O N E D I F R E Q U E N Z A ( F M )
vibrato
osc~ 1
80 40
sig~ *~
+~
osc~
metro 100
dac~ tabwrite~ vibrato
Figura 114
116
13.2 MODULAZIONE DI FREQUENZA
FM f = Pf , ( Pf + M f ), ( Pf − M f ), ( Pf + 2M f ), ( Pf − 2M f ), ( Pf +
3M f ), ( Pf − 3M f ), . . .
D
I = Mf
D = I ∗ Mf
117
13.2 MODULAZIONE DI FREQUENZA
pd modulante
freq indice
200 1000
10
Deviazione
2000
pd portante
freq
4000
pd uscita
dac~
118
13.2 MODULAZIONE DI FREQUENZA
freq
0
inlet~
+~
osc~
outlet~
Sulla patch per l’uscita (fig. 118) non c’è molto da dire: una slider
verticale controlla l’ampiezza del segnale prodotto dalla FM.
Maggiore è la deviazione di picco, maggiore sarà il numero di com-
ponenti presenti nello spettro. In figura 119 l’indice di modu-
lazione pari a 0.1 determina una deviazione di picco di 20 hz (0.1
* M f , ovvero 0.1 * 200 = 20) quindi un numero esiguo di com-
ponenti spettrali. In figura 120 l’indice pari a 10 determina una
devizione di 2000 hz, quindi uno spettro molto più ricco: nella
banda di frequenza compresa fra (Pf − D) e (Pf + D) (2000 -
6000) le ampiezze grosso modo si equivalgono mentre al di sotto
e al di sopra di tali limiti inizia una diminuzione graduale delle
ampiezze.
13.2.1 L’ INVILUPPO
119
13.2 MODULAZIONE DI FREQUENZA
freq indice
200 1000
10
Deviazione
2000
t b f
/ 100 *
osc~ 200 $1 20 $1 20
line~ line~
*~
*~
outlet~
come invece accade per ogni suono reale. Con gli strumenti dig-
itali abbiamo la possibilità di creare suoni di durata indefinita,
ma anche di definire la loro durata nel tempo.
Per disegnare un suono definito nel dominio del tempo abbiamo
bisogno di un inviluppo, ovvero di un profilo che determini la
forma che il suono assume rispetto al tempo. In figura 121 si
può osservare la forma d’onda prodotta da un suono di tromba
della durata di circa 6 decimi di secondo. Approssimando molto
si può distinguere una fase (attacco in cui l’onda passa da uno
stato di quiete ad uno di massima ampiezza, una seconda fase in
cui c’è un calo dell’ampiezza (decadimento), una terza fase in cui
il suono si mantiene più o meno costante (sostegno) e un’ultima
fase (rilascio) in cui l’onda torna allo stato di quiete. Queste
120
13.2 MODULAZIONE DI FREQUENZA
$1 20
inlet~
line~
*~
outlet~
121
13.2 MODULAZIONE DI FREQUENZA
Spettro FM indice 10
Inviluppo di tromba
ampiezza
tempo
Figura 121
122
13.2 MODULAZIONE DI FREQUENZA
a)
b)
c)
123
13.3 PORTANTI MULTIPLE
124
13.4 MODULANTI MULTIPLE
r dur r trig
osc~ 55
duration $1 dump r envindex
*~ 55
*~
+~ 80
osc~
pd indexenv
loadbang
r dur r trig
200
duration $1 dump r envamp
200
*~ s dur
dac~
pd envamp
pd seqz
START SPEED
150
125
13.4 MODULANTI MULTIPLE
inlet inlet
prepend set
unpack f f
* 25 loadbang
pack f f 1 16 0 184 0
line~ 0 5 s envindex
outlet~
inlet
inlet
line~
prepend set
outlet~
loadbang
s envamp
126
13.4 MODULANTI MULTIPLE
r trig
START SPEED
150
pack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sel 1 int 0 + 1
s trig mod 16
127
14
SINTESI PER DISTORSIONE NON LINEARE
(DNL)
128
15
INTRODUZIONE ALLA SINTESI GRANULARE
129
16
A LT R E A P P L I C A Z I O N I D I P U R E D ATA
16.2 A RDUINO
16.2.1 pduino
130
CONCLUSIONE
131
INDICE ANALITICO
object box, 17
object box, 16, 17
print, 16
132