245
Inventare il suono con PURE DATA Manuale introduttivo di musica elettronica vers. 0.4.3 Francesco Bianchi [email protected] 2013

Inventare il suono con PURE DATA - Altervista

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Inventare il suono con PURE DATA - Altervista

Inventare il suono con

PURE DATAManuale introduttivo di musica elettronica

vers. 0.4.3

Francesco Bianchi

[email protected]

2013

Page 2: Inventare il suono con PURE DATA - Altervista

a Mina,per il suo amore e il suo sostegno

Page 3: Inventare il suono con PURE DATA - Altervista

NOTA SUL COPYRIGHT

Questo documento e il suo contenuto sono rilasciati sotto licenza CreativeCommons 2.5 di tipo Attribuzione-Non commerciale-Condividi allo stessomodo 2.5 Generico.

Sei quindi libero:

• di riprodurre, distribuire, comunicare al pubblico, esporre in pub-blico, rappresentare, eseguire e recitare quest’opera

• di modificare quest’opera

alle seguenti condizioni:

• Attribuzione. Devi attribuire la paternità dell’opera nei modi indi-cati dall’autore o da chi ti ha dato l’opera in licenza e in modo taleda non suggerire che essi avallino te o il modo in cui tu usi l’opera.

• Non commerciale. Non puoi usare quest’opera per fini commerciali.

• Condividi allo stesso modo. Se alteri o trasformi quest’opera, o sela usi per crearne un’altra, puoi distribuire l’opera risultante solo conuna licenza identica o equivalente a questa.

2

Page 4: Inventare il suono con PURE DATA - Altervista

C O N T E N T S

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

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

3 basi di programmazione con pure data 21

3.1 Variabili e costanti . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.1.1 pack e unpack . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2 Gestione del tempo . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.2.1 metro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

un contatore . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2.2 line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2.3 delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.2.4 line multirampa con delay . . . . . . . . . . . . . . . . . 29

3.3 Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.3.1 operatori aritmetici . . . . . . . . . . . . . . . . . . . . . 29

3.3.2 expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.4 Generatori di numeri casuali . . . . . . . . . . . . . . . . . . . 32

3.5 Connessioni senza cavi . . . . . . . . . . . . . . . . . . . . . . . 34

3.6 Subpatches e Abstractions . . . . . . . . . . . . . . . . . . . . . . 34

3.6.1 subpatch . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.6.2 abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3

Page 5: Inventare il suono con PURE DATA - Altervista

3.6.3 graph on parent . . . . . . . . . . . . . . . . . . . . . . . 39

4 vettori, grafici e tabelle 41

4.1 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1.1 leggere un vettore . . . . . . . . . . . . . . . . . . . . . 46

4.1.2 l’oggetto table . . . . . . . . . . . . . . . . . . . . . . . . 46

5 programmazione avanzata 48

5.1 Istruzioni condizionali . . . . . . . . . . . . . . . . . . . . . . . 48

5.1.1 operatori relazionali . . . . . . . . . . . . . . . . . . . . 48

5.1.2 select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5.1.3 operatori logici . . . . . . . . . . . . . . . . . . . . . . . 51

5.1.4 If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.2 loops e iterazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6 il midi 58

6.1 Panoramica sul protocollo MIDI . . . . . . . . . . . . . . . . . 58

6.1.1 anatomia di un messaggio MIDI . . . . . . . . . . . . . 59

6.2 Pd e il MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.2.1 midiin e midianalyze . . . . . . . . . . . . . . . . . . . . 61

6.2.2 altri oggetti MIDI . . . . . . . . . . . . . . . . . . . . . . 63

6.3 Un esempio di editing algoritmico MIDI . . . . . . . . . . . . 64

7 oggetti gui 71

7.1 Altre GUI dalle librerie di Pd . . . . . . . . . . . . . . . . . . . 75

ii audio 76

8 l’audio digitale 77

8.1 L’oscillatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

8.1.1 frequenza e ampiezza del segnale . . . . . . . . . . . . 79

8.1.2 osc∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

8.1.3 tabwrite∼ . . . . . . . . . . . . . . . . . . . . . . . . . . 84

8.1.4 la rappresentazione del suono . . . . . . . . . . . . . . 84

8.2 Le forme d’onda . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

8.2.1 tabosc4∼ . . . . . . . . . . . . . . . . . . . . . . . . . . 87

8.2.2 onda quadra . . . . . . . . . . . . . . . . . . . . . . . . . 88

pulse width modulation (PWM) . . . . . . . . . . . . . 90

8.2.3 onda a dente di sega . . . . . . . . . . . . . . . . . . . . 92

phasor∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

8.2.4 onda triangolare . . . . . . . . . . . . . . . . . . . . . . 94

9 il panning 99

9.1 l’oggetto dac∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

4

Page 6: Inventare il suono con PURE DATA - Altervista

9.2 Controllo del panning . . . . . . . . . . . . . . . . . . . . . . . . 100

9.2.1 Segnali bipolari e unipolari . . . . . . . . . . . . . . . . 102

9.2.2 il DC offset . . . . . . . . . . . . . . . . . . . . . . . . . 102

10 sintesi additiva e sintesi vettoriale 106

10.1 Sintesi additiva . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

10.1.1 sintesi additiva a spettro armonico . . . . . . . . . . . . 106

10.1.2 sintesi additiva a spettro non armonico . . . . . . . . . 106

10.2 Sintesi vettoriale . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

10.2.1 dissolvenza incrociata fra due tabelle . . . . . . . . . . 109

10.2.2 dissolvenza incrociata fra quattro tabelle . . . . . . . . 110

11 sintesi sottrattiva 114

11.1 La sintesi sottrattiva . . . . . . . . . . . . . . . . . . . . . . . . 114

11.1.1 il rumore . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

11.2 I filtri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

11.3 I parametri dei filtri . . . . . . . . . . . . . . . . . . . . . . . . . 121

11.4 I filtri in pd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

11.5 Il filtro vcf∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

11.6 Un sequencer con vcf∼ e samphold∼ . . . . . . . . . . . . . . . 126

12 moulazione ad anello (rm), tremolo, modulazione d’ampiezza(am) 128

12.1 La modulazione ad anello . . . . . . . . . . . . . . . . . . . . . 128

12.2 Segnali bipolari e unipolari . . . . . . . . . . . . . . . . . . . . 130

12.3 Segnale di controllo dell’ampiezza: il tremolo . . . . . . . . . 131

12.4 La modulazione d’ampiezza . . . . . . . . . . . . . . . . . . . . 135

12.4.1 l’indice di modulazione . . . . . . . . . . . . . . . . . . 137

13 vibrato e modulazione di frequenza (fm) 142

13.1 Segnale di controllo della frequenza: il vibrato . . . . . . . . . 142

13.2 Modulazione di frequenza . . . . . . . . . . . . . . . . . . . . . 143

13.2.1 l’inviluppo . . . . . . . . . . . . . . . . . . . . . . . . . . 145

13.2.2 FM a spettro variabile . . . . . . . . . . . . . . . . . . . 148

13.3 Portanti multiple . . . . . . . . . . . . . . . . . . . . . . . . . . 150

13.4 Modulanti multiple . . . . . . . . . . . . . . . . . . . . . . . . . 152

14 introduzione alla sintesi granulare 157

14.1 Teoria della sintesi granulare . . . . . . . . . . . . . . . . . . . 157

14.1.1 dipendenza vs. indipendenza dei parametri . . . . . . 157

14.1.2 overlapping . . . . . . . . . . . . . . . . . . . . . . . . . 159

14.1.3 parametri e spettri risultanti . . . . . . . . . . . . . . . 162

14.1.4 Il dominio del tempo e la sintesi granulare . . . . . . . 164

5

Page 7: Inventare il suono con PURE DATA - Altervista

14.2 Implementazione in pd . . . . . . . . . . . . . . . . . . . . . . . 166

14.3 Un esempio di Trainlet Synthesis . . . . . . . . . . . . . . . . . . 166

14.4 La Pulsar Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . 167

14.5 Asyncronous Granular Synthesis . . . . . . . . . . . . . . . . . . 170

14.5.1 vline∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

14.5.2 rendere indipendente il parametro gdur . . . . . . . . . 176

14.6 Granulazione con suoni campionati . . . . . . . . . . . . . . . 182

15 lavorare con sorgenti audio esterne 185

15.1 Sintesi vs. campioni . . . . . . . . . . . . . . . . . . . . . . . . . 185

15.2 Alcuni oggetti utili . . . . . . . . . . . . . . . . . . . . . . . . . 185

15.3 Un semplice random slicer . . . . . . . . . . . . . . . . . . . . . 187

15.3.1 controllare lo slicer via segnale . . . . . . . . . . . . . . 191

15.4 Granulazione su files audio . . . . . . . . . . . . . . . . . . . . 195

iii applicazioni varie 202

16 estendibilità di pd 203

16.1 pd come linguaggio di programmazione . . . . . . . . . . . . 203

16.1.1 externals e librerie . . . . . . . . . . . . . . . . . . . . . . 203

16.1.2 alcune librerie . . . . . . . . . . . . . . . . . . . . . . . . 204

17 gem e il video 205

17.1 la libreria GEM . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

17.2 interazione audio e GEM . . . . . . . . . . . . . . . . . . . . . . 208

18 networking 213

18.1 Architettura di rete in Pd . . . . . . . . . . . . . . . . . . . . . 213

18.1.1 netsend e netreceive . . . . . . . . . . . . . . . . . . . . . 214

18.1.2 Dynamic patching . . . . . . . . . . . . . . . . . . . . . . 217

18.1.3 pdsend . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

18.2 il protocollo OSC . . . . . . . . . . . . . . . . . . . . . . . . . . 223

18.3 L’audio in streaming . . . . . . . . . . . . . . . . . . . . . . . . . 225

19 applicazioni sparse 233

19.1 Laptop Orchestra . . . . . . . . . . . . . . . . . . . . . . . . . 233

19.2 Il Live Coding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

19.3 Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

Conclusione 239

Bibliografia 241

Sitografia 242

Indice analitico 243

6

Page 8: Inventare il suono con PURE DATA - Altervista

I N T R O D U Z I O N E

La diffusione massiccia che i moderni calcolatori hanno avuto negli ultimi30 anni ha prodotto un’onda d’urto dirompente nel mondo della musicaelettronica che fino agli anni ’70 era appannaggio di quei pochi fortunatiche potevano accedere ai rari centri europei e americani che disponevanodelle apparecchiature per realizzarla. In pochi anni, a partire dall’avventodei primi home computers si sono moltiplicati a dismisura i software di ma-nipolazione dell’audio e oggi chiunque può trovare in rete o in commer-cio programmi per produrre il proprio brano o il proprio disco di musicaelettronica, spesso senza il bisogno di conoscere a fondo i principi, il fun-zionamento e le tecniche che stanno alla base dell’audio digitale. Con unsemplice click è possibile proiettarsi nel mondo dei suoni più strani senzadover necessariamente conoscere una tecnica di sintesi o, quantomeno, unoscillatore.

Stando così le cose, qualcuno a questo punto potrebbe chiedersi, leggitti-mamente, perché dovrebbe leggere un manuale di musica elettronica. Ilpanorama del software è talmente vasto che chiunque può trovare il pro-gramma adatto alle sue esigenze, in linea con le proprie conoscenze infor-matiche e musicali. Eppure ci sono varie ragioni perché si potrebbe leggereun manuale del genere e imparare almeno le basi della programmazione edella sintesi dell’audio. Proviamo ad elencarne qualcuna:

- Studiare la musica elettronica aiuta a capire meglio quello che si facon i programmi, soprattutto aiuta a capire quali sono i limiti deiprogrammi stessi. Ad esempio i sintetizzatori software attualmentein commercio sono per lo più monofunzionali, cioè svolgono un com-pito e solo quello. Naturalmente in molti casi lo svolgono benissimo,ma non sanno fare altro. Ci sono sintetizzatori per la Modulazionedi Frequenza, sintetizzatori per la Sintesi Granulare o Additiva. Se sivuole possedere un sintetizzatore per una di queste tecniche bisognaacquistarlo o bisogna accontentarsi di prodotti che non danno ottimirisultati.

7

Page 9: Inventare il suono con PURE DATA - Altervista

- Questi programmi costano molto, soprattutto i migliori. Se si vo-lessero avere dei sintetizzatori per realizzare 3 o 4 tecniche di sintesidel suono si dovrebbero acquistare 3 o 4 prodotti commerciali di-versi, questo a scapito del portafogli e del fatto che probabilmente fraqualche anno saranno obsoleti e diverranno quindi praticamente inu-tili. E’ molto meglio studiare le tecniche di sintesi e il funzionamentodell’audio digitale per avere l’opportunità di utilizzare programmiforse più complessi, ma che danno l’opportunità di costruirsi da solii propri suoni.

- Inventare i propri suoni non è una cosa da poco. I software commer-ciali sono corredati sempre da moltissimi suoni preconfezionati, dettipreset, molto utili, ma che affievoliscono inevitabilmente il desideriodi cercarne di nuovi. Si inizia ad accontentarsi di quello che offre ilconvento, che spesso è gradevole e non richiede dispendio eccessivodi energie. Ma quei suoni saranno sempre dei preset fatti da qualcunaltro, non apparterranno mai completamente a chi li usa. Quindi stu-diare e praticare la musica elettronica è un modo per appropriarsidel suono, per creare il proprio, che molte volte non sarà il più bello,ma alcune volte sarà sicuramente unico.

- Un ultimo argomento, ma non certo meno importante. Una voltaapprese le tecniche di sintesi si possono scegliere programmi a costozero, cioè freeware, come Pure Data, oggetto di questo manuale. Scegliereun programma gratuito implica molte cose, alcune meno scontate diquanto si pensi:

– Non è solo una scelta di risparmio, ma una rivendicazione etica.Sintetizzare il suono attraverso un software digitale implica laprogettazione e la realizzazione di algoritmi più o meno com-plessi. Gli algoritmi non sono altro che rappresentazioni delpensiero, e il pensiero non si paga, nessun prezzo.

– Usare un software libero significa condividerne una filosofiabasata sulla condivisione dei saperi. I programmi liberi sonotali in tutto e per tutto nella maggior parte dei casi. Si può prel-evare il sorgente, studiarlo, modificarlo e redistribuirlo. Non acaso intorno a questi software ci sono delle vere e proprie comu-nità che si scambiano opinioni, idee e progetti, condividendoliberamente il proprio pensiero con altri.

8

Page 10: Inventare il suono con PURE DATA - Altervista

– Il software libero è soggetto a mutamento continuo, a un divenirecostante che lo pone nella condizione di migliorare molto piùvelocemente del software commerciale e di non invecchiare mai.

Studiate quindi la musica elettronica e praticatela, possibilmente con soft-ware libero.

Buon divertimento!

9

Page 11: Inventare il suono con PURE DATA - Altervista

Part I

L’A M B I E N T E

Page 12: Inventare il suono con PURE DATA - Altervista

1 F O N DA M E N T I

1.1 COS’È PURE DATA?

Traducendo dal sito ufficiale, apprendiamo che Pure Data è un ambiente diprogrammazione grafica in tempo reale per processare audio e video1. Cer-chiamo di entrare nel dettaglio di questa descrizione. Pure Data è primadi tutto un linguaggio di programmazione perché consente di realizzare al-goritmi più o meno complessi come tutti gli altri linguaggi2. L’interfacciacon cui il musicista-programmatore parla con Pd è grafica, quindi non c’èla necessità di scrivere il codice in un editor di testo, ma si realizzano dellepatch combinando fra loro vari tipi di oggetti grafici. Nel gergo dei sinte-tizzatori analogici una patch rappresentava l’insieme dei collegamenti fra isuoi moduli. Pd mutua questo concetto: attraverso una patch si definiscegraficamente l’ordine con cui i vari oggetti sono collegati fra loro. Gli al-goritmi vengono creati selezionando una serie di entità grafiche all’internodi una finestra, detta patch window.

Pd funziona in tempo reale, quindi gli algoritmi sono interattivi e i parametripossono essere modificati durante l’esecuzione. E’ anche possibile cam-biare la struttura stessa di tali algoritmi mentre sono attivi, aggiungendo orimuovendo moduli in modo semplice e intuitivo.

Pd nasce con la funzione di creare applicazioni audio e, da qualche tempo,video. Una foltissima comunità di sviluppatori, musicisti, hackers e appas-sionati sforna ogni giorno nuove applicazioni e librerie che potenziano eaumentano le funzionalità di questo ambiente versatile e libero. Si, perchéPure Data è un software libero, e i suoi sorgenti possono essere scaricati,

1 http://puredata.info/

2 Un algoritmo si può definire come un procedimento che consente di ottenere un risultatoatteso eseguendo, in un determinato ordine, un insieme di passi semplici corrispondenti adazioni scelte solitamente da un insieme finito http://it.wikipedia.org/wiki/Algoritmo

11

Page 13: Inventare il suono con PURE DATA - Altervista

studiati, modificati e redistribuiti da chiunque. Inoltre Pure Data è mul-tipiattaforma, quindi gira sui sistemi operativi più comuni: GNU/Linux,Microsoft Windows, Apple Mac OS X, FreeBSD.

Pd è stato scritto nel 1996 da Miller Puckette, lo stesso che a metà deglianni ’80 aveva sviluppato Max, in seguito divenuto un software commer-ciale3. Pd riprende le idee e i concetti di quest’ultimo, pur basandosi suuna filosofia più libera e aperta che ne fa un sistema più dinamico e dalleprospettive future più interessanti.

1.2 PD-EXTENDED

Allo stato attuale Pd è arrivato alla versione standard 0.42.5, detta Vanilla,scaricabile dal sito del suo creatore4 . Il consiglio di chi scrive è però quellodi scaricare la versione extended, che contiene non solo il programma stan-dard, ma anche numerose librerie aggiuntive che estendono notevolmentele sue funzionalità. Attualmente Pd-extended è alla versione 0.41.45.

1.3 INSTALLAZIONE

1.3.1 GNU/LINUX

Prendiamo in esame solo l’installazione su Ubuntu GNU/Linux, sistemaoperativo sul quale è stato scritto in gran parte il presente manuale e alquale ci riferiamo citando le combinazioni di comandi da tastiera su Pd.Come già scritto in precedenza, il consiglio è quello di scaricare e installarel’ultima versione di Pd-extended. Per fare questo è sufficiente aggiungerela seguente riga al file /etc/apt/sources.list:

deb http://apt.puredata.info/releases hardy main

nel caso si stia operando in una distribuzione Ubuntu Hardy, in caso di-verso sostituire la dicitura hardy con il mome della distribuzione di Ubuntuinstallata.

3 Miller Puckett: http://crca.ucsd.edu/~msp/ Max-Msp: http://cycling74.com/

products/maxmspjitter/

4 http://crca.ucsd.edu/~msp/software.html

5 http://puredata.info/downloads

12

Page 14: Inventare il suono con PURE DATA - Altervista

Successivamente si può eseguire l’installazione dal package manager diUbuntu, Synaptic. Aprirlo, aggiornare l’archivio dei pacchetti, cercare Pd-extended e dopo averlo marcato far partire il processo di installazione, allafine del quale Pd potrà essere richiamato da un terminale digitando sem-plicemente:

pd

Oppure dal menù Applicazioni/Audio e Video/Pd-extended

1.3.2 WINDOWS E MAC OS X

Dopo aver scaricato la versione di Pd-extended per Windows o per Mac OSX, eseguire il file scaricato e seguire le semplici istruzioni di installazione.

13

Page 15: Inventare il suono con PURE DATA - Altervista

2 PA N O R A M I C A D E L L’A M B I E N T E

2.1 PD window E patch window

All’apertura di Pd compare la finestra principale del programma (Pd win-dow) che ha due funzioni principali:

- mostrare dei messaggi

- consentire la configurazione dell’audio e del MIDI e definire i per-corsi in cui Pd cerca le librerie da caricare

Alcuni messaggi vengono visualizzati in fase di avvio del programma,riguardano le librerie esterne caricate e gli eventuali errori nella configu-razione dell’audio o del MIDI. Altri messaggi possono essere mostrati nellaPd window durante la normale esecuzione del programmano e il più dellevolte riguardano errori di procedura o comunicazioni prodotte dall’utentetramite l’oggetto print che sarà esaminato successivamente (vedi 2.1.2).

La configurazione dell’audio avviene tramite la voce di menù Media checonsente di impostare il MIDI (MIDI settings), l’audio (Audio settings), diavviare il motore DSP (Audio on/off) e di testarne il funzionamento (testAudio and MIDI).

La voce di menù File permette di aprire, chiudere, salvare le patch e diconfigurare il percorso che Pd compie per trovare le librerie esterne (Path)e quali di esse caricare all’avvio (Startup)1.

Nella versione extended il Path e lo Startup sono già impostati per caricarela maggior parte delle librerie necessarie per una completa funzionalità

1 Esistono numerose librerie, generalmente scritte in C o in Pd stesso, molte delle quali sonogià incluse nel pacchetto Pd-extended, altre scaricabili dal sito ufficiale o da altri siti (vedisitografia)

14

Page 16: Inventare il suono con PURE DATA - Altervista

dell’ambiente.

Generalmente all’apertura del programma ci si trova di fronte soltanto laPd window. Per iniziare a scrivere gli algoritmi è necessario aprire unafinestra di patch dal menù File/new. Compare così la patch window che èl’ambiente di programmazione vero e proprio. Il suo menù è molto sim-ile a quello della Pd window ma ovviamente più orientato all’editing dellepatch.

La patch window può trovarsi in due stati funzionali diversi: edit mode erun mode. Il primo permette di inserire tutti gli elementi all’interno dellafinestra, mentre il secondo è necessario per gestire la patch quando questaè in azione. Tutti gli oggetti interattivi cioè quelli che contengono parametrimodificabili via mouse o tastiera, funzionano soltanto in run mode, mentrein edit mode possono solo essere aggiunti o rimossi. Per passare da unostato all’altro si usa la combinazione di tasti ctrl-E.

2.1.1 IL MOTORE DSP

Quando gli algoritmi di Pd processano esclusivamente dati, il programmaè completamente attivo sin dalla sua apertura. Nel caso in cui invece sidevono processare segnali audio, è necessario attivare il motore DSP perascoltare il risultato delle operazioni sui segnali. Il motore DSP, acronimodi Digital Signal Processor, si occupa di elaborare il segnale in tempi ra-pidissimi e di permettere la sua trasformazione da digitale ad analogico eviceversa.Nel momento in cui il coder vuole suonare una patch deve quindi attivareil motore DSP, mediante l’apposita voce di menu Media/audio on. Inalternativa può premere la combinazione di tasti ctrl-/. Vedremo suc-cessivamente le altre possibilità di intervenire sull’attivazione e la disatti-vazione del motore DSP, quando si tratterà dell’audio nella seconda partedel presente manuale.

2.1.2 print

Durante l’esecuzione delle patch può accadere che vengano automatica-mente visualizzati dei messaggi nella Pd window, in particolare alla pre-senza di errori, ma c’è un oggetto che permette al programmatore di visu-alizzare nella Pd window il messaggio o dato che desidera. Si tratta di print,

15

Page 17: Inventare il suono con PURE DATA - Altervista

che può solo ricevere dati o messaggi e stamparli a video nella Pd window.In alcune circostanze è utile per verificare il corretto funzionamento deglialgoritmi.

Hello World!

print

Figure 1: un click del mouse sul messaggio produce un output nella Pd window

2.2 LE scatole DI PD

La finestra di patch è il luogo che permette la realizzazione degli algoritmidi Pd. Essendo un ambiente grafico la finestra si riempirà di entità di varianatura, dette scatole (box). Queste scatole sono di quattro tipi: oggetti, mes-saggi, GUI e commenti e si creano dal menù Put oppure premendo ctrl+ndove n è 1 per gli oggetti, 2 per i messaggi, 5 per i commenti. I numeri3 e 4 creano delle GUI particolari, simboli e number box che esamineremosuccessivamente.

2.2.1 OGGETTI E CONNESSIONI

Gli elementi fondamentali della programmazione in Pure Data sono gli le object box

oggetti, rappresentati dalle object box, caratterizzate dalla forma rettango-lare e dalla presenza di entrate (inlets), nella parte superiore, e di uscite(outlets), nella parte inferiore.

Un oggetto può creare o processare dati oppure segnale audio e riceveattraverso gli inlets messaggi, liste o uscite di altri oggetti. Può inviare datio segnali ad altri oggetti. All’interno dell’object box si situano gli atomi, cioèstringhe di caratteri o simboli separati da spazi che rappresentano il tipodi oggetto e gli eventuali argomenti dell’oggetto stesso2.

2 il concetto di atomo è mutuato dal Lisp, un linguaggio di programmazione orientatoall’elaborazione di espressioni simboliche rappresentate sotto forma di liste e atomi. Una listasi ha in presenza di più espressioni Lisp, un atomo invece è una lista con una sola espres-sione. Per approfondire: www.diee.unica.it/~roli/IA/Materiale%20didattico/AA0910/

Lisp.pdf

16

Page 18: Inventare il suono con PURE DATA - Altervista

random 250

Figure 2: un esempio di object box: l’oggetto metro con un argomento

I collegamenti fra oggetti, anzi fra tutte le object box avvengono tramitecavi di connessione che si realizzano tenendo premuto il tasto sinistro delmouse a partire dall’outlet mittente e rilasciandolo non appena si è rag-giunto l’inlet di arrivo.

+

random

select 0 5 7

Figure 3: collegamenti fra object box

L’inlet di sinistra di ogni oggetto è detto caldo poiché alla ricezione di unmessaggio, di un dato o di un segnale, produce immediatamente un’uscitadall’oggetto stesso. Tutti gli altri inlets sono freddi, quindi nel momentoin cui ricevono un dato, messaggio o segnale, lo inseriscono temporanea-mente all’interno dell’oggetto, fino a che lo stesso non viene processatoall’attivazione dell’inlet caldo.

pack 0 0

counter

Figure 4: l’entrata fredda riceve un dato dall’oggetto counter, ma pack non producealcun dato in uscita finché l’inlet caldo non riceverà qualcosa

17

Page 19: Inventare il suono con PURE DATA - Altervista

Come già detto, gli oggetti insistono su dati o segnali audio. Graficamentegli oggetti-audio si distinguono da quelli per i dati perché il primo atomo(ovvero il nome) termina sempre con il segno della tilde (∼) e gli inlet eoutlet che processano segnale sono scuri. I cavi che trasportano segnalesono più spessi di quelli che trasportano dati.

random 1000

osc~

dac~

Figure 5: confronto visivo fra oggetti-dato e oggetti-audio

2.2.2 MESSAGGI E LISTE

Le message box hanno forma rettangolare con il lato destro rientrante. Pos-sono contenere stringhe di caratteri, numeri, liste o variabili e vengono at-tivati con un click del mouse quando si è in run mode oppure alla ricezionedi un altro messaggio o di particolari azioni.

questo è un messaggio

print

Figure 6: un click con il mouse sul messaggio produce un output del messaggiostesso nella Pd window

18

Page 20: Inventare il suono con PURE DATA - Altervista

bang E number box

Un altro modo di attivare un messaggio è quello di utilizzare un bang, unodei più importanti oggetti di Pd. La sua funzione è quella di innescareun’azione o una sequenza di azioni, può mettere in funzione un algoritmo.Si avrà modo di incontrarne praticamente in ogni patch.

questo è un messaggio

print

Figure 7: la stessa patch precedente, con la differenza che il messaggio viene atti-vato da un click del mouse sul bang

Il bang ha una sua versione grafica (si ottiene premendo all’interno dellapatch ctrl+shift+b e una doppia versione testuale, che permette di evitareun eccessivo uso di elementi grafici che appesantiscono l’esecuzione deiprogrammi.

bang

b

bang grafico

oggetti bang

Figure 8: le varie versioni del bang

Un altro oggetto molto comune nelle patch di Pd è la number box checonsente di inviare messaggi numerici con il vantaggio di poter variarei numeri all’interno della box stessa con la pressione e il trascinamentodel mouse verso il basso per diminuire e verso l’alto per aumentare il nu-mero stesso. Per comodità è possibile stabilire eventuali minimi e massimidella number box premendo il destro del mouse e andando sulle proprietà

19

Page 21: Inventare il suono con PURE DATA - Altervista

dell’oggetto3 . Una number box può inviare o ricevere dati attraverso i suoiinlet.

7

+ 5

12

Figure 9: l’oggetto ’+’ effettua in questo caso la somma fra il numero che entranell’inlet di sinistra e 5, e manda l’output alla number box sottostante

3 La finestra delle proprietà è attiva in Pd per tutti i tipi di GUI e consente di configurareuna serie di parametri come la veste grafica o i valori consentiti

20

Page 22: Inventare il suono con PURE DATA - Altervista

3 B A S I D I P R O G R A M M A Z I O N E C O NP U R E DATA

3.1 VARIABILI E COSTANTI

Pure Data è un linguaggio di programmazione orientato all’audio, quindial tempo. Per tale ragione i valori e le quantità passate agli oggetti sonoquasi sempre variabili, interattivamente o meno. In fase di apertura di unapatch ci potranno essere delle quantità inizializzate, ma esse all’occorrenzapotranno essere variate durante l’esecuzione del programma. Ne sono es-empio i parametri passati agli oggetti dall’interno dell’objet box, cioè gliatomi che seguono il primo (il quale, ricordiamo, da il nome all’oggettostesso).

Per comprendere meglio questo concetto esaminiamo la patch che abbiamogià incontrato nella figura 9 . L’inlet di sinistra dell’oggetto ’+’ riceve unaquantità variabile che viene sommata alla costante ’5’ definita all’internodell’object box. Così com’è la patch non fa altro che operare una sommafra la quantità in entrata e la costante definita nell’oggetto. L’inlet destrodell’oggetto ’+’ offre però l’opportunità di variare il secondo addendodella somma.

30

10 20

+ 5

Figure 10: è possibile cambiare a piacimento gli addendi della somma

21

Page 23: Inventare il suono con PURE DATA - Altervista

Esaminiamo il comportamento della patch in figura 10: se cambiamo ilprimo elemento dell’addizione senza toccare il secondo, l’output sarà lostesso di prima: somma del primo elemento con 5. Ora proviamo a cam-biare il secondo addendo. Non avremo alcun output!

Non va dimenticato che gli inlet successivi al primo di sinistra sono freddi:immagazzìnano il dato in entrata senza produrre uscita. E’ necessarioquindi dire all’oggetto ’+’ di effettuare l’operazione fra i due nuovi ad-dendi e di far uscire il risultato. Nel caso di questo oggetto è sufficienteinserire nell’inlet di sinistra un bang, collegato all’uscita del secondo ad-dendo, che ordina all’object box di far uscire il risultato immediatamente1 .

17

14 3

+ 5

Figure 11: il bang collegato all’uscita del secondo addendo, in entrata nell’inletsinistro dell’oggetto ’+’ rende caldo l’inlet destro dell’oggetto stesso

E’ buona norma stabilire dei valori in fase di inizializzazione della patch inmodo che essa sia immediatamente funzionante alla sua apertura. Per farequesto è sufficiente scrivere i parametri degli oggetti all’interno delle objectbox. Quando questo non è possibile si può ricorrere al’oggetto loadbang cheattiva un bang all’apertura della patch (figura 12).Vi sono circostanze in cui è necessario specificare delle variabili all’internodelle object box. Questo è possibile attraverso il simbolo $n, dove n è un

1 L’oggetto ’+’ oltre ad accettare numeri in entrata, accetta anche bang nell’inlet di sinistra. Ilbang non fa altro che dire all’oggetto di far uscire ciò che ha in memoria, cioè il risultatodell’addizione

22

Page 24: Inventare il suono con PURE DATA - Altervista

12

7

loadbang

+ 5

Figure 12: all’apertura della patch si avrà come output la somma fra 7 e 12

numero identificativo. La variabile assume di volta in volta il valore che lamessage box riceve nel suo inlet (figura 13)2 .

scelgo il numero $1

12

print

Figure 13: variabile in una message box, osservare l’output nella Pd window

3.1.1 pack E unpack

Nel caso in cui una messege box contenga più di una variabile è necessarioche 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 variabili devonoassumere. Per realizzare tali liste esiste un oggetto apposito chiamato pack,

2 I simboli identificativi delle variabili devono iniziare da $1 e seguire ordinatamente. Se unamessage box ha 3 variabili $1 $2 ed $3 e riceve una lista di 3 atomi, il primo andrà nellavariabile $1, il secondo nella $2, etc. . .

23

Page 25: Inventare il suono con PURE DATA - Altervista

che mette insieme diversi valori singoli (atomi), combinandoli in liste. Gliargomenti di pack inizializzano il valore del relativo inlet al valore segnato.Ad esempio pack 2 19 25 avrà 3 inlet rispettivamente inizializzati con i valori2, 19, 25. Un bang in entrata nell’inlet sinistro produrrà l’output della listain memoria in quel momento (fig. 14).

la data di oggi: giorno $1 mese $2 anno $3

print

pack 20 1 2010

0 0 0

Figure 14: pack: un click sul bang senza cambiare i valori delle number box producel’uscita dei valori inizializzati. Una variazione delle number box pro-duce un output nel momento in cui viene cambiato il valore dell’inletdi sinistra. Osservare il risultato nella Pd window

L’oggetto unpack fa il contrario rispetto a pack: prende una lista e ne con-voglia i singoli atomi attraverso i suoi inlet.

3.2 GESTIONE DEL TEMPO

Come detto in precedenza, Pd è un linguaggio orientato al tempo, quindici sono molti oggetti deputati alla gestione di eventi temporali. Esaminer-emo alcuni di questi senza dimenticare che la presente trattazione non puòtrattare di molti altri oggetti che il programmatore scoprirà nel suo cam-mino3.

3 Premendo il destro del mouse su un oggetto si può accedere all’help dello stesso. In molticasi la pagina dell’help rimanda anche ad oggetti simili a quello esaminato. E’ sempreutilissimo pertanto navigare fra le pagine di help che sono uno strumento di navigazionefondamentale fra gli oggetti di Pd.

24

Page 26: Inventare il suono con PURE DATA - Altervista

unpack 0 0 0

20 1 2010

20 1 2010

Figure 15: unpack: un click sulla message box produce un output in ognuno dei treoutlet

3.2.1 metro

L’oggetto metro produce in output un bang ogni n millisecondi, dove n èl’argomento dell’oggetto e rappresenta la distanza temporale fra un bang el’altro. Per funzionare ha bisogno che sia attivato attraverso un messaggiodiverso da zero o un bang. Un messaggio uguale a zero oppure stop, spegnel’oggetto.

1

bang

0

stop

0

metro 500

un numero diverso da 0 o un

"bang" attivano metro

0 o "stop" fermano metro

l'inlet di sinistra consente

di modificare la distanza

temporale fra i "bang"

Figure 16: metro

25

Page 27: Inventare il suono con PURE DATA - Altervista

UN CONTATORE

Attraverso l’oggetto metro e un altro oggetto che esamineremo in questoparagrafo, possiamo costruire un contatore4. La patch non fa altro cheemettere a intervalli regolari (nel nostro caso 500 ms) un numero intero apartire da zero tale che il successivo sia maggiore del precedente di unaunità. L’algoritmo necessita di un oggetto che permetta di conservare inmemoria un numero intero. L’oggetto che fa al caso nostro è int. L’inlet de-stro di int riceve un intero e lo memorizza finché un bang nell’inlet sinistronon lo costringe a inviarlo dall’outlet. All’apertura della patch l’oggettoint viene inizializzato con uno zero nella sua memoria (tramite loadbang.All’attivazione di metro, int riceve un bang nella sua entrata calda facendouscire zero, che viene mandato all’uscita della patch e contemporaneamenteviene sommato a 1, tramite l’oggetto ’+’. Quest’ultimo a sua volta spedisceil risultato, cioè uno, nell’entrata fredda di int. Il nuovo valore (uno) uscirànon appena il successivo bang prodotto da metro non sopravvenga, e cosìvia (figura 17).

3.2.2 line

Un oggetto molto comune in Pd è line, che generara delle rampe per rag-giungere un determinato valore. line ha bisogno di almeno due argomenti,il valore-obiettivo, cioè la quantità da raggiungere, e il tempo in millisec-ondi necessario a raggiungerlo. In presenza di un messaggio con una listadi due numeri, line raggiungerà il primo nel tempo in millisecondi indicatodal secondo (figura 18).Un oggetto molto comune in Pd è line, che generara delle rampe per rag-giungere un determinato valore. Accetta due argomenti via message box,ovvero il valore-obiettivo e il tempo in millisecondi per raggiungerlo (fig.18).Una volta terminato il suo percorso line mantiene in memoria il valore-obiettivo, quindi un secondo click sulla message box non produrrà un nuovooutput perché si direbbe a line di creare un percorso da 1000 a 1000 in5 secondi. Se volessimo reinizializzare ogni volta l’oggetto line ad esem-pio chiedendogli di creare ogni volta il percorso da 0 a 1000 in 5 secondi,basterà creare una lista di tre atomi, con il primo che indica il valore di

4 In generale un contatore è un dispositivo che memorizza (e a volte visualizza) il numerodi volte che un particolare evento o processo si verifica. In una caso molto semplice, uncontatore può contare i bang che riceve ed emettere il conteggio dal suo outlet.

26

Page 28: Inventare il suono con PURE DATA - Altervista

metro 500

0 1

int

0

+ 1

23

loadbang

Figure 17: click su 1 per avviare il contatore, su 0 per fermarlo

partenza, il secondo con il valore-obiettivo, separato dal precedente dauna virgola e infine con il tempo in millisecondi (figura 19).line puÚ avere anche due argomenti interni alla object box:

1. Il valore da cui iniziare la prima rampa (default 0)

2. La distanza di tempo in millisecondi fra l’uscita di un valore e ilsuccessivo (default 20 ms)

Nella figura 20 il valore-obiettivo è 2000, da raggiungere in 5 secondi. Larampa inizia da 1000 e i valori escono ogni mezzo secondo (500 ms).

3.2.3 delay

L’oggetto delay emette un bang dopo aver ricevuto un bang a sua volta.L’unico argomento che accetta (dall’inlet destro) è il ritardo con cui verràemesso il bang stesso (figura 21).

27

Page 29: Inventare il suono con PURE DATA - Altervista

1000 5000

line

0

Figure 18: line al momento della creazione è inizializzato a zero, quindi in questocaso al momento del click sulla message box inizierà un percorso da 0 a1000, completandolo in 5 secondi

line

0, 1000 5000

0

Figure 19: si può ricominciare la rampa da 0 a 1000 ogni volta che si preme sullamessage box

0

line 1000 500

2000 5000

Figure 20: rampa da 1000 a 2000 in 5 secondi, con step di mezzo secondo fra unvalore e l’altro in uscita

28

Page 30: Inventare il suono con PURE DATA - Altervista

metro 1000

delay 500

1

0

Figure 21: i bang saranno intermittenti

3.2.4 line MULTIRAMPA CON delay

Con gli oggetti line e delay possiamo costruire rampe multiple in modomolto semplice. E’ sufficiente preparare tante message box quante sarannole rampe e metterle in azione in successione con delay. Nel caso della patchin figura 22 c’è un oggetto grafico per rappresentare le rampe, una sliderorizzontale, di cui ci occuperemo in un apposito capitolo.

3.3 ARITMETICA

Pd dispone di una serie di oggetti che consentono di effettuare le più co-muni operazioni matematiche. Abbiamo già incontrato l’oggetto ’+’ chepermette l’operazione di somma. Nel prossimo paragrafo esamineremoalcuni altri oggetti per operare sui numeri.

3.3.1 OPERATORI ARITMETICI

Gli oggetti per le operazioni aritmetiche e matematiche funzionano tuttiallo stesso modo, per ora ci limitiamo a darne qui un elenco. Successiva-mente avremo modo di usarli massicciamente.

Operazioni aritmetiche:

• +

• -

29

Page 31: Inventare il suono con PURE DATA - Altervista

0, 127 1000 50 600 100 1500

line

0

delay 1000 delay 1600

Figure 22: click sul bang pi˘ in alto della patch

• *

• /

• pow

Operazioni trigonometriche:

• sin

• cos

• tan

• atan

• atan2

Operazioni sulle frazioni

• mod

• div

e molti altri...

30

Page 32: Inventare il suono con PURE DATA - Altervista

3.3.2 expr

expr è un versatile strumento che permette di raggruppare in un unicooggetto una serie di operazioni. Con Pd può capitare spesso di dovereffettuare una sequenza di operazioni matematiche, attraverso expr si pos-sono combinare insieme in modo da non occupare spazio e da rendere piùchiara per il programmatore la sequenza delle operazioni stesse. Per poterfunzionare con dei dati in ingresso expr necessita di simboli per rappre-sentare delle variabili, che, a differenza delle variabili delle message box siscrivono in questa forma: $xn dove x è il tipo della variabile e n è il numeroordinale che la rappresenta (fig. 23).Le variabili possono essere di tipo intero, decimale, simbolo e rispettivamenteavranno la forma $in, $fn e $sn.

4

+ 12

42.6667 42.6667

/

* 24 - 7

expr (($f1 + 12) * 24)/(($f1 + 12) - 7)

Figure 23: nella parte sinistra le operazioni si succedono dall’alto verso il basso,nella parte destra le stesse vengono raggruppate da expr. Valutare idue algoritmi in parallelo con un click sul bang

31

Page 33: Inventare il suono con PURE DATA - Altervista

3.4 GENERATORI DI NUMERI CASUALI

Dopo i più comuni operatori matematici é utile soffermarsi su alcuni oggettidi Pd che generano numeri casuali. Qualunque coder prima o poi si imbattenell’esigenza di usare numeri casuali e chi usa Pd non fa eccezione. Ilprimo strumento che esaminiamo é random che genera un numero casualeogni volta che riceve un bang. Questo numero viene scelto in un range com-preso fra 0 e il numero definito nel primo argomento dell’oggetto meno 1.Un secondo argomento, facoltativo, imposta il seme della sequenza. Senzavolersi soffermare troppo sulle implicazioni tecniche della generazione dinumeri casuali, c’é da dire quantomeno che generalmente quando si parladi generatori di numeri casuali si usa un termine improprio, perché inrealtà si tratta di generazione di numeri pseudo-casuali, poiché questi ven-gono generati da algoritmi. Nel caso di Pd alla base della generazionedi questi numeri c’é una complessa equazione con una serie di variabili.Il seme della sequenza generata non é altro che una variabile di questaequazione.

random 250

metro 500

1 0

0

Figure 24: la patch genera un numero pseudo-casuale ogni mezzo secondo

random produce solo interi, ma se volessimo generare dei numeri pseudo-casuali decimali potremmo semplicemente dividere l’output (figura 25).L’oggetto randomF fa la stessa cosa, ma con una precisione molto maggiore.Se invece volessimo creare una sequenza di numeri pesata, cioé generatacon una certa probabilità potremmo usare l’oggetto moses che consente diconvogliare un flusso di numeri in due outlet diversi in base a un valore-soglia definito come argomento. I numeri al di sotto del valore-soglia ven-gono convogliati dall’outlet sinistro, quelli al di sopra da quello destro.

32

Page 34: Inventare il suono con PURE DATA - Altervista

metro 500

1 0

0

random 1001

/ 1000

Figure 25: la patch genera un numero pseudo-casuale compreso fra 0 e 1, con 3

cifre decimali

metro 500

1 0

random 100

moses 25

Figure 26: i numeri da 0 a 24 producono un bang dall’outlet sinistro, quelli da 25 a99 dal destro. Volendo parlare di percentuali, l’outlet sinistro ha il 25%di possibilità di produrre un bang, quello destro il 75%

L’oggetto decide produce pseudo-casualmente solo sequenze di 0 e 1, men-tre drunk funziona come random ma sceglie il numero effettuando un saltoche lo distanzia dal precedente al massimo quanto stabilito nel secondoargomento (stepsize).In figura 28 si può osservare il diverso andamento di due sequenze casuali.La prima, generata con random, ha una distribuzione lineare, la seconda,

33

Page 35: Inventare il suono con PURE DATA - Altervista

metro 500

1 0

80

drunk 100 10

Figure 27: ogni mezzo secondo viene generato un numero compreso fra 0 e 99,dove ogni numero é a una distanza minore o uguale 10 dal precedente

frutto di drunk é molto più ordinata: gli elementi della sequenza si spostanoentro un range limitato (definito dal secondo argomento di drunk).

3.5 CONNESSIONI SENZA CAVI

Al fine di evitare di riempire la patch window di cavi che possono rendernemeno chiara l’interpretazione, si possono usare i due oggetti send e receive,che permettono di creare una connessione senza fili fra le box. L’argomentodi receive è un nome identificativo che deve essere identico a quello di send.E’ possibile avere più oggetti receive con lo stesso identificativo: tutti ricev-eranno dall’oggetto send che ha lo stesso nome. Un’ultima annotazione,send e receive possono essere abbreviati in ’s’ e ’r’ (fig. 29).

3.6 Subpatches E Abstractions

Ci sono circostanze in cui le patch sono molto complesse e articolate. Inquesti casi Pd mette a disposizione degli strumenti per annidare delle porzionidi patch in box apposite. Esistono due modi per annidare contenuti dentrotali box, il primo è quello di creare delle subpatch, l’altro quello di creareabstraction. Le subpatch appaiono come delle normali object box formatedal nome pd seguito da un nome identificativo per la subpatch, esse pos-sono essere utilizzate solo all’interno della patch dove sono state create oall’interno di altre subpatch della stessa patch. Le abstraction invece, pur ap-parendo come delle normali object box, hanno solo un nome identificativo,

34

Page 36: Inventare il suono con PURE DATA - Altervista

random

drunk

Figure 28: in alto la sequenza generata da random, in basso quella creata con drunk,con una stepsize di 25

ma vengono salvate indipendentemente dalla patch in cui vengono usate esono riutilizzabili in altre patch.

3.6.1 subpatch

Per creare una subpatch é sufficiente scrivere all’interno di una nuova objectbox pd nome, si aprirà una nuova finestra all’interno della quale si inseriràil contenuto della subpatch. Questa nuova finestra si può chiudere in qual-sisasi momento senza bisogno di salvarla e riaprirla con un semplice clicksulla object box in run mode. La patch in figura 30 realizza un algoritmo at-traverso il quale vengono emessi dei bang da quattro outlet diversi, il primo

35

Page 37: Inventare il suono con PURE DATA - Altervista

4

send numero

receive numero

r numero

r numero

4

4

8

* 2

Figure 29: connessioni senza fili

random 500

+ 1

moses 250

metro 500

moses 126 moses 376

Figure 30: un semplice algoritmo senza annidamenti

da sinistra se random emette un numero fra 1 e 125, il secondo se il numeroé compreso fra 126 e 250, e cosÏ via. L’algoritmo della figura 31 é identicoal precedente, con l’unica differenza che é realizzato con una subpatch. Le

36

Page 38: Inventare il suono con PURE DATA - Altervista

subpatch funzionano esattamente come le patch solo che devono contenereal loro interno le entrate e le uscite necessarie perché siano, nella patch,collegabili alle box da cui ricevono dati e a cui li inviano.

pd miasubpatch

Figure 31: l’algoritmo precedente realizzato con una subpatch

Come si può vedere dalla figura 32 l’interno della subpatch del nostroalgoritmo é uguale alla porzione di patch della figura 30, ma in alto c’él’oggetto inlet che crea un inlet nella subpatch e 4 oggetti outlet, che creanoi rispettivi 4 outlet per i bang. Le subpatch possono essere modificate in

inlet

outlet

random 500

+ 1

moses 250

metro 500

moses 126 moses 376

outlet outlet outlet

Figure 32: l’interno della subpatch con gli inlet e gli outlet

qualunque momento e, soprattutto, possono essere duplicate a piacimento.Rappresentano uno strumento molto comodo per rendere più leggibile e

37

Page 39: Inventare il suono con PURE DATA - Altervista

chiaro un algoritmo nella patch window, quindi il consiglio é di usarle il piùpossibile.

3.6.2 abstraction

Un’abstraction non è altro che una patch che può essere richiamata dall’internodi una patch. Anch’essa, come la subpatch contiene gli oggetti inlet e outletper creare le varie entrate e uscite dell’object box e, a differenza della sub-patch, può essere utilizzata in qualunque patch. L’importante è che il filedell’abstraction sia salvato con l’estensione .pd e che si trovi nella stessadirectory in cui si sta lavorando o in una delle directory definite nel Path delprogramma (cap. 2.1).

Per richiamare un’abstraction è sufficiente aprire un’object box e inserireil nome dell’abstraction senza l’estensione .pd. L’abstraction potrà essereaperta e chiusa in qualunque momento e anche modificata, a patto chesia salvata, ma il consiglio è di stare attenti a modificare un’abstractiondall’interno di una patch: l’abstraction risulterà modificata in tutti gli altriprogetti in cui viene utilizzata!

Un’abstraction può anche essere inizializzata con un argomento, questo èpossibile scrivendo l’argomento stesso (o gli argomenti) dopo il nome. Ilprimo argomento determina il valore della variabile $1, il secondo quellodella variabile $2 e così via. Queste variabili possono essere create all’internodegli oggetti dell’abstraction, ma non dentro le message box.

myabstraction 100 1000

0

Figure 33: un’abstraction con due argomenti

Osserviamo la figura 33: l’oggetto myabstraction viene inizializzato con dueargomenti: 100 per la variabile $1, 1000 per la variabile $2. Un bang mettein azione l’abstraction. Ma vediamo cosa accade al suo interno (figura 34).I due argomenti inviati tramite l’object box myabstraction si sostituiscono

38

Page 40: Inventare il suono con PURE DATA - Altervista

inlet

outlet

pack $1 $2

line

Figure 34: l’interno dell’abstraction

a $1 ed $2, che sono le variabili di pack, che riceve quindi la lista (100

1000) che sono rispettivamente il valore-obiettivo e il tempo in millisecondidell’oggetto line. Un bang ricevuto dall’inlet dell’abstraction mette in azioneline restituendo la rampa all’outlet.

3.6.3 GRAPH ON PARENT

subpatch e abstraction possono anche essere pilotate dalla patch senza bisognodi essere aperte ogni volta ci fosse il bisogno di cambiare un valore. Insostanza subpatch e abstraction possono diventare oggetti interattivi. Perfare questo una delle soluzioni potrebbe essere quella di creare degli inletaggiuntivi nella subpatch oppure utilizzare un’altro metodo che Pd mette adisposizione. Se nelle proprietà della subpatch (o dell’abstraction, questo sis-tema funziona su entrambe), cui si accede premendo il sinistro del mousesu un punto qualunque della subpatch window, selezioniamo l’opzione graphon parent, comparirà all’interno della subpatch stessa un riquadro all’internodel quale possiamo mettere ciò che vogliamo sia visibile dalla patch geni-trice. Gli oggetti consentiti sono essenzialmente GUI’s, quindi number box,sliders, radio button etc. . .Nel caso della figura 35 la subpatch submetro contiene un oggetto metro conuna number box che regola la distanza in millisecondi fra i bang.I cavi di connessione vengono nascosti nella patch in modo da rendere piùchiara la lettura dell’algoritmo.

39

Page 41: Inventare il suono con PURE DATA - Altervista

1 0

pd submetro

301

regola_metro

Figure 35: Una subpatch con una number box in graph on parent

inlet

outlet

metro 500

301

regola_metro

Figure 36: l’interno della subpatch. Per creare il riquadro di visibilità basta andaresulle proprietà della subpatch e selezionare l’opzione graph on parent

40

Page 42: Inventare il suono con PURE DATA - Altervista

4 V E T TO R I , G R A F I C I E TA B E L L E

4.1 VETTORI

Un vettore (in inglese array) è un oggetto che permette di conservare e ma-nipolare comodamente una grande quantità di dati. Può essere pensatocome un contenitore di locazioni di memoria, identificate da un indice, at-traverso il quale è possibile accedere alla locazione desiderata. I vettoriin Pd sono rappresentati da grafici bidimensionali che hanno sull’ascissal’indice e sull’ordinata il valore corrispondente. Si tratta sempre di vettorimonodimensionali che gestiscono collezioni di numeri interi, decimali o disegnale (ma di questi ultimi ci occuperemo in seguito) quindi l’indice è unintero che identifica una e una sola posizione in memoria. Nel linguaggioC i vettori monodimensionali vengono definiti, come le variabili, in questomodo:

int i[4] = {5, 2, 7, 3}

che crea il vettore i di tipo intero di 4 elementi. Immediatamente doporiempie il vettore con i valori interi 5, 2, 7, 3. In Pd questo vettore vienerappresentato come in figura 37.Ricordiamo che l’indice di un vettore inizia da 0, quindi un vettore di4 elementi avrà un indice che va da 0 a 3. Un array in Pd si crea dalmenu Put/Array. Se premiamo col destro del mouse sul grafico possiamoaccedere alle proprietà dell’array, dove possiamo impostare la dimensionedel grafico e del vettore. Osserviamo dalla figura 37 le seguenti cose:

1. all’interno del grafico ci sono delle barrette orizzontali che rappresen-tano le coordinate (x, y) degli elementi

2. in alto a sinistra del grafico c’è il nome del vettore (in questo caso i)

3. incolonnati a sinistra ci sono dei valori che rappresentano il rangedell’ordinata, quindi dei valori che può assumere ogni elemento dell’array

41

Page 43: Inventare il suono con PURE DATA - Altervista

i

0 1 2 3

0

5

10

Figure 37: vettori: sull’asse delle ascisse c’è l’indice, sull’ordinata il valore

4. in riga in basso ci sono invece i valori dell’indice

Punto 1. Il grafico di un vettore può essere riempito in numerosi modi:

- interattivamente, cioè con il mouse

- con una message box che invia i dati al grafico stesso. La sintassi diuna message box per un vettore è la seguente:

;

nome_vettore (comando) argomenti

Si possono scrivere esplicitamente i singoli valori inserendo nella mes-sage box l’indice del primo elemento da scrivere seguito da tutti i val-ori da inserire nel vettore. Si possono possono produrre i valori delvettore attraverso una funzione trigonometrica come sinesum (sommadi seni), seguita dal numero degli elementi del vettore e dal valore diogni curva sinusoidale (compreso fra 0 e 1), oppure cosinesum, ugualealla precedente, ma che genera una cosinusoide o una somma di cos-inusoidi. Si possono inoltre leggere i dati richiamandoli da un file ditesto con il comando read seguito dal nome del file che contiene didati (figura 38).

42

Page 44: Inventare il suono con PURE DATA - Altervista

- con oggetti speciali che scrivono i dati all’interno dei vettori. L’oggettotabwrite scrive valori all’interno di un vettore. Nell’inlet di sinistra en-trano i valori, in quello di destra i relativi indici. Il messaggio setin entrata a sinistra determina il nome dell’array sul quale operare,nome che può anche essere inserito nell’oggetto come argomento,subito dopo il nome (figura 39).

;

i sinesum 32 0.5

;

i resize 4

i 0 0.5 0.75 -0.6 0.1

;

i cosinesum 32 0.25 0.5 0.25

i

Figure 38: attivare le tre message box con un click e verificarne il risultato sulgrafico. Il comando resize ridimensiona il vettore secondo quanto indi-cato dal suo argomento, in questo caso 32

Nella patch della figura 39 until provoca l’uscita di una sequenza di 32

bang che vengono numerati da un contatore, che a sua volta li spedisceall’inlet destro di tabwrite (l’indice dell’array). Contemporaneamente i bangproducono l’uscita di numeri pseudo-casuali decimali, compresi fra 0 e 2,dall’oggetto randomF. Da questi ultimi viene sottratto 1 in modo da avere

43

Page 45: Inventare il suono con PURE DATA - Altervista

tabwrite i

int 1 + 1

randomF 2

- 1

1

until

32

i

-1

0

1

Figure 39: click sulla message box in alto e verificare il risultato sul grafico

un range compreso fra -1 e 1, che rappresentano i valori minimi e massimidel grafico del vettore.

Punti 2-4. L’interfaccia del vettore, il grafico, può presentare anche ele-menti come un etichetta che rappresenta l’ordinata e uno che rappresental’ascissa. Questi elementi si possono aggiungere tramite message box sec-ondo le seguenti sintassi:

44

Page 46: Inventare il suono con PURE DATA - Altervista

nome_vettore xlabel posizione valori_ascissa_da_mostrare

nome_vettore ylabel posizione valori_ordinata_da_mostrare

nome_vettore xticks posizione intervallo intervallo_tick_grande

nome_vettore yticks posizione intervallo intervallo_tick_grande

Gli stessi comandi seguiti da hide rimuovono i risultati del comando. Perverificare il funzionamento di questi comandi si copi il codice della figura40, che mostra un vettore di 100 punti, con range da -1 a 1.

;

i ylabel hide

;

i ylabel -5.5 -1 0 1

;

i xlabel hide

;

i xlabel -1.2 0 100

;

i yticks hide

;

i xticks hide

;

i xticks 0 2 10

;

i yticks 0 0.1 5

i

0 100

-1

0

1

Figure 40: click sulle message box per aggiungere o rimuovere le etichette

45

Page 47: Inventare il suono con PURE DATA - Altervista

Fra le proprietà del grafico si può anche impostare il modo con cui verràdisegnato il grafico: come punti discreti (draw as points), come punti inter-polati (polygon) cioè singoli punti uniti da una linea che traccia il percorsopi˘ breve fra punti adiacenti, infine come curva di bézier (bézier) che smussagli spigoli (figura 41).

punti polygon

bezier

i

i

i

Figure 41: le tre diverse rappresentazioni di un vettore di 16 punti

4.1.1 LEGGERE UN VETTORE

Un vettore può essere letto e utilizzato per processare altri dati. Uno deglioggetti che permettere di leggere i dati di un vettore è tabread che ha ununico inlet che riceve l’indice del valore da restituire. Nella figura 42 tabreadlegge tutti i valori del vettore i e a sua volta li riscrive in un nuovo vettore(new) che disegna i valori sul grafico uno ad uno. Allo stesso tempo tabreadmodifica la dimensione di un bang e il movimento dell’indicatore di unaslider verticale.

4.1.2 L’OGGETTO table

L’oggetto table è simile ad un normale oggetto array con l’unica differenzache crea il grafico in una subpatch invece che nella patch window doveviene creato l’oggetto. Il primo argomento è il nome dell’array, il secondo,opzionale è la sua dimensione. E’ inoltre possibile mandare messaggi alvettore, con i consueti metodi visti nei paragrafi precedenti.

46

Page 48: Inventare il suono con PURE DATA - Altervista

until

16

int + 1

tabread i

tabwrite new

metro 1000

int 0

0

+ 1

line

1 0

mod 16

0

tabwrite new

0

t i i sel 15

reset

0, $1 950

size $1

line

$1 950

s reset

r reset

i

new

Figure 42: click sulle message box per aggiungere o rimuovere le etichette

47

Page 49: Inventare il suono con PURE DATA - Altervista

5 P R O G R A M M A Z I O N E AVA N Z ATA

5.1 ISTRUZIONI CONDIZIONALI

Nella logica della programmazione le istruzioni condizionali sono gli stru-menti che permettono di verificare se una data condizione sia vera o falsa1.In Pd, come nella maggior parte degli altri linguaggi di programmazione,esistono degli oggetti e dei costrutti sintattici che permettono di verificareuna condizione e di eseguire delle operazioni al verificarsi di determinatesituazioni. Tutti queste istruzioni possono essere raccolte e combinate inalgoritmi di selezione.

5.1.1 OPERATORI RELAZIONALI

Gli operatori relazionali consentono di confrontare due valori fra loro, quindisono binari. Come nel linguaggio C producono un output uguale a 1 se lacondizione richiesta dall’operatore relazionale è soddisfatta, uguale a 0 incaso contrario. I principali operatori relazionali sono sei:

• > (maggiore di)

• < (minore di)

• >= (maggiore o uguale a)

• <= (minore o uguale a)

• == (uguale a)

• != (diverso da)

1 Il concetto di vero o falso è mutuato dalla logica classica che ha prestato al mondodell’informatica i suoi modelli. La primitiva fondamentale dell’informatica, il bit, può infattiassumere il valore di 1 o 0, acceso o spento, vero o falso.

48

Page 50: Inventare il suono con PURE DATA - Altervista

> 10

0

0

Figure 43: L’output di ’>’ restituisce 0 finché il numero in entrata é minore ouguale a 10, 1 quando diventa maggiore di 10

5.1.2 select

select (forma abbreviata: sel) opera una selezione sugli atomi in entrataconfrontandoli con i suoi argomenti. Se la condizione è soddisfatta selectemette un bang dall’outlet corrispondente, in caso contrario spedisce fuoril’atomo in entrata dall’ultimo outlet a destra.

sel 10

5 123 10

0

Figure 44: select

select può selezionare più atomi, in tal caso avrà tanti outlet quanti sarannogli atomi da valutare, più uno, da cui farà uscire gli atomi che non soddis-fano la selezione (figura 45).Con gli operatori relazionali e select realizziamo un algoritmo che operauna selezione su dei numeri. Quando la selezione è soddisfatta e selectemette 1, verrà attivata una rampa con l’oggetto line (figura 46).

49

Page 51: Inventare il suono con PURE DATA - Altervista

5

123

10

0

sel 10 4

4

Figure 45: select con più selezioni

> 50

sel 1

line

0, 127 2000

20 32 69

Figure 46: valutare l’algoritmo con un click sulle 3 message box in alto

Se volessimo modificare questo algoritmo in modo da operare una verificasu una rampa invece che su valori singoli, avremmo bisogno di uno stru-mento che individui il superamento di una soglia. L’oggetto che fa al casoin questione è change, che filtra le ridondanze in un flusso in entrata. Adesempio se in change entra per 10 volte consecutive il numero 1, emetterà 1

50

Page 52: Inventare il suono con PURE DATA - Altervista

solo alla prima entrata. Combinando così ’>’ e change possiamo soddisfarela nostra richiesta.

line

0, 100 2000

> 50

sel 1

line

0, 127 2000

100

change

Figure 47: click sulla message box in alto

Esaminiamo la patch in figura 47: all’attivazione della rampa, inizia il cam-mino da 0 a 100 effettuato da line. Appena superato il valore-soglia di 50,l’operatore ’>’ emette 1 a ripetizione, ma change elimina tutte le ripetizionisuccessive, consentendo l’uscita solo del primo 1, attivando così il selettoresel un’unica volta. Si attiva in quel momento la rampa in basso.

5.1.3 OPERATORI LOGICI

Gli operatori logici eseguono operazioni secondo le tavole di verità dell’algebrabooleana2. In Pd ci sono operatori che operano al livello di bit e altri che op-erano sui numeri decimali. Nel primo caso i numeri interi decimali ricevutidagli operatori logici vengono trasformati nella loro forma binaria e ogni

2 Le tavole di verità sono tabelle usate nella logica per determinare se, attribuiti i valori diverità alle proposizioni che la compongono, una determinata proposizione è vera o falsa.

51

Page 53: Inventare il suono con PURE DATA - Altervista

bit viene valutato con il bit dell’altro numero che si trova nella stessa po-sizione. Ad esempio l’operatore AND (oggetto ’& ’ in Pd) segue le regoledella tavola di verità illustrate nella tabella 1.

a b a ∧ b

0 0 00 1 01 0 01 1 1

Table 1: tavola di verità per l’operatore AND

Se volessimo realizzare un AND sugli interi 21 e 6, ’& ’ opererebbe nelmodo illustrato nella tabella 2.

21 = 1 0 1 0 1 ∧6 = 0 0 1 1 0 =

4 = 0 0 1 0 0

Table 2: operazione AND su gli interi 21 e 6

&

21 6

t b b

4

Figure 48: l’operatore AND in azione in una patch di Pd

52

Page 54: Inventare il suono con PURE DATA - Altervista

L’operatore OR (in Pd ’|’) agisce allo stesso modo ma seguendo le regoledella tavola di verità dell’OR booleano (tabella 3).

a b a ∨ b

0 0 00 1 11 0 11 1 1

Table 3: tavola di verità per l’operatore OR

|

t b b

63

41 22

Figure 49: l’operatore OR

In relazione a questi due operatori ci sono due oggetti (’&& ’ e ’||’) checonfrontano due valori (interi o decimali) producendo come risultato lostesso delle tavole di verità su citato. Ad esempio ’&& ’ restituisce 1 se esolo se entrambi i valori sono diversi da zero, mentre restituisce 0 se unodei due valori o entrambi sono uguali a zero (tabella 1).Altri due operatori che lavorano a livello di bit sono ’«’ e ’»’, che potremmochiamare rispettivamente scivola a sinistra e scivola a destra. Il primo, ad es-empio, converte l’intero che riceve nel suo inlet sinistro nella sua forma bi-naria e aggiunge a destra tanti bit uguali zero quanti sono richiesti dall’inletdi destra. Nella tabella 4 c’è un esempio con il numero 113 da spostare asinistra di due posizioni.

53

Page 55: Inventare il suono con PURE DATA - Altervista

1

&&

10 10

Figure 50: l’operatore ’&& ’ confronta due valori in base alla tavolà di verità perAND

113 = 1 1 1 0 0 0 1 <<

2 =

452 = 1 1 1 0 0 0 1 0 0

Table 4: scivola a sinistra di due posizioni

<<

113 2

t b b

452

Figure 51: La relativa patch di Pd che realizza lo scivolamento a sinistra

5.1.4 If

Per terminare il capitolo sulle istruzioni condizionali non resta che af-frontare il costrutto if. Pd non dispone di un oggetto if, ma consente diusare questo comando all’interno dell’oggetto expr che abbiamo già incon-trato (sezione 3.3.2). Nei comuni linguaggi di programmazione l’istruzione

54

Page 56: Inventare il suono con PURE DATA - Altervista

if valuta un’espressione, se vera restituisce un certo risultato, se falsa nerestituisce un altro. Nel linguaggio C la sintassi del costrutto if è la seguente:

if (espressione)

fai una certa cosa;

else

fanne un’altra;

che significa: "Se l’espressione è vera fai una certa cosa, altrimenti fanneun’altra". In Pd invece la sintassi è:

if (espressione, a se vera, b se falsa)

0

0

expr if ($f1 < 10, $f1 * 5, 10)

Figure 52: se il numero in entrata è minore di 10 espr restituisce il numero stessomoltiplicato per 5, altrimenti restituisce 10

5.2 loops E ITERAZIONI

Le iterazioni in Pd si possono gestire in molti modi. Generalmente un’iterazionenei linguaggi di programmazione è la ripetizione di un evento fino all’uscitadall’evento stesso, determinata dal verificarsi di una certa condizione. InPd un’iterazione può essere l’emissione di un bang ogni mezzo secondoper un numero definito di volte. Come sappiamo metro genera bang a ripe-tizione, finché non viene spento. E’ semplice quindi inserire un contatoreche si occupa di contare i bang usciti e appena raggiungo il valore desider-ato si occupa di spegnere metro. Osserviamo la patch in figura 53.Pd implementa anche l’oggetto until che emette un numero di bang definitoda un numero in entrata nel suo inlet sinistro. A differenza della patch infigura 53 until non è orientato al tempo ma opera quasi istantaneamente

55

Page 57: Inventare il suono con PURE DATA - Altervista

1 0

float + 1

0

sel 9

loadbang

metro 500

0

Figure 53: la patch produce 10 bang attraverso un oggetto metro controllato da uncontatore e da un selettore

come nei tradizionali linguaggi di programmazione. In effetti until fun-ziona secondo lo schema classico di un ciclo for del C:

for (i=0; i<100; i++)

espressione;

che significa: "finché il contatore, partito da 0 non arriva a 99, valutal’espressione". Se l’espressione fosse un ordine di stampare il valore dellavariabile-contatore avremmo:

for (i=0; i<100; i++)

printf("%d", i);

Nella figura 54 si vede la patch di Pd che fa la stessa cosa.

56

Page 58: Inventare il suono con PURE DATA - Altervista

until

100

+ 1

0

print

loadbang

int

Figure 54: ciclo until: valutare l’algoritmo con un click sulla message box in alto eosservare il risultato nella Pd window

57

Page 59: Inventare il suono con PURE DATA - Altervista

6 I L M I D I

6.1 PANORAMICA SUL PROTOCOLLO MIDI

Il protocollo MIDI (Musical Instrument Digital Interface) consente a dispos-itivi diversi di comunicare fra loro attraverso l’invio messaggi che vengonointerpretati e tradotti. È a tutti gli effetti un protocollo di comunicazione,quindi i messaggi sono formati esclusivamente da numeri. Il MIDI nonmanipola, non invia, non riceve, né gestisce suoni di alcun tipo.Anche se, tipicamente, il protocollo MIDI viene usato in ambito musicale,teoricamente può essere utilizzato anche per altri scopi.Affinché il MIDI possa funzionare è necessario che ci siano almeno duedispositivi che devono comunicare e che siano fornite di porte di comuni-cazione. Le porte di uscita dei messaggi sono le porte MIDI OUT, quelledi entrata MIDI IN. C’è un altro tipo di porta, MIDI THRU che consentedi reindirizzare un messaggio in entrata da una MIDI IN verso un altrodispositivo.Praticamente un dispositivo che invia (Master) dati, indirizza i propri mes-saggi attraverso la sua porta MIDI OUT. Il dispositivo ricevente (Slave) liriceve attraverso la sua porta MIDI IN ed eventualmente li indirizza a suavolta ad un altro SLAVE attraverso la sua MIDI THRU.Questo schema logico non è l’unico possibile, ma in questa sede non ciaddentreremo oltre negli schemi di collegamento MIDI, anche perché con-cettualmente lo schema appena illustrato è quello su cui si basano tutte lepossibili configurazioni.Il MIDI è anche in grado di permettere la comunicazione fra dispositivisoftware risiedenti su una stessa macchina, tipicamente un computer. Adesempio Pd potrebbe ricevere messaggi MIDI da un qualunque sequencere inviarli a sua volta alla scheda audio.

58

Page 60: Inventare il suono con PURE DATA - Altervista

6.1.1 ANATOMIA DI UN MESSAGGIO MIDI

Il messaggi MIDI sono fondamentalmente costituiti da sequenze di due otre bytes, il primo dei quali è detto STATUS BYTE, gli altri DATA BYTE. Ilprimo si distinuge dal secondo perché il bit più significativo (quello più asinistra) è uguale a 1:

10000000 (statys byte)

00000000 (data byte)

Lo STATUS BYTE è concettualmente diviso in due nibble, cioè gruppi diquattro bit, il primo dei quali, quello a sinistra, contiene il bit più signi-ficativo e altro tre bit che indicano il tipo di messaggio. Il secondo nibbleinforma sul canale verso cui sarà inviato il messaggio.

Riassumendo, quindi, uno STATUS BYTE è costituito da 3 elementi infor-mativi: il primo bit, che indica che lo STATUS BYTE è tale, 3 bit per il tipodi messaggio e 4 bit per il canale o per un tipo particolare di messaggionel caso di un System Message. Poiché con quattro bit si possono avere 16

combinazioni diverse (0-15) un dispositivo MIDI può inviare e ricevere su16 diversi canali.

I 3 bit di tipo di dato ci danno 8 possibili tipi diversi:

000 Note OFF

001 Note ON

010 Polyphonic Key Pressure

011 Control Change

100 Program Change

101 Channel Pressure

110 Pitch Bend Change

111 System Message

Un esempio. Una macchina master invia un messaggio come questo:

10010000

59

Page 61: Inventare il suono con PURE DATA - Altervista

si tratta di uno STATUS BYTE (il bit più a sinistra è 1) che sta per inviari unDATA BYTE di tipo Note ON (001) sul primo canale (0000). Abbreviando,potremmo anche pensare a questo come lo STATUS BYTE 144, che è il bytein question e convertito in decimale.

Un messaggio Note ON indica l’esecuzione di una nota, con un suo pitch,cioè una sua altezza e una sua velocity cioè il suo volume (velocity rimandaall’idea che la velocità con cui un tasto viene premuto è proporzionale alvolume che si ottiene)Uno STATUS BYTE di Note On quindi sarà sempre seguito da due DATABYTE, ognuno dei quali può assumere un valore compreso fra 0 e 127.Infatti il DATA BYTE, ha 7 bit a disposizione per informare (il primo bitindica che il DATA BYTE è tale).

Riprendendo l’esempio precedente:

10010000 (STATUS BYTE Note ON sul canale 0)

00111100 (DATA BYTE Pitch 60)

01000000 (DATA BYTE Velocity 64)

Come già detto, uno STATUS BYTE può essere seguito da uno o due DATABYTE. Ad esempio, un messaggio di Program Change (100), che serve adimpostare o cambiare il timbro per una determinata sequenza di eventiMIDI, il DATA BYTE è soltanto uno.Nel caso di un un System Message, codice 111, i 4 bit a destra dello STATUSBYTE non rappresentano il canale, ma, appunto, il codice di un particolaremessaggio detto messaggio di sistema, inviato a tutto il sistema per dareinformazioni generali. Gli altri sono detti Channel Voice Messages.La struttura quindi della comunicazione MIDI è quindi molto semplice.Uno STATUS BYTE indica il tipo di messaggio inviato, uno o due DATABYTE portano i dati del tipo di messaggio. Per maggiori informazioni suitipi di messaggio la rete è un’ottima fonte di informazioni.

6.2 PD E IL MIDI

Pd può ricevere e inviare messaggi MIDI. Dal menu MIDI settings (che siapre da Media o da preferences, in base al sistema operativo utilizzato) èpossibile impostare le porte di entrata e di uscita dei messaggi MIDI.

60

Page 62: Inventare il suono con PURE DATA - Altervista

6.2.1 MIDIIN E MIDIANALYZE

L’oggetto che ci consente di far entrare in Pd messaggi MIDI puri, cioè an-cora non codoficati in base al tipo è midiin che manda fuori dall’outlet disinistra messaggi Channel Voice in forma decimale. In sostanza restituiscesequenze di numeri interi compresi fra 0 e 239 poiché gli STATUS BYTE ditipo SYSYTEM MESSAGE, che sono compresi fra 240 e 255 non vengonocatturati.

Ora proviamo a implementare un oggetto, midianalyze che analizza i datiricevuti da midiin convogliandoli a vari inlet in base al loro significato.Tale oggetto esiste già in una forma quasi uguale nella libreria che emulagli oggetti di Max/MSP e prende il nome di midiparse.midianalyze (fig. 55) non ha inlet in quanto contiene al suo interno l’oggettomidiin che riceve messaggi midi dall’esterno di Pd. Ha invece 6 outlets,il primo dei quali restituisce messaggi di noteON, il secondo di ChannelPressure, il terzo di Control Change, il quarto di Program Change, il quintodi Channel Pressure e l’ultimo di Pitch Bend. Sono esclusi i messaggi dinote OFF perché sono ormai inutilizzati dal protocollo. Per chiudere unanota infatti si usa un normale messaggio di Note ON con velocity pari azero. Ogni outlet formatta i messaggi restituendo una lista composta da idati e dal numero del canale.

midianalyze

45 0 0

prepend set prepend set

10 74 0

prepend set

16 40 0

prepend set

42 0

prepend set

51 9

prepend set

0 53 0NoteON keypressure controlchange programchange channelpressure pitchbend

Figure 55: midianalyze e i suoi outlets

L’interno dell’abstraction (fig. 56) è semplice, l’oggetto midiin invia i mes-saggi all’oggetto moses che li divide fra i suoi due outlet: se un messaggo(che, ricordiamo non è altro che un byte in forma decimale) è inferiore a128 (0-127) sarà inviato al primo outlet in quanto si tratterà di un DATABYTE, al contrario sarà uno STATUS BYTE e sarà inviato all’altro outletmoses smista i messaggi inviandoli a sei subpatches, ognuna delle qualicostruirà la lista appropriata. I messaggi di Program Change e di Chan-nel pressure saranno formati da una lista di due interi: il dato e il canale,

61

Page 63: Inventare il suono con PURE DATA - Altervista

moses 128

outlet noteon outlet keypressure outlet cc outlet pgmchange outlet chnpressure outlet pitchbend

pd noteon pd keypressure pd cc pd pgmchange pd chnpressure pd pitchbend

midiin

Figure 56: L’interno dimidianalyze

tutti gli altri messaggi saranno formati da una lista di tre interi, due per idati, uno per il canale.

In figura (fig. 57) è mostrata la subpatch che interpreta e resistuisce la listadei messaggi di Program Change. Se lo STATUS BYTE è compreso fra192 e 207, l’algoritmo fa un AND restituendo 1 se entrambe le condizionisono soddisfatte e zero in ogni altro caso. In caso positivo l’oggetto spigot,ricevendo 1, permette al DATA BYTE ricevuto di uscire dal suo outlet e dientrare in list append, dove verrà unito al numero di canale.

spigot

t f f f

list append

>= 192 <= 207 - 192

outlet pgmchange

inlet data inlet status

&&

Figure 57: La subpatch che formatta la lista dei messaggi Program Change

Il caso di un messaggio Note ON (fig. 58) è un po’ più complesso perchéla lista è formata da 3 interi. I dati che spigot lascia passare vengono primapassati per list prepend che, ricorsivamente, li mette in lista per inserirli poi

62

Page 64: Inventare il suono con PURE DATA - Altervista

nell’inlet destro di list append. Non appena la lista raggiunge i due elementi(list length si occupa di contare gli elementi di una lista) tramite sel 2 vieneemesso un bang che fa uscire la lista e permette che questa venga unita alterzo elemento, cioè il numero del canale.

spigot

<= 159

list append

list prepend t l

t f b

list length

t l l

sel 2

- 144

list append

t f f f

>= 144

outlet noteon

inlet statusinlet data

&&

Figure 58: La subpatch che restituisce la lista dei messaggi Note ON

Tutte le altre subpatches dell’oggetto midianalyze funzionano come quelleche abbiamo appena analizzato. Lasciamo al lettore la possibilità di ri-costruirle.

6.2.2 ALTRI OGGETTI MIDI

Una volta capito il funzionamendo dei messaggi MIDI ed aver implemen-tato l’oggetto midianalyze non ci sarà bisogno di soffermarsi troppo sugli

63

Page 65: Inventare il suono con PURE DATA - Altervista

oggetti che in Pd si occupano del MIDI. Nella maggioranza dei casi glioggetti avranno una versione per l’input dei dati e una per l’output. Nediamo di seguito un elenco (parziale):

oggetti descrizione

midiin/midiout dati MIDI grezzinotein/noteout Note ONpgmin/pgmout Program Changebendin/bendout Pitch Bendctlin/ctlout Control Changetouchin/touchout Channel Pressurepolytouchin/polytouchout Polyphonic Key Pressure

Oltre a tali oggetti, ce ne sono altri legati alla gestione di eventi MIDI.Esaminiamo due oggetti, uno per la manipolazione di eventi Note ON inentrata, un altro per gli stessi tipi di eventi in uscita.

L’oggetto stripnote riceve coppie di valori (pitch,velocity) e lascia passaresltanto quelle coppie che hanno velocity diversa da zero. Può essere utilequando è necessario processare soltanto le altezze, evitando così la ripe-tizione del pitch. Infatti ogni volta che un messaggio note ON è ricevuto, èseguito sempre da un altro messaggio, con lo stesso pitch, ma con velocityuguale a zero. Piuttosto che fare un esempio di uso di stripnote, proviamoad implementare un oggetto che faccia la stessa cosa (fig. 59).L’oggetto makenote riceve coppie di valori (pitch,velocity), li fa uscire e ag-giunge un messaggio con lo stesso pitch, ma con velocity uguale a zero.In pratica chiude un evento Note ON. Può avere due argomenti: velocityiniziale e durata della nota.Un esempio di makenote sarà spiegato nella prossima sezione, dove verràimplementata una versione del brano di Steve Reich Piano Phase.

6.3 UN ESEMPIO DI EDITING ALGORITMICO MIDI

Nel 1967 il compositore americano Steve Reich compose un brano per duepianoforti intitolato Piano Phase che esplorava la tecnica del dephasing.Un pattern di 12 semicrome viene eseguito all’unisono e in ostinato dai duepianisti. Dopo un certo numero di ripetizioni il secondo pianista aumentaleggermente la velocitù in modo da produrre una sfasatura fra le due frasi,

64

Page 66: Inventare il suono con PURE DATA - Altervista

60 64

60 0

70 25

unpack 0 0

!= 0

*

t f f

moses 1

spigot

t f f

print pitch print vel

Figure 59: L’oggetto clone di stripnote

sfasatura che si allarga fino a far si che i due pattern non si ritorvano dinuovo sovrapposti esattamente, ma ad una nota di distanza. I due pianistia questo punto suonano per un po’ allo stesso tempo per poi ricominciare ilprocesso, fino a che, completato il giro di tutte e 12 le note, non si ritrovanoall’unisono. A quel punto il primo pianista viene lasciato solo per un po’ einizia la seconda parte del brano, della quale non ci occuperemo.

Per implementare tale algoritmo è necessario formalizzare il problema. Laquestione principale da risolvere è data dal fatto che, mentre uno dei pi-anisti suona a velocità costante (avremo, intuitivamente, un oggetto metroche non cambia mai, il secondo pianista suona alla stessa velocità del primoper un po’, poi accelera per sfasare i pattern poi torna alla velocità inizialenon appena i pattern non sono sovrapposti esattamente a una nota di dis-tanza.

Bisogna quindi stabilire:

65

Page 67: Inventare il suono con PURE DATA - Altervista

• quanti pattern i pianisti suonano allo stesso tempo;

• qual’è il tempo costante;

• qual’è il tempo del secondo pianista che produce la sfasatura;

• quanti pattern sono necessari perché i pattern si reincontrino esatta-mente a una nota di distanza;

Convenzionalmente scegliamo che i pianisti suoneranno quattro patternallo stesso tempo, poi il secondo pianista inizierà a suonare più veloce-mente. Se suonasse ogni nota 1 millesimo di secondo più velocementedel primo, alla fine del suo pattern avrà guadagnato 12 millisecondi. Persemplicità quindi assumiamo che ogni durata del primo pianista sarà unmultiplo di 12, per esempio 144 millisecondi. In questo modo dopo 12

esecuzioni del pattern i due si ritrovano nuovamente in fase.Riassumendo:

• 4 pattern in fase con durata di 144 ms per nota

• 12 pattern dove il primo pianista suona a 144 ms e il secondo a 143

ms

• il ciclo ricomincia a una nota di distanza.

Pima di tutto implementiamo la sequenza a velocità costante (fig. 60).L’oggetto metro è collegato ad un contatore che enumera le 12 note del pat-tern, ovviamente espresse in altezze MIDI. L’oggetto list-nth riceve la listadelle altezze e nel suo inlet destro l’indice della lista da far uscire dall’outlet.Infine makenote formatterà ogni altezza in modo che abbia velocity pari a 64

e durata di 120 ms.Come detto, il secondo pianista suonerà la stessa cosa, variando però la ve-locità. L’algoritmo sarà identico (fig. 60) cln le sole differenze che l’inlet de-stro di metro ospita le due possibili velocità di esecuzione e che l’oggetto no-teout invierà i dati al secondo pianoforte, sul secondo canale MIDI. Sarannoquindi caricati nell’eventuale gestore dei suoni due pianoforti, uno sulprimo, l’altro sul secondo canale.Infine la parte più interessante dell’algoritmo. Un contatore (fig. 62) enu-mera ogni pattern del pianista di sinistra, con modulo 16, in modo dacontare da 0 a 15. Un selettore poi emette un bang quando il contatore

66

Page 68: Inventare il suono con PURE DATA - Altervista

noteout 1

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

t b f

makenote 64 120

metro 144

Figure 60: La sequenza a velocità costante

raggiunge lo zero e il 4, cioè l’inizio della parte in fase e l’inizio di quella avelocità diverse. Quando il selettore banga in corrispondenza di uno zeroin entrata, metro riceve 144 nel suo inlet destro. Quando invece c’è il 4 metroviene settato a 143 finché il contatore non torna a zero.L’algoritmo così è concluso, ma se lo eseguiamo ci rendiamo conto chel’esecuzione è molto poco umana. Proviamo a modificare la patch in modoche ogni nota abbia una velocity leggermente diversa (fig. ??). Il risultatoche si ottiene è leggermente più realistico.Allo stesso modo si possono fare altre migliorie, come ad esempio ac-centare alcune note del pattern, aumentare il range dinamico, o inserireil pedale di risonanza (che è gestito dal controller 64 dello standard MIDIcon un normale messaggio di tipo Control Change) e altro, ma lasciamo allettore il divertimento di sperimentare eventuali modifiche alla patch.

67

Page 69: Inventare il suono con PURE DATA - Altervista

noteout 1

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

t b f

makenote 64 120

metro 144

144 143

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

t b f

makenote 64 120

metro 144

noteout 2

Figure 61: I due pianisti virtuali di Piano Phase

68

Page 70: Inventare il suono con PURE DATA - Altervista

noteout 1

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

t b f

makenote 64 120

metro 144

sel 00

% 16

sel 0 4

+ 1f 0

144 143

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

t b f

makenote 64 120

metro 144

noteout 2

reset counter

Figure 62: Il contatore che regola la velocità di esecuzione del pattern

69

Page 71: Inventare il suono con PURE DATA - Altervista

noteout 1

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

makenote 64 120

metro 144

sel 00

% 16

sel 0 4

+ 1f 0

144 143

list-nth

64 66 71 73 74 66 64 73 71 66 74 73

+ 1f 0

t f b

0

% 12

makenote 64 120

metro 144

noteout 2

reset counter

t b f b

random 32

+ 48

random 32

+ 48

t b f b

Figure 63: La sequenza a velocità costante

70

Page 72: Inventare il suono con PURE DATA - Altervista

7 O G G E T T I G U I

Nel corso dei nostri primi esperimenti abbiamo già avuto modo di incon-trare alcuni oggetti grafici, che nell’ambito del mondo informatico sonodette GUI (graphical user interfaces). Pd mette a disposizione un certo nu-mero di GUI’s, alcuni nativi, cioè facenti parte del pacchetto standard delprogramma, altri derivati da librerie esterne, la maggior parte delle qualisono caricate nella versione extended. Genericamente possiamo dire chetutte le GUI di Pd possono essere configurate tramite le properties, accessi-bili col tasto destro del mouse sulla GUI stessa.

Le GUI native di Pd sono:

- bang

- toggle

- slider orizzontali e verticali

- radio button orizzontali e verticali

- VU-meter

- canvas

- number2

Sul bang non c’è molto altro da dire, lo abbiamo incontrato già moltissimevolte. toggle invece è un oggetto molto utile che permette di restituire 1

quando è attivo, 0 quando è disattivo. Praticamente è una variabile binariache si attiva con un click del mouse. Quando è attivato mostra una croceall’interno del quadrato che la costituisce (figura 64).

Pd offre due tipi di slider, che sono delle leve attivabili con il mouse o daaltri oggetti. Fra le due non c’è alcuna differenza se non nel fatto che un

71

Page 73: Inventare il suono con PURE DATA - Altervista

tipo è verticale, l’altro orizzontale. Dalle proprietà si può impostare ladimensione, ma soprattutto il range dell’output.

1 0

metro 500

int 1 + 1

mod 2

sel 0

Figure 64: l’oggetto toggle

Nella figura 64 il toggle più grande attiva un oggetto metro che a sua voltamanda dei bang a un contatore che attraverso l’oggetto mod conta solo da0 a 1, quando è 0, il bang (grazie all’oggetto sel) esce da sinistra, quandoè 1 esce a destra. Nella figura successiva invece (fig. 65) lo slider verticaledi sinistra pilota gli altri due: quello di destra attraverso expr effettua ilmovimento contrario, mentre quello di sotto si muove in parallelo, ma som-mato a un movimento continuo generato dall’algoritmo a sinistra. metroattiva un contatore da 0 a 1. Il valore in uscita viene moltiplicato per unaltro valore che va da 0 a 20, gestito dallo slider principale. Il prodottodi questi due fattori diventa il valore-obiettivo dell’oggetto line che crea ilmovimento dello slider in basso. C’è da notare che ci sono due oggetti ’r’,cioè receive, ma non c’è nessun send! Le GUI infatti possono mandare o rice-vere messaggi senza bisogno di creare oggetti e supplementari. Possiedonodegli oggetti send e receive incorporati che possono essere impostati dalle

72

Page 74: Inventare il suono con PURE DATA - Altervista

line

$1 90

int 1 + 1

mod 2

* 10

+

manovrare_da_qui

r slide

expr ($f1 / 127) * 20

r slide

expr (127 - $i1)

metro 100

Figure 65: lo slider verticale a sinistra pilota gli altri due

properties della GUI stessa.

I radio button sono oggetti formati da barrette orizzontali o verticali cos-tituite da caselle ordinate. L’uscita è il numero della casella a partire daquella più a sinistra nel caso di radio button orizzontali, e da quella più inalto nel caso di verticali. Ricordiamo che il conteggio inizia dallo 0, quindiun radio button di 16 elementi, avrà un output che va da 0 a 15. In figura66 due radio button disegnano un grafico. Unica annotazione, i valori delradio button verticale vengono invertiti per consentire un migliore adesione

73

Page 75: Inventare il suono con PURE DATA - Altervista

al grafico, così il primo valore in alto diventa 9 in luogo di zero, il secondo8 invece che 1, etc. . . .

tabwrite array1

r ascissaexpr (9 - $i1)

r ordinata

array1

Figure 66: impostare prima l’indice (radio button) orizzontale, poi il valore conquello verticale

74

Page 76: Inventare il suono con PURE DATA - Altervista

Della GUI VU-meter avremo modo di scrivere nella parte che riguardal’audio, mentre possiamo ora accennare alle canvas che sono oggetti sem-plici che servono a connotare graficamente le nostre patch in modo dacaratterizzare con i colori alcune zone della finestra. Possono essere utiliin patch molto articolate dove c’è bisogno di rendere riconoscibili le varieparti dell’algoritmo. Infine l’oggetto number2 è molto simile alla normalenumber box con qualche possibilità in più di configurazione grafica.

7.1 ALTRE GUI DALLE LIBRERIE DI PD

Oltre alle GUI native che abbiamo appena discusso, diamo ora una panoram-ica veloce di alcune altre GUI introdotte con le nuove librerie:

- grid

- gcanvas

- knob

- envgen

grid e gcanvas sono molto simili, sono due griglie bidimensionali che emet-tono la posizione del mouse (x, y) dai due outlet alla pressione di quest’ultimo.knob è la classica manopola tipo sintetizzatore analogico. Ha un’unica us-cita che emette l’output nel range impostato nelle properties. Infine l’oggettoenvgen è un envelope generator che emette dati in un formato compatibilecon la versione audio di line, cioè line∼ , del quale tratteremo approfondi-tamente nella parte di questo manuale dedicata all’audio.

Prima di concludere questo capitolo, va ricordato che l’uso massiccio diGUI nelle patch è sconsigliato. La grafica vettoriale che sta alla base ditali oggetti può rallentare la capacità di calcolo quindi quando è possibileevitarne l’uso, si eviti. Ad esempio in luogo dei bang grafici si cerchi diusare l’oggetto relativo bang o ’b’. Non è importante la bellezza estetica diuna patch quanto la sua chiarezza, quindi è meglio evitare troppi oggettigrafici e abbondare, al contrario, di subpatches e annidamenti.

75

Page 77: Inventare il suono con PURE DATA - Altervista

Part II

A U D I O

Page 78: Inventare il suono con PURE DATA - Altervista

8 L’A U D I O D I G I TA L E

8.1 L’OSCILLATORE

Il suono più semplice che può essere prodotto sinteticamente è quello gen-erato da un oscillatore. Nel mondo analogico un oscillatore è un circuito chegenera forme d’onda di vari tipi, anche se generalmente se non si specificaaltro si parla di oscillatore intendendo un generatore di onde sinusoidali.Un’ onda sinusoidale è un’onda generata da una funzione sinusoidale (vedifig. 67), che si può esprimere tramite la formula:

y = A sin(2π f x + φ)

dove A è l’ampiezza dell’onda, tipicamente impostata ad 1, quindi i valoridella funzione oscillano fra 1 e -1, 2π f = 2π

τ è la frequenza angolare cheindica quanti periodi ci sono in un intervallo di 2π, f = 1

τ è la frequenza,che indica quante volte la funzione si ripete nell’unità di tempo, φ è la fase,cioè lo scartamento che la funzione subisce, ovvero il parametro che perme-tte di anticipare o ritardare i valori della funzione1.

Per produrre una sinusoide con un calcolatore è necessario fare uso di unoscillatore digitale, un algoritmo che produca i valori della funzione sinu-soidale, ossia delle ampiezze dell’onda. A differenza di un segnale elettrico,che è continuo, il calcolatore può solo produrre segnali discreti, quindil’oscillatore digitale calcola i valori della funzione il numero delle volte in-dicato dalla frequenza di campionamento. Ad esempio se la frequenza dicampionamento è 44100 hertz, l’oscillatore calcola i valori della funziona44100 volte al secondo. Questa frequenza di campionamento approssimeràla forma d’onda desiderata, pur non riuscendo a costruirne una identica aquella analogica (fig. 68).

1 http://it.wikipedia.org/wiki/Sinusoide

77

Page 79: Inventare il suono con PURE DATA - Altervista

Parametri di una sinusoide

tempo

ampiezza

−2

−1

01

2

−2

−1

01

2

Figure 67: il grafico di una funzione sinusoidale

In Pd l’oscillatore digitale è implementato nell’oggetto osc∼. Nella patchin figura 69 l’oscillatore produce una sinusoide di 440 hz che l’oggettodac∼ converte in segnale analogico, in modo da poter essere inviata aglialtoparlanti.In genere comunque oscillatori digitali non calcolano i valori della fun-zione sinusoidale in tempo reale, ma usano un sistema che rende le cosepiù veloci. Piuttosto che fare 44100 calcoli di funzioni sinusoidali al sec-ondo è preferibile leggere delle tabelle che hanno i valori di una fun-zione sinuoidali già pronti. Piuttosto che calcolare, leggere dei dati èun’operazione molto più rapida. Nella wavetable quindi c’è l’elenco deivalori di ampiezza indicizzati di un ciclo di forma d’onda, l’oscillatorenon deve fare altro che leggerli uno ad uno, iniziando dal primo (0) finoall’ultimo. La tabella può avere dimensioni arbitrarie: più è alto il numerodei punti più accurata è l’onda risultante. In figura 70 è mostrata la rap-presentazione grafica di una wavetable: sull’asse delle ascisse c’è l’indice,su quella delle ordinate il valore di ampiezza. Nella memoria del vet-tore che contiene il grafico ci saranno quindi delle coppie di valori (indice,ampiezza). In questo caso avremo (0, 0), (1, 0.3125), (2, 0.5748), (3, 0.6885),. . .L’oggetto osc∼ legge una cosinusoide scritta in una wavetable di 512 punti.La cosinusoide graficamente è identica ad una sinusoide, con l’unica dif-

78

Page 80: Inventare il suono con PURE DATA - Altervista

Sinusoide digitale

tempo

ampiezza

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figure 68: il grafico di una funzione sinusoidale prodotta da un calcolatore

osc~ 440

dac~

Figure 69: l’oscillatore di Pd

ferenza che la sinusoide ha come primo valore 0, mentre la cosinusoide 1,quindi è sfasata rispetto alla prima di π

2 (vedi fig. 71).L’oggetto tabosc4∼ implementa un lettore di wavetable generiche, dove èpossibile disegnare una forma d’onda qualunque e sceglierne la dimen-sione. Di tale oggetto si farà larghissimo uso nelle sezioni successive delpresente manuale.

8.1.1 FREQUENZA E AMPIEZZA DEL SEGNALE

L’onda sinusoidale è un’onda periodica perché la sua forma si ripete iden-tica ad intervalli di tempo regolari. Il periodo è quindi il tempo neces-

79

Page 81: Inventare il suono con PURE DATA - Altervista

●●

Wavetable

index

ampiezza

0 1 2 3 4 5 6 7 8 9 10

−0.5

0.0

0.5

1.0

0 1 2 3 4 5 6 7 8 9 10

−0.5

0.0

0.5

1.0

Figure 70: una cosinusoide

sario affinché l’onda compia un intero ciclo. Le oscillazioni dell’onda sialternano fra il campo positivo e quello negativo. Se prendiamo comepunto di riferimento il picco positivo dell’onda, la lunghezza d’onda sarà ladistanza (λ) fra tale picco e il successivo. Questo valore è inversamenteproporzionale alla frequenza dell’onda, maggiore sarà λ, minore sarà la fre-quenza, ovvero il numero di cicli completi dell’onda per secondo. Questovalore si misura in hertz (vedi fig. 72).Perché generi un segnale udibile dall’orecchio umano, l’onda deve avereuna frequenza compresa circa fra 20 e 20000 hertz. Tale range costituisce labanda udibile.Quando si parla genericamente dell’ampiezza del segnale si intende in-vece il picco massimo di ampiezza raggiunto dall’onda, cioè la distanzamaggiore dal punto di quiete (ovvero zero). Più specificamente si trattadell’ampiezza di picco dell’onda, mentre si parla di ampiezza istantanea quandosi tratta di un campione qualsiasi dell’onda. La massima ampiezza di unsegnale è 1, superato tale limite il segnale distorce.La frequenza è responsabile della percezione dell’altezza, mentre l’ampiezzadell’intensità del segnale.

80

Page 82: Inventare il suono con PURE DATA - Altervista

Cosinusoide

tempo

ampiezza

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figure 71: una cosinusoide

➤❘

➤❘

Parametri di una sinusoide

tempo

ampiezza

τ

A

λ

−2

−1

01

2

−2

−1

01

2

Figure 72: parametri di una forma d’onda. A = ampiezza, τ = periodo, λ =lunghezza d’onda

8.1.2 osc∼

L’object box osc∼ implementa un oscillatore digitale. Accetta come argo-mento interno la frequenza (fig. 69) il cui valore può anche essere variato

81

Page 83: Inventare il suono con PURE DATA - Altervista

dall’inlet di sinistra (fig. 73). Come vedremo successivamente oltre chedati, l’inlet di sinistra accetta anche segnali per controllare la frequenza.

osc~ 200

dac~

242

Figure 73: l’oggetto osc∼ con frequenza controllata da una number box

Nella patch in figura 74 un oggetto line permette di realizzare un glissando,cioè uno scivolamento da una frequenza ad un’altra, facendo udire tutte lefrequenze intermedie. In questo caso il glissando parte da 20 hz e giungea 1000 hz in 5 secondi.

dac~

line

20, 1000 5000

osc~ 20

Figure 74: la realizzazione di un glissando con l’oggetto line

Volendo invece intervenire sull’ampiezza del segnale, è necessario utiliz-zare un moltiplicatore, come un oggetto *∼, per moltiplicare l’ampiezzaistantanea del segnale per un fattore costante (o variabile). In figura 75

l’oggetto *∼moltiplica per 0.5 il segnale in entrata, dimezzandone l’ampiezza.L’ampiezza di picco del segnale in uscita sarà quindi di 0.5. In figura 76

è mostrata un’onda con ampiezza di picco 1, e una con ampiezza di picco0.5.

82

Page 84: Inventare il suono con PURE DATA - Altervista

dac~

osc~ 440

*~ 0.5

Figure 75: la realizzazione di un glissando con l’oggetto line

a)

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

b)

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figure 76: la realizzazione di un glissando con l’oggetto line

Come per la frequenza, si può controllare l’ampiezza interattivamente, condati o segnali di controllo. Nel caso in figura 77 una slider verticale emettevalori compresi fra 0 e 1, i quali entrano in line. line emette i valori inentrata scivolando con rampe di 20 millisecondi fra un valore e il precedente

83

Page 85: Inventare il suono con PURE DATA - Altervista

per evitare che l’ampiezza cambi troppo repentinamente producendo uneffetto scalino.

dac~

osc~ 440

*~ 0.5

amp

$1 20

line

Figure 77: la realizzazione di un glissando con l’oggetto line

8.1.3 tabwrite∼

Un oggetto molto utile è tabwrite∼ che consente di scrivere i valori diun segnale in una tabella. In questo caso lo utilizziamo per mostrare laforma d’onda di un segnale al variare dell’ampiezza e della frequenza. Infigura 78 l’oggetto tabwrite∼ scrive i valori ricevuti in una tabella (amp)ogni volta che riceve un bang. metro emette un bang ogni 100 millisecondiproducendo l’impressione dell’onda in movimento. Gli oggetti send∼ ereceive∼ sono come send e receive per i dati, ma inviano e ricevono seg-nale.

8.1.4 LA RAPPRESENTAZIONE DEL SUONO

Attraverso l’oggetto tabwrite∼ possiamo avere una rappresentazione delsegnale nel dominio del tempo, ovvero in ogni istante di tempo viene dis-egnato un punto in corrispondenza dell’ampiezza del segnale. Il risultatodi tale operazione permette di visualizzare la forma d’onda.In figura 79 è rappresentato un ciclo di un’onda periodica complessa, for-mata dalla somma di 3 sinusoidi. Come già detto questa rappresentazionemostra l’ampiezza in funzione del tempo, ma non da alcuna informazioneriguardo la frequenza del segnale. Per ottenere informazioni su un suonocomplesso è necessario scomporlo nelle sue componenti semplici e rapp-resentare ogni singola frequenza. Attraverso algoritmi che operano taliscomposizioni è possibile analizzare lo spettro di un suono, cioè la sua

84

Page 86: Inventare il suono con PURE DATA - Altervista

dac~

osc~ 440

*~ 0.5

amp

$1 20

line

tabwrite~ amp

r~ sig

send~ sig

amp

metro 100

883

Figure 78: la realizzazione di un glissando con l’oggetto line

rappresentazione nel dominio della frequenza. L’analisi dello spettro puòessere visualizzata in modi molto diversi, anche se fondamentalmente cisono 2 tipi di analizzatori di spettro:

- gli analizzatori di ampiezza in funzione della frequenza

- gli analizzatori di ampiezza e frequenza in funzione del tempo

Nel primo caso (fig. 80) si ha un grafico bidimensionale nel quale vengonorappresentate la frequenza e l’ampiezza del suono in un dato momento.Questa rappresentazione ha il limite di non poter dare una visione delsuono nella dimensione temporale, ma si riferisce ha un istante di tempooppure ad un suono che non varia in funzione del tempo. L’invariabilitàdel suono in funzione del tempo esiste solo nei segnali prodotti digital-mente (probabilmente nemmeno un suono elettrico analogico resta sem-pre identico a se stesso). Nel mondo reale i suoni variano continuamente,quindi una rappreentazione che non tenga conto della funzione tempo havalore solo in determinate circostanze.Gli analizzatori del secondo tipo permettono di dare una visione più det-tagliata e pertinente del suono perché rappresentano l’ampiezza e la fre-quenza in funzione del tempo. La necessità di rappresentare 3 parametriobbliga ad usare un grafico tridimensionale oppure a gestire uno dei treparametri in modo diverso. Nel caso mostrato in figura 81 c’è il temposull’asse delle ascisse e la frequenza su quella delle ordinate, mentre l’ampiezza

85

Page 87: Inventare il suono con PURE DATA - Altervista

Rappresentazione della forma d’onda

tempo

ampiezza

−0.5

0.0

0.5

−0.5

0.0

0.5

Figure 79: forma d’ondarisultante dalla somma di 3 sinusoidi

Spettrogramma ampiezza/frequenza

frequenza

ampiezza

0 100 200 300 400 500 600 700 800 900 1000

Figure 80: analizzatore di spettro bidimensionale, sull’asse delle ascisse c’è la fre-quenza, su quella delle ordinate l’ampiezza. Il suono è costituito dallasomma di onde di frequenza pari a 400, 700 e 800 hz

è rappresentata dal colore delle linee: nero per la massima ampiezza e varie

86

Page 88: Inventare il suono con PURE DATA - Altervista

tonalità di grigio per ampiezza minore, fino al bianco, quando c’è assenzadi suono.

Spettrogramma ampiezza/frequenza/tempo

tempo

frequenza

0200

400

600

800

1000

0200

400

600

800

1000

Figure 81: l’ampiezza delle sinusoidi è rappresentata dal-l’intensità del coloredelle linee

8.2 LE FORME D’ONDA

Oltre alla forma d’onda più semplice, quella sinusoidale, che abbiamo esam-inato nella sezione precedente, esistono altre forme d’onda periodiche. Illoro numero è teoricamente infinito, anche se esistono alcune forme d’ondaclassiche che si possono ottenere dalla somma di sinusoidi semplici in rap-porto armonico fra loro.Forme d’onda classiche sono l’onda quadra, l’onda triangolare e l’onda adente di sega che esamineremo fra poco.

8.2.1 tabosc4∼

Nella sezione 8.1 abbiamo menzionato l’oggetto tabosc∼ che legge laforma d’onda da una tabella-vettore. Questo oggetto ci permette di trasfor-mare in segnale dei vettori che contengono forme d’onda diverse dallasinusoide ordinaria. Per mettere in funzione tabosc∼ è necessario:

- creare un vettore di 2n + 3 punti

87

Page 89: Inventare il suono con PURE DATA - Altervista

- riempire il vettore con i valori desiderati

- creare l’oggetto tabosc∼ con il nome del vettore come argomento

- usare l’inlet di sinistra per impostare la frequenza dell’oscillatore

Per i primi due punti si rimanda al capitolo 4. Per il resto si esaminila patch in figura 82: l’oggetto tabosc∼ legge i dati dal vettore chiamatosinead una frequenza di 400 hz e invia tutto a dac∼, ma anche a tabwrite∼che mostra la forma d’onda ottenuta.

0

frq

metro 100

start

dac~

tabosc4~ sine

tabwrite~ wave

*~

amp

line

$1 20wave

sine

Figure 82: l’uso di tabosc∼ per leggere un vettore con una forma d’onda sinu-soidale

Nei prossimi paragrafi mostreremo l’uso di tabosc∼ per forme d’ondadiverse.

8.2.2 ONDA QUADRA

Quella quadra é una forma d’onda che alterna solo due valori, general-mente 1 e -1, ma anche 1 e 0 se si usa come segnale di controllo.

88

Page 90: Inventare il suono con PURE DATA - Altervista

Onda quadra

tempo

ampiezza

−2

−1

01

2

−2

−1

01

2

Figure 83: un’onda quadra che alterna i valori 1 e -1

Secondo il Teorema di Fourier, un qualsiasi suono complesso periodicopuò essere ottenuto dalla somma di sinusoidi in rapporto armonico fraloro. Come abbiamo imparato dal capitolo sui vettori (4 possiamo dis-egnare in un vettore una forma d’onda ottenuta dalla somma di sinu-soidi tramite il comando sinesum. L’onda quadra si ottiene dalla sommadegli armonici dispari con ampiezza inversamente proporzionale al nu-mero d’ordine dell’armonico, schematizzando:

arm 1 arm 2 arm 3 arm 4 arm 5 arm 6 arm 7

1 013 0

15 0

17

L’oggetto tabosc4∼ può essere usato per implementare un’onda quadrascritta in un vettore tramite il comando sinesum. E’ sufficiente usare unamessage box con il comando sinesum e scrivere tutti i valori di ampiezzadelle varie armoniche. In alternativa é possibile costruire un algoritmoper disegnare la forma d’onda nel vettore. In figura 84 ci sono 3 formed’onda diverse, due realizzate con il comando sinesum, una con un algo-ritmo. Il risultato visivo sono 3 onde diverse, le prime sono due formed’onda quadra approssimativa, infatti nel caso del vettore quadra9 sono statiusati 9 armonici, nel secondo caso 40: più aumenta il numero degli ar-

89

Page 91: Inventare il suono con PURE DATA - Altervista

monici, maggiore sarà la precisione della forma dell’onda. Nel terzo casol’onda é perfettamente quadrata.Se si ascoltano le 3 onde (il messaggio set seguito dal nome di un’arrayconsente di cambiare il vettore da leggere con tabosc∼) si noteranno delledifferenze. Nel caso del vettore quadra9 il suono sarà meno ricco di ar-monici di quello di quadra40, che a sua volta é meno ricco di quello diquadralg.

quadra40quadra9

;

quadra9 sinesum 512 1 0 0.33 0 0.2 0 0.1428 0 0.1111;

quadra9 normalize 1

tabosc4~ quadra9

set quadra9

set quadra40

0

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

until

int 0 + 1

expr if (($f1 < 256), 1, -1)

tabwrite quadralg

set quadralg

0

515reset

Figure 84: tre tipi diversi di onda quadra

PULSE WIDTH MODULATION (PWM)

I due modi che abbiamo usato nella sezione precedente per generare un’ondaquadra non sono gli unici possibili. Un altro sistema infatti è quello di in-tervenire direttamente su un segnale sinusoidale e modificarlo in temporeale. Nella patch di figura 85 il segnale di osc∼ entra in expr∼ che generaun’onda quadra con un semplice ciclo if: se i valori sono positivi, esce 1,altrimenti esce -1.L’oggetto expr∼ è l’omologo di expr per i segnali. Oltre a operare sullesolite variabili numeriche ($fn o $in) può processare direttamente segnale.

90

Page 92: Inventare il suono con PURE DATA - Altervista

osc~ 200

150

tabwrite~ wave

metro 100

expr~ if (($v1 > 0), 1, -1)

dac~

wave

Figure 85: onda quadra generata mediante intervento diretto su un segnale sinu-soidale

Il simbolo per le variabili-segnale è $vn.

Questo modo di produrre un’onda quadra non è certo il più economicodal punto di vista computazionale, ma consente di fare qualcosa che coni sistemi precedenti era complicato, cioè intervenire in tempo reale sullaforma dell’onda. Un’onda quadra è simmetrica, come del resto quella si-nusoidale. Ai valori positivi rispondono valori negativi, quindi la partepositiva dell’onda quadra è controbilanciata da una parte negativa dellastessa dimensione. Se si cambia il rapporto fra la parte positiva e quellanegativa si genera un cambiamento della forma dell’onda che ha ripercus-sioni sul timbro dell’onda stessa. Questo rapporto è chiamato duty cyclee si misura in genere con un valore compreso fra 0 e 1. Un duty cycle di0.5 rappresenta l’onda quadra mentre un duty cycle di 0.75 significa che laparte positiva è in rapporto di 3:1 rispetto a quella negativa.

In figura 86 l’oggetto expr∼ è modificato rispetto a quello della figura85. Se i valori superano il valore in entrata nell’inlet destro emetti segnale1, altrimenti emetti segnale di -1. Questo implica che possiamo variareil valore-soglia. Mentre prima il valore soglia era fissato a zero e quindil’onda risultava simmetrica, ora tale valore può essere cambiato: se aves-simo ad esempio un valore soglia pari a 0.75 (75 nella number box) exprtrasformerebbe questo valore in 0.5 e il il costrutto if risulterebbe essere: seil valore è maggiore di -0.5 emetti 1, altrimenti 0. Ne risulterebbe un’ondarettangolare con porzione positiva più lunga di quella negativa.

91

Page 93: Inventare il suono con PURE DATA - Altervista

osc~ 200

tabwrite~ wave

metro 100dac~

expr~ if (($v1 > $f2), 1, -1)

expr ((1 - ($f1 / 100)) * 2) - 1

line

$1 40

200

frq

75

duty cycle

(0 - 100)

wave

Figure 86: duty cycle dell’onda quadra

Questa modificazione del duty cycle può essere gestita da un segnale, gen-eralmente un LFO, un Low Frequency Oscillator, di cui parleremo più avanti.Basti per ora sapere che un LFO è un normale oscillatore, specializzato nellagenerazione di frequenze molto basse, al di sotto della banda audio (<30 hz). Usare un segnale di controllo per modificare il duty cycle realizzala cosiddetta Pulse Width Modulation, utilizzata in molti sintetizzatori ana-logici negli anni ’70.In figura 87 un oscillatore con frequenza 0.25 controlla il duty cycle dell’ondaquadra. L’ampiezza viene moltiplicata per 0.99 in modo che non raggiungamai 1, poiché con ampiezza 1 il segnale è tutto positivo, quindi non c’èalternanza fra parte positiva e negativa del segnale. Di conseguenza cisarebbe assenza di oscillazione, e di suono.

8.2.3 ONDA A DENTE DI SEGA

L’onda a dente di sega ha un periodo costituito da un segmento che vada -1 a 1. Si ottiene sommando tutte le armoniche, con ampiezza pari alreciproco del numero d’ordine dell’armonico e moltiplicate per -1:

92

Page 94: Inventare il suono con PURE DATA - Altervista

osc~ 200

tabwrite~ wave

metro 100dac~

300

frq

expr~ if (($v1 > $v2), 1, -1)

*~ 0.99

osc~ 0.25

wave

Figure 87: variazione del duty cycle tramite un segnale di controllo

arm 1 arm 2 arm 3 arm 4 arm 5 arm 6 arm 7

-1 − 12 − 1

3 − 14 − 1

5 − 16 − 1

7

In figura 88 ci sono due forme d’onda a dente di sega ottenute l’una con ilcomando sinesum l’altra con un algoritmo.

phasor∼

L’onda a dente di sega è utilizzata spessissimo come segnale di controllo.In Pd c’è un oggetto che implemente un’onda a dente di sega nel campo

93

Page 95: Inventare il suono con PURE DATA - Altervista

;

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

until

515

int 0 + 1

mod 515

expr (($f1 / 515) * 2) - 1

tabwrite dentedisega2

dentedisega2dentedisega

Figure 88: l’onda a dente di sega ottenuta in due modi diversi

positivo, ovvero con valori che si muovono linearmente da 0 a 1. Taleoggetto è phasor∼, utile per moltissime applicazioni.Uno degli usi di phasor∼ è quello di utilizzarlo come segnale da modifi-care con l’oggetto expr∼ in modo molto versatile. Ad esempio è possibilecostruire una patch per la Pulse Width Modulation con un algoritmo più sem-plice di quello presentato in 8.2.2. La patch si può osservare in figura 90.Il ciclo if è leggermente diverso da quello precedente. La condizione deveverificare semplicemente il rapporto fra il segnale di phasor∼ e quello diosc∼.

8.2.4 ONDA TRIANGOLARE

Come per l’onda quadra, quella triangolare può essere generata con diversimetodi. Qui riproponiamo gli stessi della sezione precedente:

94

Page 96: Inventare il suono con PURE DATA - Altervista

saw

tabwrite~ saw

phasor~ 100

metro 120

Figure 89: l’onda a dente di sega come segnale di controllo, generata con phasor∼

phasor~ 400

dac~

expr~ if (($v1 > $v2), 1, -1)

osc~ 0.125

expr~ ($v1 * 0.49) + 0.5

Figure 90: l’onda a dente di sega come segnale di controllo, generata con phasor∼

- vettore e comando sinesum

- vettore disegnato da algoritmo

- intervento diretto sul segnale

Nel primo caso dobbiamo usare le armoniche dispari con ampiezza inversarispetto al quadrato del numero d’ordine dell’armonico e poi moltiplicarele ampiezze alternativamente per 1 e -1

arm 1 arm 2 arm 3 arm 4 arm 5 arm 6 arm 7

1 0 − 132 0

152 0 − 1

72

Nel secondo caso dobbiamo disegnare il grafico del vettore costruendotre segmenti attraverso un algoritmo, il primo segmento va da 0 a 1, il

95

Page 97: Inventare il suono con PURE DATA - Altervista

secondo da 1 a -1, il terzo da -1 a 0. In figura 91 ci sono le due formed’onda, la prima approssimata con il comando sinesum (somma dei primi19 armonici), la seconda perfetta. Nella figura successiva (92) è mostratol’algoritmo per disegnarla.

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

Figure 91: nel grafico triang l’onda triangolare è approssimata con la somma di19 armonici, mentre in triang2 l’onda è disegnata in modo perfetto

Per l’intervento diretto sul segnale si può utilizzare un oggetto phasor∼filtrato da un oggetto expr∼ con un ciclo if a cui dire: se il segnale èminore di 0.5 scrive ina retta da 0 a 1, altrimenti scrivi una retta da 1 a 0,poi moltiplica per 2 e sottrai uno per riscalare il tutto fra -1 e 1.Anche nel caso dell’onda triangolare esiste il duty cycle che determina laposizione del vertice alto del triangolo. Un duty cycle di 0.5 è un’ondatriangolare isoscele mentre con un duty cycle ad esempio di 0.75 il verticealto del triangolo è spostato verso destra (fig. 94).

96

Page 98: Inventare il suono con PURE DATA - Altervista

until

int 0 + 1

128

t f f

expr ($f1 / 128)

until

+ 1int 128

t f f

expr (1 - (($f1 - 128) / 128))

256

tabwrite triang2

until

+ 1int 384

t f f

expr (-1 - (($f1 - 384) / -128))

131

mod 256

+ 128

+ 384

mod 131

mod 128

loadbang

Figure 92: l’algoritmo per produrre una forma d’onda triangolare, in una tabelladi 512 + 3 punti

dac~

tri

tabwrite~ tri

metro 100

phasor~ 200

expr~ if (($v1 < 0.5), (($v1 * 2) * 2) - 1, (1 - (($v1 *

2)-1)) * 2 - 1)

Figure 93

97

Page 99: Inventare il suono con PURE DATA - Altervista

dac~

tri

tabwrite~ tri

metro 100

dutycycle

0.367

expr~ if ($v1 <= $f2, $v1 * (1 / $f2), (1 - $v1) * (1 /

(1-$f2))) * 2 - 1

phasor~ 250

Figure 94

98

Page 100: Inventare il suono con PURE DATA - Altervista

9 I L PA N N I N G

9.1 L’OGGETTO dac∼

Negli esempi proposti fino ad ora abbiamo sempre inviato il segnale inuscita all’oggetto dac∼ che ha il compito di convertire il segnale digitale inanalogico, in modo da poterlo ascoltare. Come si può osservare l’oggettosuddetto ha due inlet. In effetti abbiamo sempre inviato il segnale smistan-dolo in entrambi gli inlet. dac∼ infatti consente di inviare il suono versodue canali, uno sinistro e uno destro. Fino ad ora abbiamo sempre inviatoil segnale verso entrambi i canali ottenendo come risultato che il suonosia identico in entrambi, ma potremmo decidere di inviare il segnale versouno solo dei due.

osc~ 120

dac~

osc~ 120

dac~

*~ 0.25

1 2

Figure 95: in (1) il segnale dell’oscillatore è inviato al solo canale sinistro, in (2) ilsegnale viene inviato con massima ampiezza al canale sinistro, mentrecon ampiezza ridotta del 75% al canale destro

In figura 95(1) il segnale viene inviato solo al canale sinistro, mentre in (2)il segnale avrà un peso maggiore sul canale sinistro poiché prima di esserecollegato al canale destro viene ridotto in ampiezza.

99

Page 101: Inventare il suono con PURE DATA - Altervista

9.2 CONTROLLO DEL panning

Nella prossima patch realizziamo un semplice algoritmo per controllare laposizione del suono nel campo stereofonico.

osc~ 440

dac~

*~ *~

0.808 0.588

line~ line~

$1 20 $1 20

dx sx

expr sqrt($f1 / 100)

expr sqrt(1 - ($f1 / 100))

expr ($f1 / 100)

0.346

Figure 96

In figura 96 è mostrato l’algoritmo di Pd. Attraverso una slider orizzontalepossiamo posizionare il suono nel campo stereo, se l’indicatore si trova alcentro avremo un suono posizionato esattamente a metà fra i due canali,in alternativa possiamo posizionare il suono verso destra o verso sinistraspostando l’indicatore.La slider è impostata in modo da agire in un range compreso fra 0 e 100, ilvalore in uscita viene diviso per 100 in modo da produrre un range com-

100

Page 102: Inventare il suono con PURE DATA - Altervista

preso fra 0.0 e 1.0. Nel caso del canale destro questo valore decimale vienecollegato con il moltiplicatore per il canale destro impostando l’ampiezzadel segnale lo stesso canale. Per il canale sinistro invece il valore vienesottratto da 1.0 in modo da essere il complementare dell’altro. E’ neces-sario inoltre calcolare la radice quadrata dei due valori, poiché l’intensitàdel suono percepito è proporzionale al quadrato dell’ampiezza del seg-nale stesso. Entrambi i dati in uscita vengono infine passati per l’oggettoline∼ che rende più graduale il passaggio da un valore all’altro elimi-nando l’eventuale effetto a scalini che si produrrebbe.Invece di controllare direttamente la spazializzazione del segnale tramiteun oggetto grafico, possiamo ultilizzare un oscillatore a basse frequenze(LFO) per far muovere il suono fra i due canali in uscita.

osc~ 120 osc~ 1

expr~ ($v1 * 0.5) + 0.5

expr~ sqrt(1 - $v1)

expr~ sqrt($v1)

*~ *~

dac~

Figure 97

Nella figura 97 è mostrata questa situazione: il segnale dell’oscillatore didestra viene reso unipolare (vedi paragrafo successivo) producendo cosìun’onda con ampiezza compresa fra 0 e 1. Subendo le stesse operazionidella figura precedente (fig. 96) produce un’oscillazione del segnale frail canale sinistro e il canale destro. Analogamente possiamo controllare ilpanning attraverso un’onda quadra che alterni valori di 0 e 1 (fig. 98)

101

Page 103: Inventare il suono con PURE DATA - Altervista

osc~ 120 osc~ 1

expr~ sqrt(1 - $v1)

expr~ sqrt($v1)

*~ *~

dac~

expr~ if($v1 < 0.5, 1, 0)

Figure 98

9.2.1 SEGNALI BIPOLARI E UNIPOLARI

Nella patch in figura 97 abbiamo usato un particolare tipo di segnale, dettounipolare. Fino ad ora tutti i segnali che abbiamo incontrato erano bipolari,perché la loro forma d’onda oscilla fra i valori positivi e i valori negativi.Per realizzare algoritmi in cui ci sono segnali che controllano altri segnali,come nel caso del panning o del tremolo è necessario avere a disposizionedei segnali unipolari, ovvero segnali con valori che oscillano solo fra i valoripositivi (fig. 99).

9.2.2 IL DC OFFSET

Per ottenere un’onda unipolare é necessario operare una variazione suun’onda bipolare. Questa variazione si realizza aggiungendo al segnalebipolare un valore costante detto DC offset. Se ad una sinusoide che oscillafra -1 e 1 si aggiunge il valore costante 1, si otterrà una nuova sinusoideoscillante fra 0 e 2, questo perché la distanza fra l’ampiezza massima equella minima della sinusoide equivale a e (1-(-1) = 2). In figura 129 sipuò osservare che la distanza del segnale unipolare, che oscilla fra 0 e 1,equivale alla metà di quello bipolare, che oscilla fra -1 e 1. Quindi oltreall’aggiunta della costante, é necessario dividere il segnale per 2 o, meglio,moltiplicarlo per 0.5 (le moltiplicazioni per il calcolatore sono più velocidelle divisioni). Ricapitolando:

102

Page 104: Inventare il suono con PURE DATA - Altervista

Segnale bipolare e unipolare

a)

b)

Figure 99: L’ampiezza del segnale (a) oscilla fra valori positivi e negativi, mentre(b) è polarizzato nel campo positivo

(sig[−1,1] ∗ 0.5) + 0.5 = sig[−0.5,0.5] + 0.5 = sig[0,1]

Nella patch di Pd in figura 130 é mostrato un segnale bipolare trasformatoin un segnale unipolare tramite l’oggetto expr∼.

103

Page 105: Inventare il suono con PURE DATA - Altervista

a)

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

b)

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figure 100: la distanza massima fra l’ampiezza positiva e quella negativa del seg-nale bipolare (a) é doppia rispetto a quella del segnale (b)

104

Page 106: Inventare il suono con PURE DATA - Altervista

osc~ 200

expr~ ($v1 * 0.5) + 0.5

dac~

tabwrite~ bipolare

metro 100

tabwrite~ unipolare

bipolare

unipolare

Figure 101: l’oggetto expr∼ permette facilmente di effettuare le due operazionisul segnale per trasformarlo trasformano da bipolare a unipolare

105

Page 107: Inventare il suono con PURE DATA - Altervista

10 S I N T E S I A D D I T I VA E S I N T E S IV E T TO R I A L E

10.1 SINTESI ADDITIVA

Definizione: Date n onde, si ha sintesi additiva quando si sommano talionde.Risultato: La somma di onde sinusoidali produce suoni complessi es-tremamente eterogenei.

Concettualmente la sintesi additiva è una tecnica semplice, ma può esseremolto costosa in termini di consumo di CPU e difficile da controllare egestire

10.1.1 SINTESI ADDITIVA A SPETTRO ARMONICO

La sintesi additiva a spettro armonico è costituita da sinusoidi che sono inrapporto frequenziale armonico, cioè ognuna multipla dell’altra.

Il sistema più semplice per implementare questo genere di sintesi in Pd èquello di utilizzare una tabella in cui disegnare la forma d’onda risultantedalla somma delle sinusoidi e l’oggetto tabosc4∼ per leggere il contenutodella tabella. È quello che abbiamo già visto in occasione della descrizionedelle varie forme d’onda e di come costruirle. Quella è una forma di sintesiadditiva, quindi non ci soffermeremo troppo a lungo su questo passaggio.Rimandiamo alla patch in fig. 102.

10.1.2 SINTESI ADDITIVA A SPETTRO NON ARMONICO

La sintesi additiva a spettro non armonico non può fare uso delle tabellepoiché le sinusoidi che compongono la forma d’onda non sono in rapportoarmonico fra loro una tabella comune non consentirebbe ai vari periodidelle onde di essere completi.

106

Page 108: Inventare il suono con PURE DATA - Altervista

tabosc4~ waveform

0

Frequenza

dac~

;waveform sinesum 512 1 0.5 0.25 0.125 0.0625 0.031250.015625 0.078125;waveform normalize 1

waveform

Figure 102: Una patch per la sintesi additiva a spettro armonico

È necessario quindi implementare questa forma di sintesi additiva con tantioscillatori quante sono le sinusoidi che si vogliono utilizzare. Ogni oscilla-tore avrà la sua frequenza e la sua ampiezza. Nella patch in fig. 103 ci sono8 oscillatori con la propria frequenza (in alto a sinistra) e una subpatch percontrollare l’ampiezza.

10.2 SINTESI VETTORIALE

Gli esempi di sintesi additiva che abbiamo esaminato in precedenza hannoil limite di produrre spettri costanti, invariabili nel tempo. Questo pro-duce timbri fissi, quindi freddi e astratti. Ci sono molti modi per cambiareil timbro nel tempo: variare la frequenza di alcune sinusoidi nella sin-tesi a spettro inarmonico ad esempio, oppure cambiare l’ampiezza delleparziali. Uno dei sistemi usati per cambiare dinamicamente il timbro diuna forma d’onda è stato introdotto nel 1986 con la produzione del sinte-tizzatore Prophet VS. L’idea è quella di avere a disposizione delle formed’onda fisse e di un dispositivo che permetta di passare da una all’altratramite crossfading dell’ampiezza. In sostanza le onde vengono sommate,ma l’energia delle onde nella somma non è costante, all’aumentare diun’ampiezza diminuisce l’altra e viceversa. Questa tecnica, detta sintesivettoriale consente quindi di avere un dispendio di CPU molto basso per-ché le tabelle sono fisse. Si tratta semplicemente do organizzare l’algoritmo

107

Page 109: Inventare il suono con PURE DATA - Altervista

osc~

dac~

osc~ osc~ osc~ osc~ osc~ osc~ osc~

80

*~

(0-1000)

/ 1000

$1 20

line~

pd ampiezze

*~ *~ *~ *~ *~ *~ *~ *~

320

150

500

712

1780

890

2615

tabwrite~ wf

wf

Figure 103: una patch per la sintesi additiva a spettro non armonico

in modo che esegua il passaggio da un’ampiezza all’altra in modo che lasomma rimanga costante. In figura 104 abbiamo implementato un sem-plice crossfading fra due entità che si muovono nel range di zero e uno.All’aumentare di una diminuisce l’altra. L’algoritmo non ha bisogno digrandi spiegazioni. L’oggetto swap consente di invertire la posizione dei

108

Page 110: Inventare il suono con PURE DATA - Altervista

due valori che entrano dagli inlet, ma, come in questo caso, se swap ha unargomento, lo stesso sarà mandato fuori dall’outlet di sinistra consentendocidi sottrarre da questo il valore dell’outlet di destra.

A________________B

0.757

swap 1

-

0.242

Figure 104: Implementazione del crossfading

10.2.1 DISSOLVENZA INCROCIATA FRA DUE TABELLE

Nella patch di questa sezione mostriamo un algoritmo per la dissolvenza in-crociata (traduzione italiana di crossfading) fra due tabelle contenenti formed’onda semi-casuali. prima esaminiamo l’abstraction che genera tali onde(fig. 105

Grazie al contatore viene disegnata nella tabella, il cui nome è dato dalprimo argomento passato all’oggetto randomwave, un’onda sunosoidale adogni punto della quale è aggiunto un valore casuale determinato dal sec-ondo argomento passato all’oggetto. Ad esempio se tale valore è impostatoa 0.5, i valori random prodotti saranno compresi fra -0.25 e +0.25.

La patch della figura successiva (106) invece mostra l’algoritmo per la dis-solvenza vera e propria. L’algoritmo non necessita di spiegazioni partico-lari. La parte in altro a destra mostra la parte che si occupa del crossfadingmentre in basso c’è uno slider per impostare l’ampiezza dell’onda risul-tante.

109

Page 111: Inventare il suono con PURE DATA - Altervista

until

+ 1

0

float 0

512

loadbang

Generatore di onde casuali

expr (sin(($f1 / 512) * 6.283185305)) + $f2

t b f

tabwrite $1

table $1 515

send $1

normalize 1

randomF $2

expr ($f1 - $f2)

t b b

1

expr $2 * 0.5

Figure 105: L’abstraction randomwave

10.2.2 DISSOLVENZA INCROCIATA FRA QUATTRO TABELLE

Il Prophet VS implementava una sintesi vettoriale che gestiva quattro formed’onda contemporaneamente. In Pd esiste un oggetto che ci consente difare la stessa cosa. Si tratta dell’oggetto grid che si presenta come unquadrato all’interno del quale si può muovere un cursore che ci permet-tere di gestire praticamente due slider contemporaneamente. Muovendo ilcursore da sinistra a destra si modificherà un valore, muovendosi dall’altoverso il basso si modificherà l’altro.

La patch in figura 107 mostra l’implementazione della sintesi vettorialecon quattro tabelle generate da randomwave. In alto a sinistra l’oggettogrid gestisce le ampiezze delle quattro forme d’onda. L’asse orizzontalegestisce le prime due (wave1 e wave2) mentre l’asse verticale le altre due.La subpatch pd grid eval (fig. 108) si occupa di fare gli opportuni calcoli perattribuire i valori ai quattro moltiplicatori di ampiezza.

110

Page 112: Inventare il suono con PURE DATA - Altervista

A________________B

0

swap 1

-

1

tabosc4~ wf1 tabosc4~ wf2 line~

pack 0 15

line~

pack 0 15

*~ *~

8000

+~

*~

Amp

line~

pack 0 15

dac~

randomwave wf1 2

randomwave wf2 1.5

Figure 106: Dissolvenza incrociata fra due tabelle

111

Page 113: Inventare il suono con PURE DATA - Altervista

pd grid_eval

tabosc4~ wave1 tabosc4~ wave2 tabosc4~ wave3 tabosc4~ wave4

dac~

*~

*~ *~ *~

+~

+~

+~

send grid

r grid

loadbang

Frequenza

60

color 200 200 200

randomwave wave1 0.5

randomwave wave2 0.25

randomwave wave3 0.74

randomwave wave4 1.75

Figure 107: Dissolvenza incrociata fra quattro tabelle

112

Page 114: Inventare il suono con PURE DATA - Altervista

/ 100 / 100

expr (1 - $f1) expr (1 - $f1)

* * * *

inlet inlet

$1 25 $1 25 $1 25 $1 25

line~ line~ line~ line~

outlet~ outlet~ outlet~ outlet~

Figure 108: La subpatch che distribuisce le ampiezze fra i quattro segnali

113

Page 115: Inventare il suono con PURE DATA - Altervista

11 S I N T E S I S OT T R AT T I VA

11.1 LA SINTESI SOTTRATTIVA

A differenza della sintesi additiva, che realizza la somma di sinusoidi perottenere spettri complessi, la sintesi sottrattiva insiste su spettri molto com-plessi per ottenere suoni più semplici. Per sottrarre frequenze da un suonocomplesso si usano dei dispositivi software detti filtri, che si applicano susuoni che hanno uno spettro estremamente ricco, come i rumori. Schematiz-zando, il suono sorgente prima di essere inviato all’uscita passa attraversoun filtro, che realizza certe condizioni richieste (fig. 109).

filtro

segnale in usci ta

segna le in en t ra ta

Figure 109: schema di un filtraggio di segnale semplice

11.1.1 IL RUMORE

In generale si intende per rumore un suono non desiderato che disturbala percezione di un’informazione sonora. In musica elettronica un rumoreè una sequenza di oscillazioni casuali. Si distinguono vari tipi di rumori.Il rumore bianco è quello costituito da frequenza uniformemente distribuite,

114

Page 116: Inventare il suono con PURE DATA - Altervista

prodotte alla velocità della frequenza di campionamento. In altre parole,se ci si opera alla frequenza di campionamento di 44100 hertz, il rumorebianco è costituito da frequenze casuali (con ampiezza casuale) emesseogni 1

44100 di secondo. Lo spettro del rumore bianco si presenta come infigura 110: le frequenze occupano tutta la banda audio.

Rumore bianco

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figure 110: spettro del rumore bianco

Il rumore rosa ha una distribuzione spettrale diversa dal precedente: via viache le frequenza sono più alte l’ampiezza media del segnale si abbassa, perla precisione si abbassa di 3 db ogni ottava (fig. 111).

Rumore rosa

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figure 111: spettro del rumore rosa

115

Page 117: Inventare il suono con PURE DATA - Altervista

In Pd questi due tipi di rumore sono implementati rispettivamente daglioggetti noise∼ e pink∼ che non accettano nessun tipo di argomento. L’oggettorand∼ invece genera un rumore limitato in banda, questo significa che ilgeneratore produce una banda di rumore che va da 0 alla frequenza im-postata, successivamente produce delle bande secondarie larghe quanto lafrequenza impostata ma di ampiezza sempre minore. L’esempio in figura(112) mostra lo spettro prodotto da rand∼ con frequenza 2500 hz.

Rumore band limited

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figure 112: spettro di rumore band-limited con frequenza di 2500 hz

Nella patch in figura 113 l’oggetto polygate∼ consente di scegliere qualegeneratore inviare a dac∼. Accetta come argomento il numero dei segnaliin entrata e il tempo con cui passare da uno all’altro. Il messaggio choiceconsente di effettuare la scelta.

I rumori con il loro spettro ricchissimo sono ideali per poter essere filtratie costituiscono i segnali sorgenti privilegiati per la sintesi sottrattiva.

11.2 I FILTRI

Molto genericamente un filtro digitale è un algoritmo attraverso il quale unsegnale viene trasformato in un altro segnale. Meno genericamente un fil-tro è un dispositivo software che attenua o intensifica alcune regioni di unospettro.

116

Page 118: Inventare il suono con PURE DATA - Altervista

25000

noise~ pink~

dac~

rand~choice $1

polygate~ 3 100

Figure 113: selezione del tipo di rumore tramite l’oggetto polygate∼

Tali filtri possono essere implementati secondo i due schemi mostrati infigura 114.

Input Output

delay

(a)

+

Input Output

delay

(b)

+

Figure 114: I due più comuni schemi di implementazione per i filtri digitali

Nell’immagine (a) una copia del segnale viene ritardata nell’ordine dipochi campioni e sommata al campione in entrata. Tale modalità di im-

117

Page 119: Inventare il suono con PURE DATA - Altervista

plementazione descrive i filtri a risposta finita all’impulso (Finite Impulseresponse, FIR) perché il segnale elaborato è solo quello in entrata. In (b)una copia del segnale in uscita viene ritardato e combinato con il segnalein entrata, in questo caso si parla di un filtro a risposta infinita all’impulso(Infinite Impulse Response, o IIR), poiché il segnale in uscita rientra nel filtroper essere rielaborato. Per tale ragione si parla in questo caso anche diFiltri Ricorsivi.

La somma (o la sottrazione) di tali campioni produce una forma d’onda di-versa dall’originale e quindi un nuovo spettro. L’aggiunta (o la sottrazione)di più campioni ritardati può produrre una grande varietà di filtri. Talerelazione fre segnale in entrata e segnale in uscita è descitta attraversoun’equazione. Il segnale in uscita è il risultato di somme, sottrazioni emoltiplicazioni fra il campione attuale e campioni ritardati. Questo tipo diequazione è detta equazione alla differenza lineare.

La figura 115 mostra lo schema di un semplice filtro mediano passa-basso.Si dice mediano perché fa la media fra il campione attuale e il campioneprecedente, cioè somma i due campioni e poi divide per due. Il risultato èun filtro passa-basso perché attenua le alte frequenze.

Input Output

delay

0.5

0.5

*

* +

Figure 115: Filtro di media passa-basso

L’equazione di questo filtro è la seguente:

y[n] = (0.5 ∗ x[n]) + (0.5 ∗ x[n− 1])

dove x è il segnale in entrata, y il segnale in uscita, n il numero del campi-one e 0.5 il coefficiente del filtro.

In pd tramite l’oggetto z∼ è possibile ritardare un segnale nell’ordine disingoli campioni. In figura 116 è mostrata l’implementazione del filtro ap-

118

Page 120: Inventare il suono con PURE DATA - Altervista

pena descritto.

noise~

z~ 1

*~ 0.5

*~ 0.5

+~

dac~

Figure 116: Filtro di media passa-basso in pd

z∼ prende come argomento il numero dei campioni da ritardare, nel nos-tro caso 1. Tale filtro tende a smussare le spigolature del segnale, che sonoimprovvise e rapidissime, per tale motivo generano frequenze alte. Precisa-mente il filtro attenua le frequenze fino alla metà della frequenza di campi-onamento (tipicamente 22050). L’immagine in figura 117 mostra la curvadescritta dal filtro nel dominio della frequenza. Tale rappresentazione de-scrive la risposta in frequenza del filtro.

22050

amp

0

1

freq

Figure 117: Risposta in frequenza del filtro di media passa-basso

Se invece si sommare i due campioni, si sottraggono, si otterà un filtrag-gio delle basse frequenze, l’esatta inversione del precedente. Tale filtro èdetto passa-alto poiché lascia passare le alte frequenze fino alla metà della

119

Page 121: Inventare il suono con PURE DATA - Altervista

frequenza di camipnamento. L’equazione diventa quindi:

y[n] = (0.5 ∗ x[n])− (0.5 ∗ x[n− 1])

e la risposta in frequenza di tale operazione è mostrata in figura 118.

22050

amp

0

1

freq

Figure 118: Risposta in frequenza del filtro di media passa-alto

Il numero dei campioniritardati determina anche l’ordine del filtro. Unfiltro del primo ordine sarà implementato con un unico campione ritardato,secondo questa equazione generica:

y[n] = (a0 ∗ x[n])± (a1 ∗ x[n− 1])

dove a0 e a1 sono, rispettivamente, il coefficienti del campione originalee del campione ritardato. Aumentando i campioni e quindi i coefficienti,aumenta anche l’ordine del filtro. Come vedremo, l’ordine del filtro deter-mina anche la sua risposta in frequenza.

Un filtro del secondo ordine avrà la seguente equazione:

y[n] = (a0 ∗ x[n])± (a1 ∗ x[n− 1])± (a2 ∗ x[n− 2])

Come abbiamo visto tali filtri sono detti FIR, perché non creano ricorsionifra il segnale di entrata e il segnale di uscita e fino al secondo ordine sono

120

Page 122: Inventare il suono con PURE DATA - Altervista

molto stabili, infatti per creare filtri di ordine superiore si è solito usarefiltri del primo e del secondo ordine in scascata piuttosto che implementareun unico filtro di ordine superiore.

I filtri IIR invece sommano il segnale in entrata con i campioni ritardatirientranti nel sistema. L’equazione generale per un filtro IIR del primo or-dine è la seguente:

y[n] = (a0 ∗ x[n])± (a1 ∗ x[n− 1])± (b1 ∗ y[n− 1])

dove b1 è il coefficiente del campione ritardato. b0 ovviamente non è pre-sente perché sarebbe il coefficiente del campione originale in entrata, giàpresente.

Un’altro modo per rappresentara il comportamento di un filtro è quellodenominato risposta all’impulso (Impulse Response) che viene realizzato neldominio del tempo. Per rappresentare tale comportamento si una un im-pulso, cioè il segnale più breve che un sistema digitale possa realizzare:un singolo campione. Infine esiste un terzo modo, la risposta in fase, chedescrive lo spostamento della fase delle sinusoidi componenti del suonofiltrato.

Non ci addentreremo oltre nella descrizione tecnica dei filtri digitali, cheesulerebbe dagli scopi di questo testo, ma diremo che attualmente i filtripiù usati sono raggrupabili in 4 tipi:

• passa-basso

• passa-alto

• passa-banda

• escludi-banda

11.3 I PARAMETRI DEI FILTRI

I filtri passa-basso e passa-alto devono avere almeno un parametro perpoter funzionare, cioè la frequenza di taglio (cutoff frequency). Nel primo

121

Page 123: Inventare il suono con PURE DATA - Altervista

caso tale quantità indica la frequenza al di sopra della quale vengono atten-uate le altre frequenze, nel secondo, al contrario, indica la frequenza sottola quale inizia l’attenuazione.

Per essere precisi la frequenza di taglio è, convenzionalmente, il punto incui il filtro riduce il segnale allo 0.707 del suo massimo valore, il che, conapiezza pari a 1, corrisponde a una riduzione di 3 decibel. Per questo avolte la frequenza di cutoff viene definita 3dB point.

Le frequenze attenuate al di sopra (o al di sotto nel caso di un passa-alto)della frequenza di cutoff costituiscono la banda bloccata del filtro stopband, lefrequenze passanti costituiscono invece la banda passante (passband).

Gli altri due filtri (passa-banda e escludi-banda) sono una derivazione deiprimi. infatti se si filtra un segnale con una coppia passa-basso/passa-altosi realizzarà un filtro passa-banda o escludi-banda. L’immagine 119 mostraquesta situazione. Nella figura in alto la zona quadrettata rappresenta laregione dello non filtrata, in quella in basso la zona quadrettata in alto rap-presenta la zona eliminata dallo spettro.

I valori necessari per tali filtri sono due frequenze di cutoff, una per il passa-basso, l’altra per il passa-alto.

I filtri passa-banda (ed escludi-banda, che è il suo inverso) sono comunqueormai algoritmi indipendenti dagli altri filtri e usano parametri diversiper funzionare. Il primo valore è sempre una freuqneza centrale (center fre-quency) e una larghezza di banda bandwidth, che corrisponde alla frequenzadi taglio superiore meno quella inferiore. Tale valore è spesso sostituitodal fattore Q, che corrisponde al rapporto fra la frequenza centrale e lalarghezza di banda:

Q = fcB

Ovviamente vale anche l’operazione opposta, per sapere qual’è la larghezzadi banda partendo da Q, si avrà:

B = fcQ

122

Page 124: Inventare il suono con PURE DATA - Altervista

bandpass filter

highp

ass lowpassbandreject filter

highpass lowpass

Figure 119: Filtro passa-banda e filtro escludi-banda creati a partire da un filtropassa-basso e uno passa-alto

La larghezza di banda è quindi inversamente proporzionale al fattore Q.

Ma quanto è efficace un filtro? In altre parole, di quanto attenua le fre-quenze? Naturalmente dipende dal filtro, e in base alla capacità di atten-uazione i filtri vengono classificati secondo ordini che definiscono il livellodi attenuazione in dB per ottava, cioè a ogni raddoppio della frequenza.Un filtro del primo ordine attenua di 6dB per ottava le frequenze, uno delsecondo ordine le attenua di 12 dB, e così via. questo significa ad esempioche in presenza di un filtro passa-basso del primo ordine con frequenza ditaglio di 200 hertz. L’ampiezza a 400 hertz sarà ridotta di 6 db, a 800 hertzci sarà una riduzione di 12 dB, a 1600 hertz di 18 db e così via. La figura120 mostra la risposta in frequenza di due filtri di primo e secondo ordine.Naturalmente l’ordine di un filtro può riguardare i filtri passa-basso epassa-alto, ma non i passa-banda e gli escludi-banda che aumentano odiminuiscono la loro capacità di attenuazione in base alla bandwidth definita.La figura 121 mostra il comportamento di un filtro passa-banda al variaredel fattore Q.

123

Page 125: Inventare il suono con PURE DATA - Altervista

-12 dB

-6 dB

4x2xx

II ord.

I ord.

Figure 120: Curva della risposta in frequenza di filtri del primo e secondo ordine,x è la frequenza di cutoff

Fc

-3 db

Q = 8

Q = 2

Figure 121: Comportamento di un filtro passa-banda in relazione al fattore Q

11.4 I FILTRI IN PD

Pd possiede una vasta collezione di filtri, la maggior parte dei quali in-trodotti da librerie esterne nella versione extended. Per brevità analizzer-emo l’uso di alcuni oggetti della versione nativa.

I due oggetti lop∼ e hip∼ implementano rispettivamente un filtro passa-basso e uno passa-alto del primo ordine, mentre bp∼ e vcf∼ sono deipassabanda. I primi due accettano come unico argomento la frequenza dicutoff, mentre gli altri la frequenza centrale e il fattore Q. Con questi oggettiè anche possibile realizzare un filtro escludi-banda, sia usando una coppiadi passa-basso/passa-alto che usando un passabanda (basta sottrarre il seg-

124

Page 126: Inventare il suono con PURE DATA - Altervista

nale del passabanda dal segnale originale).

La figura 122 mostra lop∼, hip∼ e bp∼ in azione sulla stessa sorgente.L’oggetto polygate∼ permette di lasciar passare il segnale indicato dalmessaggio choice seguito dal numero dell’inlet scelto. Un messaggio pari azero chiude l’uscita per qualunque segnale. I due argomenti dell’oggettosono il numero degli inlet e il tempo in millisecondi in cui avviene la tran-sizione fra un segnale e l’altro.

noise~

dac~

*~

lop~ 5

sig~

choice $1

polygate~ 3 80

bp~ 200 10

194 bp_cutoffhip~ 10000

lop~ 40

off

lp

hp

bp

Figure 122: I filtri semplici di pd in azione

11.5 IL FILTRO vcf∼

Il filtro vcf∼ è uguale a bp∼ eccetto per il fatto di poter controllare il cutoffvia segnale. Questo consente dei realizzare dei controlli della frequenza ditaglio molto dinamici.

Nella patch in figura 123 un phasor∼ controlla il cutoff di un vcf∼ che filtrail segnale di un altro phasor∼.Il phasor∼ di destra crea 2 volte al secondo una rampa che viene molti-plicata per 720 e sommata a 80, quindi va da 80 a 800. Questo rampava nell’inlet del cutoff del vcf∼. L’argomento dell’oggetto è il fattore Q,che nella patch può essere variato attraverso la number box. La frequenzaprincipale del suono sorgente è generata da un altro phasor∼ a frequenza

125

Page 127: Inventare il suono con PURE DATA - Altervista

vcf~ 5

phasor~ 80

+~ 80

sig~

lop~ 5

*~

dac~

8

phasor~ 2

*~ 720

Figure 123: Un filtro vcf∼ con controllo del cutoff attraverso un phasor∼

costante.

Nella patch c’è una particolarità: lo slider (con valori da 0 a 1) invia at-traverso sig∼ il segnale che controllerà l’ampiezza a un filtro passa-bassocon frequenza 5. lop∼ smusserà le spigolature del segnale consentendoil passaggio da un valore all’altro in modo graduale. Diminuendo la fre-quenza del filtro l’interpolazione sarà più lenta, al contrario, sarà più rap-ida all’aumentare della stessa.

11.6 UN sequencer CON vcf∼ E samphold∼

Nella prossima patch implementiamo un algoritmo che crea dei pattern, omeglio, delle sequenze di note che vengono filtrate da un vcf∼. Si tratta diuna forma rudimentale di sequencer, cioè un dispositivo che emette segnalidi controllo per pilotare degli eventi sonori.

Gli oggetti principali della patch li conosciamo quasi tutti, un phasor∼ perla lettura delle tabelle e il timing del sequencer, un vcf∼ per filtrare viasegnale la sorgente sonora e infine samphold∼, oggetto utilissimo per nu-merose implementazioni.

126

Page 128: Inventare il suono con PURE DATA - Altervista

samphold∼ è la forma contratta di sample and hold, campiona e trattieni edè, a modo suo, una forma di filtro. Generalmente un algoritmo sample andhold prevede due parametri: un segnale da campionare e un segnale perscandire il campionamento secondo certi criteri. Nel caso di samphold∼,l’inlet di sinistra è deputato ad accettare il segnale che verrà campionato,mentre quello di destra accetta il segnale di trigger. Ma come e quandoavviene il campionamento del segnale? esattamente quando il segnale didestra passa da un valore non-zero a zero. Tipicamente si usa un phasor∼:ogni volta che termina la rampa arrivando a uno, torna a zero, innescandoil processo di campionamento. Il segnale da campionare può essere invecedi qualunque tipo.

In figura 124 samphold∼ campiona 4 volte al secondo il segnale inviato danoise∼, tale segnale viene, in uscita, costrotto nel range [0,1], poi molti-plicato per 800 e sommato a 100, generando così valori casuali compresifra 100 e 900, che vanno a cambiare la frequenza di un oscillatore. La sub-patch per l’ampiezza è solo un’incapsulamento di uno slider con un oggettolop∼, come abbiamo visto prima.

samphold~

phasor~ 4noise~

abs~

*~ 800

+~ 100

osc~

*~

dac~

5

interp_time

Figure 124: La frequenza di un oscillatore controllata da samphold∼

127

Page 129: Inventare il suono con PURE DATA - Altervista

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 ED ’A M P I E Z Z A ( A M )

12.1 LA MODULAZIONE AD ANELLO

Definizione: Dati due segnali, si ha la modulazione ad anello (Ring Modu-lation, RM) quando si moltiplicano l’uno per l’altro nel dominio dell’ampiezza:

RM = sigα ∗ sigβ

Risultato: La RM produce un suono complesso, formato da tutte le fre-quenze ottenute dalla somma e dalla differenza dei due segnali. Nel casopiù semplice, con due sinusoidi, avremo quindi:

RM = (α f + β f ), (α f − β f )

In termini matematici, la seconda regola di Werner esprime proprio questaidentità:

cos(α) ∗ cos(β) =12[cos(α + β) + cos(α− β)] (1)

Quando i due segnali sono suoni complessi, il risultato della modulazionead anello sarà l’insieme delle somme e differenze fra tutte le frequenzedei due suoni. Nella patch in figura 127 si ha una doppia modulazionead anello, con le sinusoidi di frequenza 2000, 500 e 650 hertz. Il risultatodella prima RM da frequenze di 2500 e 1500 hertz che vengono modulaticon la terza sinusoide (650 hz), producendo un suono finale formato dallasomma di 4 onde: 3150, 1850, 2150, 850 hertz (vedi lo spettro in figura 128.Schematizzando:Dati i segnali α(2000hz), β(500hz), γ(650hz), si applica la modulazione adanello ai primi due e il risultato si ring-modula con il terzo:

- RM1 = (α f + β f ), (α f − β f )

128

Page 130: Inventare il suono con PURE DATA - Altervista

Modulazione ad anello

x

0 1000 2000 3000

Figure 125: lo spettro risultante di una modulazione ad anello. Le frequenze dellesinusoidi sono di 2000 Hz e 500 hz. Il risultato è un suono compostoda frequenze di 2500 hz e 1500 hz

osc~ 2000

*~

dac~

osc~ 500

Figure 126: la patch di Pd che implementa la Modulazione ad anello dello spettroin figura 125

- RM1 = (2000 + 500), (2000− 500)

- RM1 = 2500, 500

- RM2 = RM1 f ∗ γ f

129

Page 131: Inventare il suono con PURE DATA - Altervista

- RM2 = RM1 f ∗ 650

- RM2 = (2500 + 650), (2500− 650), (1500 + 650), (1500− 650)

- RM2 = 3150, 1850, 2150, 850

osc~ 2000

*~

dac~

osc~ 500

*~

osc~ 650

Figure 127: doppia modulazione ad anello: 2 segnali vengono ring-modulati fraloro e successivamente con un terzo

Storicamente la Modulazione ad anello è stata utilizzata per modificare iltimbro degli strumenti tradizionali. In quel caso un suono complesso vienering-modulato con un suono di sintesi, una sinusoide ad esempio. Tecnica-mente non c’è alcuna differenza con la modulazione vista qui sopra, masi preferisce in queste circostanze parlare di suoni che vengono modifi-cati con altri suoni: il suono da modulare viene definito Portante (Carrier),mentre il segnale che modula è detto Modulante (Modulator).

12.2 SEGNALI BIPOLARI E UNIPOLARI

Per ottenere un’onda unipolare é necessario operare una variazione suun’onda bipolare. Questa variazione si realizza aggiungendo al segnalebipolare un valore costante detto DC offset. Se ad una sinusoide che oscillafra -1 e 1 si aggiunge il valore costante 1, si otterrà una nuova sinusoide

130

Page 132: Inventare il suono con PURE DATA - Altervista

Modulazione ad anello doppia

x

0 1000 2000 3000 4000

Figure 128: lo spettro risultante dalla doppia modulazione ad anello

oscillante fra 0 e 2, questo perché la distanza fra l’ampiezza massima equella minima della sinusoide equivale a e (1-(-1) = 2). In figura 129 sipuò osservare che la distanza del segnale unipolare, che oscilla fra 0 e 1,equivale alla metà di quello bipolare, che oscilla fra -1 e 1. Quindi oltreall’aggiunta della costante, é necessario dividere il segnale per 2 o, meglio,moltiplicarlo per 0.5 (le moltiplicazioni per il calcolatore sono più velocidelle divisioni). Ricapitolando:(sig[−1,1] ∗ 0.5) + 0.5 = sig[−0.5,0.5] + 0.5 = sig[0,1]

Nella patch di Pd in figura 130 é mostrato un segnale bipolare trasformatoin un segnale unipolare tramite l’oggetto expr∼.

12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO

Definizione: Dato un segnale bipolare e uno sinusoidale unipolare, haluogo un tremolo quando il segnale unipolare, a basse frequenze, modulal’ampiezza di quello bipolare.

Risultato: il tremolo non è altro che una variazione dell’ampiezza di unsegnale prodotta da un altro segnale. L’oscillatore che modula l’ampiezzadella Portante deve necessariamente emettere basse frequenze, per non

131

Page 133: Inventare il suono con PURE DATA - Altervista

a)−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

b)

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figure 129: la distanza massima fra l’ampiezza positiva e quella negativa del seg-nale bipolare (a) é doppia rispetto a quella del segnale (b)

interferire con la frequenza del suono modulato. Inoltre una frequenzatroppo alta non permetterebbe di percepire l’effetto tremolo desiderato.Tradizionalmente esistevano degli oscillatori specializzati nella generazionedi basse frequenza, sotto i 30 hertz circa, utilizzati proprio come strumentidi controllo di altri oscillatori. Gli LFO (Low Frequency Oscillator) in Pdpossono essere sostituiti dai normali oscillatori, che generano qualsivogliafrequenza.La patch in figura ?? realizza un tremolo semplice. Si può controllare inter-attivamente la frequenza del tremolo con la number box in alto e l’ampiezzadel segnale in uscita con la slider orizzontale. Come si intuisce l’oscillatoremodulante determina la frequenza della variazione d’ampiezza, ma nonl’escursione dell’ampiezza stessa, che oscilla sempre fra 0 e 1. La figura

132

Page 134: Inventare il suono con PURE DATA - Altervista

osc~ 200

expr~ ($v1 * 0.5) + 0.5

dac~

tabwrite~ bipolare

metro 100

tabwrite~ unipolare

bipolare

unipolare

Figure 130: l’oggetto expr∼ permette facilmente di effettuare le due operazionisul segnale per trasformarlo trasformano da bipolare a unipolare

132 mostra proprio questa situazione, il segnale (a) viene modulato inampiezza da (b) e il risultato (c) è un’oscillazione percepibile dell’ampiezzafra 0 e 1.Con la prossima patch un algoritmo più articolato del precedente realizzaun tremolo controllabile in frequenza, ma anche in ampiezza, in mododa poter decidere anche l’escursione del tremolo. La figura 133 mostraproprio questa situazione. L’onda (b) varia l’ampiezza producendo in (c)un cambiamento graduale dell’entità del tremolo. In figura 134 la patch diPd che implementa l’algoritmo relativo. Le due number box consentono diintervenire interattivamente sulla frequenza e sull’ampiezza del tremolo.La frequenza agisce esattamente come in figura 131 mentre per l’ampiezzail numero in entrata dalla number box di destra ha un range compreso fra0 e 50 e in uscita viene diviso per 100, in modo da emettere un range fra0 e 0.5. Il segnale viene moltiplicato per quel valore e il risultato vienesommato al risultato di 1 meno il valore in entrata.

133

Page 135: Inventare il suono con PURE DATA - Altervista

*~

osc~ 1

expr~ ($v1 * 0.5) + 0.5

2

controllo_tremolo

dac~

*~

line~

$1 20

osc~ 800

Figure 131: con la number box si può aumentare o diminuire la frequenza deltremolo

Tremolo

a)

b)

c)

Figure 132: il segnale (a) viene moltiplicato per il segnale (b) generando il tremolorappresentato in (c)

134

Page 136: Inventare il suono con PURE DATA - Altervista

Tremolo controllato in ampiezza

a)

b)

c)

Figure 133: il segnale (b) varia in ampiezza generando una variazionedell’ampiezza di (c)

12.4 LA MODULAZIONE D’AMPIEZZA

Definizione: Dato un segnale bipolare, detto Portante, e uno unipolare,detto Modulante, ha luogo una modulazione d’ampiezza (AM) quando ilsegnale unipolare modula l’ampiezza di quello bipolare.

Risultato: La modulazione d’ampiezza produce un suono con uno spet-tro in cui è presente la frequenza Portante e tutte le frequenza somma e dif-ferenza fra Portante e Modulante. Tecnicamente la Modulazione d’ampiezzaè molto simile al tremolo, con la differenza che per il tremolo il segnaleModulante è costituito da un segnale di frequenza molto bassa. Nell’AMinvece la frequenza Modulante è compresa nella banda audio. Dal puntodi vista trigonometrico abbiamo:

sin(α) ∗ (1 + sin(β)) = sin(α) ∗ sin(β) + sin(α) =12 (cos(α− β)− cos(α + β)) + sin(α)

135

Page 137: Inventare il suono con PURE DATA - Altervista

*~

osc~ 1

1

frequenza

dac~

*~

line~

$1 20

wave

tabwrite~ wave

metro 25

37

ampiezza

/ 100

osc~ 1600

expr~ ($v1 * $f2) + (1 - $f2)

Figure 134: con la number box a destra si può controllare l’ampiezza del tremolo

Rispetto alla Modulazione ad anello, nello spettro è quindi presente ancheil segnale Portante. In figura 135 viene mostrato lo spettro di una modu-lazione d’ampiezza con Portante di 800 hz e modulante 160 hz. Lo spettrosarà quindi:

(Pf ), (Pf + M f ), (Pf −M f ) =

800, (800 + 160), (800− 160) =

800, 960, 640Come nel caso della modulazione ad anello, nella Modulazione d’ampiezzai segnali possono essere costituiti da suoni complessi. Lo spettro risultantesarà sempre l’insieme delle somme e differenze fra le frequenze della por-tante e della modulante e in più le frequenze della portante. La patch infigura 138 mostra una doppia modulazione d’ampiezza. La portante di1500 hz viene modulata con un segnale di 500 hz. Il risultato di tale modu-

136

Page 138: Inventare il suono con PURE DATA - Altervista

Modulazione d’ampiezza semplice

x

0 500 1000 1500 2000

Figure 135: Il segnale portante ha frequenza di 800 hz, mentre il modulante hafrequenza di 160 hz

lazione è la portante di una nuova modulazione con un segnale di 300 hz.Schematizzando:

(Pf ∗M1) ∗M2 =

[1500, (1500 + 500), (1500− 500)] ∗M2 =

(1500, 2000, 1000) ∗M2 =

(1500, 2000, 1000) ∗ 300 =

[1500, (1500 + 300), (1500− 300)], [2000, (2000 + 300), (2000− 300)],[1000, (1000 + 300), (1000− 300)] =

1500, 1800, 1200, 2000, 2300, 1700, 1000, 1300, 700

Lo spettro risultato è mostrato in figura 138.

12.4.1 L’INDICE DI MODULAZIONE

La patch in figura 136 genera una semplice modulazione d’ampiezza dovela Portante e le frequenze laterali hanno la stessa ampiezza. Oltretutto im-postare a zero la frequenza o l’ampiezza della Modulante porterebbe a zeroanche l’ampiezza della Portante, poiché il segnale Portante sarebbe molti-

137

Page 139: Inventare il suono con PURE DATA - Altervista

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

osc~ 800 osc~ 160

Figure 136: la patch che produce lo spettro della figura precedente

plicato per zero. Attraverso un indice di modulazione è possibile controllareil rapporto fra l’ampiezza della Portante e quella della Modulante.L’algoritmo per implementare l’indice di modulazione deve assicurare chel’ampiezza in uscita dall’AM sia sempre pari a 1, quindi al diminuiredell’ampiezza della modulante ci sarà un aumento della costante che sisomma all’ampiezza della Modulante e che si moltiplica alla Portante. Ifigura 139 c’è lo spettro di una modulazione con Portante a 800 hz e Mod-ulante a 160 hz. Nella figura 140 c’è la relativa patch di Pd.

138

Page 140: Inventare il suono con PURE DATA - Altervista

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

expr~ ($v1 * 0.5) + 0.5

*~

osc~ 1500

osc~ 500

osc~ 300

Figure 137: la patch realizza una modulazione d’ampiezza con due modulanti

139

Page 141: Inventare il suono con PURE DATA - Altervista

Modulazione di ampiezza con 2 modulanti

x

0 1000 2000 3000

Figure 138: la patch che produce lo spettro della figura precedente

Indice di modulazione 0.25

x

0 500 1000 1500

Figure 139: spettro di modulazione di ampiezza con indice di modulazione paria 0.25

140

Page 142: Inventare il suono con PURE DATA - Altervista

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

osc~ 800

line~

$1 20

osc~ 160

expr~ ($v1 * $v2) + (1 - $v2)

Figure 140: la slider verticale a destra controlla l’indice di modulazione, con rangeda 0 a 1

141

Page 143: Inventare il suono con PURE DATA - Altervista

13 V I B R ATO E M O D U L A Z I O N E D IF R E Q U E N Z A ( F M )

13.1 SEGNALE DI CONTROLLO DELLA FREQUENZA: IL VIBRATO

Prima di trattare della Modulazione d’ampiezza avevamo visto che conun’oscillazione a basse frequenze è possibile modulare l’ampiezza di unonda producendo un effetto di tremolo. Analogamente, agendo sulla fre-quenza del segnale con un LFO possiamo modulare la frequenza dell’oscillatoreproducendo l’effetto del vibrato. Invece di utilizzare un segnale unipolarepossiamo usare un normale segnale bipolare.

+~

*~

osc~

sig~

8040

dac~

osc~ 1

metro 100

vibrato

tabwrite~ vibrato

Figure 141

142

Page 144: Inventare il suono con PURE DATA - Altervista

Nella patch in figura 141 il segnale bipolare dell’LFO sarà moltiplicato per40, producendo un’onda che varierà in ampiezza fra -40 e 40 hz. Questosegnale modulerà la frequenza dell’oscillatore di sinistra che ha una fre-quenza base di 2000. L’effetto sarà di avere un segnale di frequenza 2000

che oscilla fra 1660 e 2040 hz alla velocità di un ciclo al secondo.

13.2 MODULAZIONE DI FREQUENZA

Definizione: Dato un segnale Portante e uno Modulante, ha luogo unamodulazione di frequenza (FM) quando il segnale Modulante modula lafrequenza di quello Portante.

Risultato: La FM produce uno spettro molto ricco costituito dal segnalePortante e da un certo numero di parziali con frequenza pari alla distanzafra la Portante e un multiplo intero della Modulante. Schematizzando:

FM f = Pf , (Pf + M f ), (Pf −M f ), (Pf + 2M f ), (Pf − 2M f ), (Pf + 3M f ), (Pf −3M f ), . . .

Come per la modulazione ad anello e d’ampiezza, lo spettro della FMè simmetrico rispetto all’asse della frequenza Portante, ma contiene unnumero di bande laterali dipendendente dalla deviazione di picco.La deviazione di picco è ”il massimo mutamento di frequenza che l’oscillatoreportante subisce”1. La deviazione di picco si stabilisce attraverso un indice dimodulazione secondo la formula:

I = DM f

Dove I è l’indice di modulazione e D è la deviazione di picco. Ne consegueche:

D = I ∗M f

Più elevato è il valore dell’indice di modulazione, maggiore sarà la devi-azione di picco, più numerose le componenti della portante modulata infrequenza. In figura 142 è mostrata una patch per la modulazione di fre-quenza semplice. Fa uso di tre subpatch che esaminiamo una alla volta.

1 R. Bianchini, A. Cipriani, "Il Suono Virtuale", ed. Contempo, pag. 244

143

Page 145: Inventare il suono con PURE DATA - Altervista

dac~

pd modulante

200

freq

1000

indice

10

Deviazione

2000

pd uscita

pd portante

4000

freq

Figure 142: la patch per la modulazione di frequenza semplice

In figura 143 è raffigurata la subpatch per la portante. L’inlet riceve il seg-nale prodotto dalla modulante, che viene sommato alla frequenza dellaportante, che si puòimpostare con la number box in alto.In figura 144 si puòosservare che la number box a sinistra imposta la fre-quenza dell’oscillatore modulante. Tale frequenza viene anche moltiplicataper l’indice di modulazione. Il prodotto di tale moltiplicazione determina ladeviazione di picco, quindi l’ampiezza dell’oscillatore modulante. Il segnale

144

Page 146: Inventare il suono con PURE DATA - Altervista

osc~

+~

0

freq

inlet~

outlet~

Figure 143: la subpatch per il segnale portante

in uscita dall’outlet entra nell’inlet della Portante.

Sulla patch per l’uscita (fig. 145) non c’è molto da dire: una slider verticalecontrolla l’ampiezza del segnale prodotto dalla FM.Maggiore è la deviazione di picco, maggiore sarà il numero di componentipresenti nello spettro. In figura 146 l’indice di modulazione pari a 0.1determina una deviazione di picco di 20 hz (0.1 * M f , ovvero 0.1 * 200 = 20)quindi un numero esiguo di componenti spettrali. In figura 147 l’indicepari a 10 determina una devizione di 2000 hz, quindi uno spettro moltopiù 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 aldi sopra di tali limiti inizia una diminuzione graduale delle ampiezze.

13.2.1 L’INVILUPPO

Fino ad ora il risultato delle operazioni ha sempre prodotto segnali con-tinui. Non ci siamo occupati di definire un evento nel dominio del tempo,che fosse provvisto di un inizio e di una fine, come invece accade per ognisuono reale. Con gli strumenti digitali abbiamo la possibilità di crearesuoni di durata indefinita, ma anche di definire la loro durata nel tempo.Per disegnare un suono definito nel dominio del tempo abbiamo bisognodi un inviluppo, ovvero di un profilo che determini la forma che il suono

145

Page 147: Inventare il suono con PURE DATA - Altervista

*~

osc~ 200 $1 20

line~

$1 20

line~

*~

200

freq

1000

indice

outlet~

/ 100

10

Deviazione

2000

*

t b f

Figure 144: la subpatch per il segnale modulante

assume rispetto al tempo. In figura 148 si può osservare la forma d’ondaprodotta da un suono di tromba della durata di circa 6 decimi di secondo.Approssimando molto si può distinguere una fase (attacco in cui l’ondapassa da uno stato di quiete ad uno di massima ampiezza, una secondafase in cui c’è un calo dell’ampiezza (decadimento), una terza fase in cui ilsuono si mantiene più o meno costante (sostegno) e un’ultima fase (rilascio)in cui l’onda torna allo stato di quiete. Queste quattro fasi, a volte indicatecon l’acronimo ADSR, costituiscono l’inviluppo del suono.Naturalmente l’ADSR costituisce un’approssimazione, ci sono nella realtàdei suoni che non hanno la fasi di sostegno o quella di decadimento, adesempio alcuni suoni percussivi. Sicuramente però l’attacco e il rilasciodel suono sono nei suoni reali sempre presenti. Nella musica elettronica

146

Page 148: Inventare il suono con PURE DATA - Altervista

*~

$1 20

line~

outlet~

inlet~

Figure 145: la subpatch per l’uscita

Spettro FM indice 0.1

x

0 1000 2000 3000 4000 5000 6000 7000 8000

Figure 146: FM con frequenza portante di 4000 hz, modulante di 200 hz e indicedi modulazione 0.1

un esempio tipico di inviluppo è quello mostrato in figura 149(b), che vieneapplicato al segnale (a), producendo la forma d’onda mostrata in (c).Uno degli strumenti per generare inviluppi in Pd è l’oggetto envgen che ciconsente di disegnare inviluppi costituiti da segmenti. L’output dell’oggettoè un messaggio leggibile con line (fig. 150). Nella prossima sezione faremouso di generatori di inviluppo nella modulazione di frequenza.

147

Page 149: Inventare il suono con PURE DATA - Altervista

Spettro FM indice 10

x

0 1000 2000 3000 4000 5000 6000 7000 8000

Figure 147: FM con frequenza portante di 4000 hz, modulante di 200 hz e indicedi modulazione 10

Inviluppo di tromba

tempo

ampiezza

Figure 148

13.2.2 FM A SPETTRO VARIABILE

Un uso interessante della modulazione di frequenza è quello di usare degliinviluppi per creare spettri variabili. Con la prossima patch generiamo una

148

Page 150: Inventare il suono con PURE DATA - Altervista

a)

b)

c)

Figure 149: l’inviluppo disegnato in (b) ha valori compresi fra 0 e 1. L’onda (a)viene inviluppata da (b), ovvero istante per istante le ampiezze is-tantanee di (a) vengono moltiplicate per i relativi valori di (b), pro-ducendo (c)

sequenza di suoni brevi che simulano il timbro di un woodblock, secondoun algoritmo proposto da John Chowning2.L’algoritmo è semplice: una FM con portante di 80 hz e modulante di55 hz. Un indice di modulazione gestito da un inviluppo con una puntamassima di 25 e un altro inviluppo per l’ampiezza del suono. In figura151 c’è l’intero algoritmo. La durata di un evento è di 200 millisecondi.La subpatch pd indexenv serve semplicemente a rescalare i valori in uscitadell’oggetto envgen che emette solo valori di ampiezza compresi fra 0 e 1

(fig. 152. La subpatch envamp invece memorizza i dati del’altro envgen e lispedisce a line senza alcun riscalamento.

2

149

Page 151: Inventare il suono con PURE DATA - Altervista

Figure 150: l’oggetto envgen

Infine in figura 154 c’è il sequencer per la generazione dei bang per in-nescare gli eventi sonori. L’oggetto list-idx riceve una lista di 0 e 1, 1 laddovel’evento deve essere on, 0 quando dev0essere off. metro collegato a un con-tatore costringe list-idx ad emettere uno ad uno i valori della lista, quandoil valore è uguale a uno la patch invia un bang agli inviluppi, creando lasequenza desiderata.

13.3 PORTANTI MULTIPLE

Fino ad ora abbiamo implementato la Modulazione di Frequenza facendouso di un oscillatore portante e di uno modulante. Questo modello, facendouso appropriato di inviluppi e del controllo dei rapporti di frequenza e diindice di modulazione può produrre timrbi molto complessi e interessanti,ma la FM può anche essere realizzata ampliando il campo degli attori ingioco. Ad esempio se con un un’unica onda modulante si modulano piùportanti lo spettro risultante sarà ancora più complesso.

Nella figura 155 un’unica modulante agisce su tre portanti delle quali sipuò impostare la frequenza ma che hanno un unico controllo dell’ampiezza.

Il modello della FM a portanti multiple diventa estremamente complessose si controllano le singole ampiezze delle portanti con inviluppi diversi.In figura 156 quattro envgen controllano rispettivamente le tre ampiezze

150

Page 152: Inventare il suono con PURE DATA - Altervista

dac~

*~

osc~

*~

pd indexenv

duration $1 dump r envindex

duration $1 dump r envamp

pd envamp

r dur

r dur r trig

r trig

200

s dur

loadbang

200

osc~ 55

*~ 55

+~ 80

pd seqz

START SPEED

150

Figure 151: la patch per l’FM semplice di Chowning

delle portanti e l’indice di modulazione.

151

Page 153: Inventare il suono con PURE DATA - Altervista

unpack f f

pack f f

outlet~

inlet

s envindex

inlet

prepend set

1 16 0 184 0

loadbang* 25

line~ 0 5

Figure 152: La subpatch per il riscalamento dei valori di envgen. Le ampiezzevengono scalate in un range fra 0 e 25. La parte destra della patchserve a memorizzare i dati disegnati in envgen. L’help dell’oggettospiega come salvare i dati.

line~

outlet~

inlet

inlet

prepend set

0.807143 17 0.95 15 1 15.0001 0.971429 7.99998 0.914286

3.99979 0.792857 18.0001 0.35 22.9999 0.142857 41.0006

0.0142857 58.9995 0

loadbang

s envamp

Figure 153: la subpatch envamp

13.4 MODULANTI MULTIPLE

Allo stesso modo si può aumentare il numero delle modulanti che agisconosu un’unica portante. Nella figura 157 tre oscillatori modulanti agisconosu un’unica portante.

Tale configurazione, come quella precedente, è solo una delle tantissimepossibili. Lasciamo il lettore sperimentare qualche soluzione diversa, con-

152

Page 154: Inventare il suono con PURE DATA - Altervista

b

metro 250

int 0 + 1

START

list-idx

sel 1

pack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

s trigmod 16

r trig

SPEED

150

Figure 154: la subpatch seqz

trollando indici di modulazione con envgen e aumentando il numero dellemodulanti (o delle portanti).

153

Page 155: Inventare il suono con PURE DATA - Altervista

pd carrier pd carrier pd carrier

pd mod

*~

line~

$1 20

dac~

250

frq

500

frq

750

frq

50

frq

90

index

Figure 155: FM con portanti multiple

154

Page 156: Inventare il suono con PURE DATA - Altervista

pd carrier pd carrier pd carrier

pd mod

dac~

250

frq

500

frq

750

frq

50

frq

*~ 0.3

*~ *~ *~

line~ line~ line~ line

bang

* 200

duration 1000

index

Figure 156: FM con portanti multiple con controllo di singole ampiezze e indicedi modulazione tramite envgen

155

Page 157: Inventare il suono con PURE DATA - Altervista

dac~

pd modulante

160

freq

230

indice

2.3

Deviazione

368

pd modulante

320

freq

400

indice

4

Deviazione

1280

pd modulante

40

freq

500

indice

5

Deviazione

200

+~

+~

pd uscita

pd portante

80

freq

Figure 157: FM con modulanti multiple

156

Page 158: Inventare il suono con PURE DATA - Altervista

14 I N T R O D U Z I O N E A L L A S I N T E S IG R A N U L A R E

14.1 TEORIA DELLA SINTESI GRANULARE

La sintesi granulare muove dal concetto che eventi sonori molto brevi,emessi in rapidissima successione, perdono la loro singolarità e costitu-iscono un continuum sonoro unitario.

Tali brevi segmenti sonori sono detti grani, o quanta sonori. Un flussocontinuo di grani costituisce un treno, mentre più treni contemporanei for-mano nuvole.

Il grano è l’unità elementare su cui si basa questa tecnica di sintesi. Esso èdotato di forma d’onda e inviluppo di ampiezza. Entrambi questi parametriassumono caratteri molto eterogenei: la forma d’onda può essere di qualunquetipo, mentre l’inviluppo, per ragioni computazionali, ha tipicamente, manon necessariamente, forma simmetrica (158).In figura 159 troviamo un segnale con forma d’onda sinusoidale invilup-pato da una forma a campana e da una forma trapezoidale. Il risultato sonodue grani simmetrici.Il flusso di grani costituisce i treni, il cui principale carattere distintivo è ladensità per secondo, che si misura in hertz. Tale densità definisce il periodo,cioè l’intervallo fra l’inizio di un grano e l’inizio del successivo. Il periodoè costituito dal grano e da una certa quantità di silenzio (s, fig. 160). Ladurata del periodo è inversamente proporzionale alla densità (fig. ??).

14.1.1 DIPENDENZA VS. INDIPENDENZA DEI PARAMETRI

Densità dei grani e durata del grano sono due parametri che possono es-sere o meno dipendenti l’uno dall’altro. Quando all’aumentare della den-sità dei grani diminuisce la durata del singolo grano densita e durata delgrano sono parametri dipendenti. In questo caso il rapporto di inversaproporzionalità rimane costante. Nel caso di indipendenza dei parametri

157

Page 159: Inventare il suono con PURE DATA - Altervista

!"#$%&'(

gpg

upg)(##

gpg

upg

*+",(-.&/"#

gpg

upg*+&"'01#"+

gpg

upg

21"&z0"1%%&"'

gpg

upg,1#%(

gpg

upg

Figure 158: Possibili inviluppi di un grano

invece all’aumentare della densità dei grani, diminuisce il periodo, ma ladurata del grano rimane costante. In tal caso il rapporto fra la durata delgrano e la porzione di silenzio cambia in favore della durata del granoe quando la densità dei grani raggiunge un certo limite e il periodo di-venta minore della durata del grano si ha un fenomeno di troncamento,che viene sublimato attraverso la tecnica dell’overlapping di cui ci occuper-emo fra poco.

In figura 161(a) con densità pari a 25 hz e durata del grano (gdur) di 20 mil-lisecondi, si ha un periodo di 40 millisecondi. Quando la densità aumentaa 50 hz, come in (b), periodo e gdur coincidono, quindi è il limite entro ilquale i grani ancora non si toccano. Quando la densità supera quella soglia,come nell’esempio (c), dove è di 70 hz, il periodo diventa minore di gdur esi realizza il troncamento: il grando inizia prima che il precedente sia ter-minato. Nell’ultima situazione, la (d), si applica un overlapping per evitare

158

Page 160: Inventare il suono con PURE DATA - Altervista

sine wave

-1,0

0,0

1,0

bell envelope

-1,0

0,0

1,0trap envelope

-1,0

0,0

1,0

resulting grain

-1,0

0,0

1,0resulting grain

-1,0

0,0

1,0

Figure 159: Sinusoide con inviluppi a campana e trapezoidale

il clicking determinato dal troncamento.

14.1.2 OVERLAPPING

L’overlapping consiste nella somma di treni diversi di grani. Nel momentoin cui il periodo è minore della durata del grano è necessario sdoppiare iltreno di grani in due o più treni in modo da evitare il troncamento deglistessi.

Nella situazione mostrata in figura 162, quando gdur è uguale a 50 mse gdens a 50 hz il periodo è pari a 20 ms. Questo significa che ogni 20

ms (parametro che chiameremo offset un nuovo grano fa la sua comparsa,quindi prima che un grano termini, altri due ne sono comparsi.

L’overlapping si realizza creando tre treni di grani, ognuno con la stessadensità, ma con un suo offset. Potremmo dire che ogni treno avrà una fase

159

Page 161: Inventare il suono con PURE DATA - Altervista

Figure 160: Periodo e densità del grano

diversa. Nel caso dell’immagine in figura 162 il primo treno avrà offsetzero, il secondo 20 ms, il terzo 40 ms. per ogni treno il periodo avrà duratadi 60 ms.

Il numero dei treni necessari per realizzare l’overlapping è un numero interodetto overlapping factor e si calcola dividendo innanzitutto 1000 (i millisec-ondi in un secondo) per la densità, operazione che ci dà l’offset, poi divi-dendo la durata del grano per l’offset appena ottenuto ed eventualmenteapprossimando all’intero superiore. In C scriveremmo la seguente fun-zione:

int overfactor (gdur, gdens) {

float offset, factor;

int overlapfactor;

offset = 1000.0 / gdens;

factor = gdur / offset;

160

Page 162: Inventare il suono con PURE DATA - Altervista

���������� �

����������

��������

���������� �

�����������

��������

���������� ������������

�����������

��������

���������� ��������������

�����������

��������

Figure 161: Troncamento e Overlapping

if (factor - (int)factor == 0.0) {

overlapfactor = int(factor);

else {

161

Page 163: Inventare il suono con PURE DATA - Altervista

gdens: 50hz

offset2: 40ms

offset1: 20ms

pdur: 60msgdur: 50ms

Figure 162: Overlapping dei treni

overlapfactor = int(factor)+1;

}

}

}

Nella figura 163 si vede la rappresentazione di una situazione con gdenspari a 50 hz, gdur di 45 ms, con relativo offset di 20 ms e overlapping factordi 3.

14.1.3 PARAMETRI E SPETTRI RISULTANTI

Data la complessità e la varietà delle possibilità realizzabili con la sintesigranulare, non è agevole descrivere gli spettri risultanti da questa tecnica.A parità di densità ad esempio, un cambio di durata del grano può cam-biare sensibilmente lo spettro del suono risultante. A parità di densità edurata del grano, un cambio dell’inviluppo del grano o della sua formad’onda può produrre risultati diversissimi. I parametri che contribuisconoalla formazione di uno spettro sono tantissimi e se si pensa che la densitàdei grani può essere un parametro variabile nel tempo le possiblità combi-natorie diventano praticamente infinite.

Consideriamo l’inviluppo del grano. Se l’inviluppo fosse l’unica formadisponibile, cioè se dentro l’inviluppo ci fosse segnale nullo, con densità

162

Page 164: Inventare il suono con PURE DATA - Altervista

����������� ���������

���������

���������

��������������������� ����������

Figure 163: Overlapping con overlapping factor pari a 3

superiore alla soglia udibile (oltre i 20hz circa) si produrrebbe già un suonoben distinguibile.

In sostanza, ogni parametro contribuisce alla formazione del suono, quindinell’implementazione della sintesi granulare vanno trattati con attenzionei seguenti parametri:

• durata del grano (gdur)

• inviluppo del grano (grainenv)

• densità del treno (gdens)

• rapporto gdens/gdur

• variabilità nel tempo di gdens e degli altri parametri

163

Page 165: Inventare il suono con PURE DATA - Altervista

14.1.4 IL DOMINIO DEL TEMPO E LA SINTESI GRANULARE

Nell’implementare la sintesi granulare è necessario fare delle scelte in mer-ito al tipo di sintesi che si vuole realizzare. Prima di tutto bisogna de-cidere se gdens e gdur saranno parametri dipendenti o indipendenti fra loro.Nel primo caso sarà necessario realizzare un algoritmo per l’overlapping, equesto vale per la maggiorparte dei tipi di sintesi granulare, nel secondocaso no, perché all’aumentare della frequenza, diminuirà la durata delgrano. Questo secondo caso è implementato grazie alla cosiddetta GrainletSynthesis.La seconda scelta iniziale da fare consiste nell’optare per una densità costantenel dominio del microtempo o per una densità variabile.

Il microtempo è quella dimensione nell’ambito della quale non c’è unapercezione dei cambiamenti temporali, ma timbrici. Se si sceglie di variarela durata del periodo nell’ambito di 10 ms, cioè se si applica una variazionealla densità comprsa fra [-5,+5]ms rispetto alla frequenza stabilita, non siavrà percezione di tale cambiamento se non nel dominio del timbro.

Timbro e tempo sono due parametri strettamente connessi. Come sappi-amo la frequenza è direttamente proporzionale al tempo, la sua unità dimisura (l’hertz) indica la velocità con cui un’onda compie il suo ciclo. Nat-uralmente a frequenza alta non abbiamo nessuna percezione temporale,ma una totale percezione timbrica. C’è però una zona confusa, quella com-presa fra i 20 e i 40 hz circa, dove la percezione si divide fra timbro etempo, perché gli eventi sono vissuti come ritmici e dove all’aumento dellafrequenza corrisponde la sensazione di una precipitazione ritmica, fino asuperare una certa soglia, oltre la quale il ritmo non viene più percepito.

Possiamo distinguere, generalizzando molto, tre tipi di tempo (fig. 164), dalpiù indistinguibile, il tempo microscopico, fino al tempo formale, che dal puntodi vista percettivo ha una dimensione fenomenica piuttosto che temporale,attiene quindi alla capacità del percettore di ricostruire soggettivamente lasequenza degli eventi.

Quando si realizza una sintesi granulare in cui nel microtempo la densitàdimane costante, si ha la sintesi granulare sincrona (Syncronous GranularSynthesis), mentre in presenza di densità variabile nel microtempo si ha lasintesi granulare asincrona Asyncronous Granular Synthesis. Nel primo caso

164

Page 166: Inventare il suono con PURE DATA - Altervista

tempomicroscopico dominio del timbro

tempomacroscopico dominio del tempo musicale

tempoformale dominio del tempo culturale

Figure 164: I domini del tempo

si parla a volte di Quasi-Syncronous Granular Synthesis perché la densitànon varia nel microtempo, ma può variare nel dominio del tempo percepi-bile. Se ad esempio implementiamo un algorimo dove decidiamo che ladensità passa da 50 a 100 hz in 10 secondi, si ha una percezione ben dis-tinta del cambiamento, ma nel microtempo possiamo dire che non ci sonocambiamenti.

Asyncronous Granular Synthesis

Grainlet Synthesis Glisson SynthesisSampled Sounds Granulation

Syncronous (Quasi-Syncronous) Granular Synthesis

Trainlet Synthesis

Pulsar Synthesis FOF Synthesis

Figure 165: Alcune tipologie di Sintesi Granulare

La complessità generata dalla combinazione dei parametri ha dato vita,storicamente, ha molti tipi di sintesi granulare. Da Gabor a Curtis Roads,passando per Xenakis, sono stati implementati diversi tipi di Granulazione,semplicemente agendo sull’idea generale di treni di grani combinati inmodi diversi. Nella figura 165 proponiamo uno schema riassuntivo di al-cuni dei più importanti tipi di sintesi granulare, collegando per sommi

165

Page 167: Inventare il suono con PURE DATA - Altervista

capi le famiglie tipiche e le relative derivazioni.

14.2 IMPLEMENTAZIONE IN PD

La prima cosa da fare è creare un algoritmo che generi le tabelle perl’inviluppo del grano. Usando come di consueto gli oggetti tabread (fig. ??).In questo esempio la patch genera quattro diverse forme per l’inviluppo:una campana, una forma trapezoidale, una mezza sinusoide e una curvaesponenziale.

14.3 UN ESEMPIO DI Trainlet Synthesis

Il primo tipo di sintesi granulare che implementiamo è una Trainlet Synthe-sis semplificata: gdur e gdens sono strettamente dipendenti l’una dall’altra,per l’esattezza inversamente proporzionali. Ne consegue che all’aumentaredella densità, diminuisce la durata del grano. Si tratta di una sintesi sin-crona con parametri dipendenti. Quello che si può pilotare in questa patchè:

• densità dei grani in hz

• frequenza all’interno del grano

• forma dell’inviluppo

La durata del grano gdur naturalmente non è impostabile perché dipendeda gdens.

Cerchiamo di capire cosa accade all’interno della patch (fig. 166). L’oggettotabread4∼ legge la tabella dell’inviluppo del grano. phasor∼ alla fre-quenza scelta moltiplica la sua uscita per 512, in modo da leggere i 512

indici della tabella. L’inviluppo viene moltiplicato per il segnale generatoda osc∼.Se si realizza questa semplice patch la cosa più interessante è verificare ladifferenza di timbro a parità di frquenza e densità, al variare della formadell’inviluppo.

166

Page 168: Inventare il suono con PURE DATA - Altervista

pd envelope

set bell

set halfsine

set trap

set expdec

*~

dac~

*~

$1 50

line~amp

phasor~ 4

30

densità

tabread4~ bell

pd frequenza

osc~ 440

*~ 512

r frq

expr 1000 / $f1

s graindur

r princfrq

467

frequenza

r amp

graindur

33.33

inviluppo

Figure 166: Implementazione della Trainlet Synthesis

14.4 LA Pulsar Synthesis

La Pulsar Synthesis prende il nome da un tipo di stella che emette impulsidi radiazioni a intervalli regolari. Questa tecnica di sintesi è relativamentesimile alla Trainlet Synthesis, ma si basa sul principio della variabilità delrapporto fra gdur e s all’interno del periodo. È quindi una tecnica sincronacon parametri dipendenti, anche se esitono implementazioni a parametriindipendenti.

L’elemento informativo più importante è il pulsaret, costituito da un peri-odo in rapporto inverso rispetto alla densità. Tale periodo contiene il granoe un frammento di silenzio. il rapporto fra queste due misure è detto DutyCycle.

L’algoritmo è simile a quello che abbiamo implementato per la TrainletSynthesis, ma in questo caso è importante che l’oggetto phasor∼ invia un

167

Page 169: Inventare il suono con PURE DATA - Altervista

segnale a tabread4∼ tale che ci sia dopo il grano una porzione di silenzio.Cerchiamo di spiegare meglio questo concetto. In presenza di una tabelladi 512 punti un phasor∼ con frequenza 1 con moltiplicazione del segnaleper 512 leggerà tutta la tabella in un secondo. Cosa accade se moltiplichi-amo il segnale in uscita da phasor∼ per 1024? In un secondo il suo segnalecreerà una rampa da 0 a 1023. Fino a quando il valore sarà minore di 512

leggerà i valori della tabella, oltre 512 leggerà valori pari all’ultimo indiceletto nella tabella (che andrà SEMPRE impostato a zero). Raddoppiandoquindi il valore dei punti da far leggere a phasor∼ si genera un Duty Cycledi 1:1, una parte di grano e una uguale di silenzio.

Figure 167: Duty Cycle con phasor∼

168

Page 170: Inventare il suono con PURE DATA - Altervista

In figura 167 viene mostrato un Duty Cycle di 1:3. phasor∼ viene molti-plicato per 2048, il quadruplo della tabella da leggere, quando il valore inuscita è minore di 0.25 leggerà tutti i valori della tabella, oltre 0.25 nonleggerà più nulla e tabread4∼ emetterà l’ultimo indice.

Nell’algoritmo è di fondamentale importanza implementare il calcolo delDuty Cycle. Poniamo di poter impostare il Duty Cycle con uno slider cheagisce nel range [0,1], dove 0.5 rappresenta il rapporto di 1:1, 0.25 il rap-porto di 1:3, 0.75 il rapporto 3:1 e così via. Basta dividere la dimensionedella tabella per la quantità impostata con lo slider per ottenere la giustamisura per cui moltiplicare l’uscita di phasor∼. In linguaggio di pd, costru-endo una piccola subpatch ci troveremo di fronte all’immagine di figura 168.

inlet ratio

expr 512 / $f1

$1 50

line~

outlet~ ratio

Figure 168: Calcolo del Duty Cycle

la patch per l’implementazione della Pulsar Synthesis appare nella figura169. A parte la scelta del Duty Cycle, per il resto è molto simile alla patchper la Trainlet Synthesis, quindi si può scegliere la densità dei grani e lafrequenza interna al grano, nonché il rapporto grano/silenzio.

Il comportamento spettrale della Pulsar Synthesis è tale che all’ aumentaredella quantità di s tende all’entropia, cioè ad uno spettro molto ampio conampiezze estremamente omogenee. Lo spettrogramma della figura 170 eil sonogramma di figura 171 ne sono prova visibile.

169

Page 171: Inventare il suono con PURE DATA - Altervista

set bell

set halfsine

set trap

set expdec

choose envelope shape

pd ratio

*~

*~

dac~

*~

$1 50

line~

phasor~ 4

0

frequenza

osc~ 880

0

0

tabread4~ trap

Figure 169: Implementazione della Pulsar Synthesis

14.5 Asyncronous Granular Synthesis

La Asyncronous Granular Synthesis si realizza intervenendo sulla densità deigrani in modo da renderla variabile nel contesto del tempo microscopico.

Per implementarla in modo semplice si può realizzare una subpatch inter-venga sulla frequenza del solito phasor∼ variandone la frequenza entro unrange di valori prestabilito (fig. 172).

L’inlet di sinistra riceve la frequenza di base mentre quello di destra l’indicedi variazione. Tale misura rappresenta, in percentuale, l’ambito entro ilquale deve avvenire la variazione. Se, per esempio, si stabilisce una vari-azione del 50% con frequenza base 16 hz, la variazione sarà di 8 hz, quindi

170

Page 172: Inventare il suono con PURE DATA - Altervista

Figure 170: Lo spettro risultante della Pulsar Synthesis

la densità sarà variabile nel range [12,20]hz.

Tipicamente, la sintesi granulare asincrona generalizza il concetto di vari-azione nel dominio del microtempo. Non solo la densità dei grani può esserevariabile, ma anche tutti gli altri parametri. Nella nostra patch completa sipossono impostare i seguenti parametri, con relativo indice di variazione:

• densità dei grani

• frequenza interna al grano

• ampiezza

• distribuzione sul fronte stereo

In figura 173 osserviamo la patch nella sua forma finale.

171

Page 173: Inventare il suono con PURE DATA - Altervista

Time (s)0 11.420

7500

Frequency (Hz)

Figure 171: Il sonogramma risultante della Pulsar Synthesis

+~

sig~ *~ 0

expr ($f1 * $f2) / 200

*~ 512

inlet gdens inlet %

outlet~ gdens

phasor~

noish~

Figure 172: Variazione di gdens

La patch contiene due grandi subpatch, una per la gestione di tutti i parametridei grani, l’altra per la gestione dell’ampiezza e la distribuzione sul fronte

172

Page 174: Inventare il suono con PURE DATA - Altervista

*~

dac~

*~ *~

throw~ rev1

pd envelope

throw~ rev2

%_ampvar_(0-100)

amp_(0-1)

stereospread

48.48

0.505

1

gdens

34

gdensvar_(0-100)

frqvar_(0-100)

frq

475

30.30

20.20

bell

trap

halfsineexpdec

ampenv

waves

sine

rect

trisaw

pd reverb

1 1

Figure 173: La patch che implementa la sintesi granulare asincrona

stereo. In basso un’ulteriore subpatch permette di impostare un riverbero.

La subpatch deputata alla gestione dei grani ha come centro vitale unoggetto phasor∼ (fig. 174)che riceve la frequenza, variata com l’implementazioneche abbiamo visto in figura 172. Analogamente la frequenza interna all’oscillatoreviene impostata nello stesso modo e l’indice di variazione può essere rego-lato tramite una slider. Questa subpatch si occupa anche di permettere laselezione dell’inviluppo del grano e della forma d’onda interna al grano.In questo secondo caso si tratta di semplici tabelle che contengono la formad’onda (fig. 175). L’uscita di phasor∼ infine, invia il suo segnale attraversothrow∼ in modo che l’altra subpatch possa riceverlo ed usarlo come trigger.

173

Page 175: Inventare il suono con PURE DATA - Altervista

+~

sig~ *~ 0

expr ($f1 * $f2) / 200

*~ 512

phasor~

noish~

gdens

34

gdensvar_(0-100)

tabread4~ bell

+~

sig~

expr ($f1 * $f2) / 200

samphold~

noise~

*~ 0

frqvar_(0-100)

frq

475

*~

outlet~ throw~ phas

30.30

20.20

sel 0 1 2 3

bell

trap

halfsineexpdec

ampenv

r waveform

set bell

set trap

set halfsine

set expdec

pd waves

set osc

set rect

set tri

set saw

waves

sine

rect

trisaw

sel 0 1 2 3

r waves

Figure 174: La subpatch per la gestione dei grani

L’altra subpatch riceve con chatch∼ il segnale di phasor∼ dell’altra sub-patch. Due oggetti samphold∼ servono l’uno a produrre la variazione diampiezza, l’altro la distribuzione stereo (fig. 176). Quest’ultima partedell’algoritmo, in basso a destra, funziona in modo tale da produrre adogni campionamento di samphold∼ un valore casuale compreso fra [-1,1].Tale valore, in uscita, viene moltiplicato per l’indice del fronte stereo (com-

174

Page 176: Inventare il suono con PURE DATA - Altervista

inlet~

outlet~

table osc 515

table rect 515

table tri 515

table saw 515 ;osc sinesum 515 1

;rect sinesum 515 1 0 0.333333 0 0.2 0 0.142857 0 0.111111 00.0909091 0 0.0769231 0 0.0666667 0;rect normalize 1;

;tri sinesum 515 1 0 -0.111111 0 0.04 0 -0.0204082 00.0123457 0 -0.00826446 0 0.00591716 0 -0.00444444;tri normalize 1

;saw sinesum 515 -1 -0.5 -0.33 -0.25 -0.2 -0.16 -0.142-0.125 -0.111 -0.1 -0.09 -0.083 -0.076 -0.071 -0.066-0.0625;saw normalize 1

inlet

tabosc4~ osc

loadbang

Figure 175: Le tabelle per la forma d’onda interna al grano

preso fra [0,1]). Questo significa che se l’indice è impostato a 0 produrràvalori nulli, se impostato a 1 manterrà i valori originali [-1,1]. L’oggettosuccessivo riscala tali valori nel range [0,1] e successivamente tali valorivengono distribuiti fra canale destro e sinistro. Se l’indice di variazionestereo è impostato a zero, i valori in uscita saranno sempre pari a 0.5,quindi distribuiti equamente fra canale destro e sinistro. Se invece l’indiceè 1 i valori si muoveranno iberamente fra destra e sinistra.

14.5.1 vline∼

Prima di proseguire con la disamina di alcuni metodi di implementazionedella sintesi granulare, esaminiamo un oggetto molto potente che ci saràutile fra poco. Si tratta di vline∼, che produce rampe come line∼ mache è in grado di agire a livello di campioni, quindi in modo più preciso erapido di quest’ultimo. L’oggetto accetta in entrata terne di valori: target,tempo di raggiungimento e delay, dove target è il valore da raggiungere, tempodi raggiungimento è il tempo in millisecondi per raggiungerlo e delay è ilritardo con cui iniziare la rampa rispetto all’attivazione. L’oggetto puòaccettare anche target multipli, con gli altri argomenti relativi separandocon la virgola le terne di valori. Se volessimo creare un inviluppo comequello mostrato nella figura 177 dovremmo ragionare in questo modo:

• Vai da 0 a 1 in 50 millisecondi iniziando subito (0, 1 50 0)

175

Page 177: Inventare il suono con PURE DATA - Altervista

samphold~

noise~

abs~%_ampvar_(0-100)

expr~ 1 - $v1

*~ 0

/ 100

*~

amp_(0-1)

$1 20

line~

outlet~ amp

samphold~

noise~

expr~ 1 - $v1

sqrt~

sqrt~

*~ 0

expr~ ($v1 * 0.5) + 0.5

outlet~ sx outlet~ dx

stereospread

catch~ phas

48.48

0.505

1

Figure 176: La subpatch per ampiezza e panning

• Resta a 1 per 100 millisecondi a partire dal millisecondo 50 (1 100 50)

• Vai a 0 in 150 millisecondi iniziano al millesecondo 150.

Nella lingua di pd, con vline∼ dovremmo implementare come in figura178.

14.5.2 RENDERE INDIPENDENTE IL PARAMETRO gdur

Anche nell’implementazione precedente la durata del grano è inversamenteproporzionale alla densità dei grani. Per far si che anche tali parametri

176

Page 178: Inventare il suono con PURE DATA - Altervista

�����������������

� �� ��� ��� ��� ��� ���

Figure 177: Un inviluppo da generare con vline∼

vline~

0, 1 50 0, 1 100 50, 0 150 150

Figure 178: L’inviluppo della figura 177 realizzato con vline∼

siano indipendenti è necessario svinvolarli l’uno dall’altro in modo che sipossa impostare gdur e renderla fissa al variare della densità.

Per implementare questo algoritmo è necessario fare uso di vline∼ pergenerale una rampa che legga la tabella dell’inviluppo e controllarla conun oggetto che sia indipendente dal trigger principale, cioè il phasor∼ checontrolla la densità dei grani.

Il limite di questa implementazione risiede nel fatto che vline∼ viene at-tivato tramite un bang e non tramite segnale, quindi a velocità molto altepotrebbe peccare in precisione. Per quello che è stato fatto fino ad ora,sappiamo che l’oggetto che produce bang a intervalli prestabiliti è metro,che potrebbe rappresentare una buona soluzione, ma non ottimale perchéquello che ci occorre veramente è la possibilità di emettere un bang allafrequenza del phasor∼ che controlla la densità dei grani, che, come sappi-

177

Page 179: Inventare il suono con PURE DATA - Altervista

amo, è variabile nell’ambito del microtempo.

Per implementare tale sistema si può usare l’oggetto edge∼, della libreriacyclone, che clona gli oggetti di MaxMSP. Questo oggetto emette un bangdall’outlet sinistro ogni volta che il segnale in entrata passa da zero a non-zero e un bang dal destro quando il segnale passa da non-zero a zero. L’helpdell’oggetto mostra un esempio di utilizzo.

In questo modo un unico oggetto phasor∼ controlla la densità dei grani eallo stesso tempo innesca vline∼ per la lettura della tabella dell’inviluppodel grano. Come nella patch della sezione precedente lo stesso oggetto con-trollerà la distribuzione stereo e l’ampiezza dei singoli grani. La figura 179

riassume l’algoritmo della patch.

phasor~

grain density(gdens)

grain triggering(edge~)

amplitudevariation

(samphold~)

stereo spreading(samphold~)

grain duration(vline~/tabread~)

Figure 179: Schema generale dell’algoritmo per la gestione indipendente deiparametri

La subpatch per l’innesco di vline∼ tramite edge∼ è mostrata in figura 180.L’oggetto expr∼ riceve il segnale e lo processa in modo che restituisca 1

se il segnale è minore di 0.5, zero se maggiore. edge∼ produrrà un banga sinistra quando il segnale passerà da zero a non-zero, cioè ogni voltache phasor∼ conclude un ciclo e ricominci la sua rampa da zero. Il bangemesso da edge∼ innesca l’oggetto float che restituisce la durata del granoe attiva l’oggetto vline∼ in modo che quest’ultimo crei la rampa da 0 a 1

in 20 ms (il tempo di default). Naturalmente una number box consente di

178

Page 180: Inventare il suono con PURE DATA - Altervista

cambiare a piacimento la durata del grano.

phasor~ 8

expr~ $v1 < 0.5

edge~

vline~

0, 1 $1

f 20

tabread4~ bell

0

*~ 512

Figure 180: La subpatch per l’innesco di vline∼

Una volta resi indipendenti densità e durata dei grani c’è il rischio che adensità alta avvenga un troncamento fra i grani, quindi è necessario im-plementare un algoritmo per l’overlapping. La soluzione per questa patch èsemplice, anche se computazionalmente dispendiosa: invece di attivare unnuovo treno di grani quando il fattore do overlapping lo richieda, creiamopiù treni a prescindere e tramite un contatore inneschiamo un grano allavolta per ogni treno.

La figura 181 mostra un esempio di questo procedimento, con tre treni.Sopra l’overlapping factor non produce sovrapposizione di grani, in bassoil fattore 2 provoca sovrapposizione di due grani. In entrambi i casi i tretreni sono attivi a turno.In pd l’algoritmo per implementare tre treni come nella figura precedenteè mostrato in figura 182. Un contatore invia il suo conteggio all’oggetto %che calcola il modulo in modo da restituire il conto da 0 a 2, sel indirizza ibang ai tre treni, zero attiva il primo treno, 1 il secondo, 2 il terzo.

179

Page 181: Inventare il suono con PURE DATA - Altervista

overlapping factor: 1

train 2

train 1

train 0

overlapping factor: 2

train 2

train 1

train 0

Figure 181: Overlapping con tre treni

Naturalmente questo procedimento può essere realizzato anche per atti-vare molti più treni. I limiti sono determinati dalla capacità di calcolo delcomputer e dal fatto che in pd i dati di controllo sono meno affidabili deisegnali, che hanno sempre la precedenza.

A questo punto la patch per la sintesi granulare asincrona con parametri in-dipendenti può essere implementata. La figura 183 mostra l’interfaccia peril controllo dei parametri. Nelle properties di ogni GUI e di ogni number boxsono impostati, tramite send-symbol, i nomi degli oggetti che riceveranno irelativi dati.L’interno della patch è mostrato in figura 184. I treni attivi sono otto, per ilresto la patch è uguale a quella implementata per la sintesi asincrona conparametri dipendenti (sez. 14.5) quindi lasciamo al lettore il compito dianalizzarla. In figura 185 è mostrato l’interno della subpatch envgen dove

180

Page 182: Inventare il suono con PURE DATA - Altervista

tabread4~ bell

vline~

f 20

0, 1 $1

*~ 512

phasor~

expr~ $v1 < 0.5

edge~

f + 1

% 3

sel 0 1 2

tabread4~ bell

vline~

f 20

0, 1 $1

*~ 512

tabread4~ bell

vline~

f 20

0, 1 $1

*~ 512

0

gdur

Figure 182: Overlapping con tre treni

gdens

0

gdur

0

frq

0

gdensvar_(0-100)

gdensvar_(0-100)

waveform

osc

rect

trisaw

envform

bell

trap

halfsine

expdec

amp_(0-1)

ampvar_(0-100)

amp_(0-1)

gain

feedback

Reverb

Figure 183: Interfaccia per il controllo dell’Asyncronous Granular Synthesis conparametri indipendenti

abbiamo incapsulato ogni generatore di treni.

181

Page 183: Inventare il suono con PURE DATA - Altervista

pd envelope

phasor~

expr~ $v1 < 0.5

edge~

f + 1

+~

sig~

*~ 0

expr ($f1 * $f2) / 200noish~

*~ *~ *~ *~

dac~

*~ 0.25

+~

sig~

expr ($f1 * $f2) / 200

samphold~

noise~

*~ 0

pd waves

set osc

set rect

set tri

set saw

sel 0 1 2 3

r waves

set bell

set trap

set halfsine

set expdec

throw~ phas

*~ *~

*~

throw~ rev1 throw~ rev2

pd envgen

pd envgen

pd envgen

pd envgen

pd envgen

pd envgen

pd envgen

pd envgen

% 8

sel 0 1 2 3 4 5 6 7

*~ *~ *~ *~

s envform

r gdens

t f f f

r gdensvar

r frqvarr frq

r eform

sel 0 1 2 3

samphold~

noise~

abs~

expr~ 1 - $v1

*~ 0

/ 100

*~

$1 20

line~

samphold~

noise~

expr~ 1 - $v1

sqrt~

sqrt~

*~ 0

expr~ ($v1 * 0.5) + 0.5

r amp

r ampvar

r stereospread

rev3~ 100 90 3000 20

catch~ rev1

catch~ rev2

r gain r feedback

Figure 184: La patch finale

14.6 GRANULAZIONE CON SUONI CAMPIONATI

L’ultimo tipo di sintesi granulare prevede l’uso di suoni campionati per laforma d’onda interna al grano. Come già detto in precedenza infatti, laforma d’onda interna ad un grano può essere di qualunque tipo e nullavieta di usare come sorgente un file audio o il segnale di ingresso di unmicrofono.

Come negli altri tipi di implementazione, anche in questo caso le scelte dafare prima di realizzare l’algoritmo sono molte e riguardano prima di tutto

182

Page 184: Inventare il suono con PURE DATA - Altervista

tabread4~ bell

vline~

f 20

0, 1 $1

*~ 512

r gdur

outlet~ env

inlet bang

r envform

Figure 185: La subpatch per la generazione di un treno di grani

la scelta della sorgente e poi la modalità di scansione della stessa. In figura186 è mostrato uno schema di tali possibilità.

audio source

adc~ audio file

normalplayback

manipulatedplayback

forward

backward

random

variablespeed

Figure 186: Tipi di utilizzo di audio campionato

La sintesi granulare sui campioni permette non solo di generare timbri in-teressanti, ma anche di processare i campioni stessi per il time stretchinge il pitch shifting. L’argomento richiederebbe uno spazio ben più ampio

183

Page 185: Inventare il suono con PURE DATA - Altervista

rispetto a quello che possiamo dedicargli in questo testo, ma nel prossimocapitolo proporremo alcuni esempi di granulazione applicati a suoni cam-pionati.

184

Page 186: Inventare il suono con PURE DATA - Altervista

15 L AV O R A R E C O N S O R G E N T IA U D I O E S T E R N E

15.1 SINTESI VS. CAMPIONI

Concettualmente pd lavora nel dominio del suono intervenendo su tuttele fasi della costruzione e della gestione dell’audio. Fino ad ora ci siamooccupati di suoni creati dentro pd stesso, abbiamo capito come crearli, ge-stirli, manipolarli, senza mai uscire dal sistema. Abbiamo imparato adusare i generatori di segnale principali (osc∼, phasor∼, noise∼ e altri)e da quelli abbiamo imparato a crearne di nuovi. Grazie alle tabelle ea tabosc4∼ etabread4∼ abbiamo acquisito le capacità per creare pratica-mente qualunque tipo di forma d’onda.

La sintesi audio però è solo una parte di quello che pd ci permette difare. Ci sono tutta una serie di oggetti e procedure che permettono dielaborare sorgenti sonore esterne. L’antica distanza fra suoni di sintesi eMusique Concrète in pd è definitivamente superata non solo in termini diconvivenza dei due mondi, ma perché il suono campionato può diventarefonte di produzione di suoni sintetici.

15.2 ALCUNI OGGETTI UTILI

Il primo oggetti che esaminiamo in questa sezione è adc∼, che è l’alterego del ben noto dac∼. Quest’ultimo si occupa di convertire il segnale dalformato numerico a quello analogico, mentre il primo converte il segnaleanalogico in segnale numerico in modo che possa essere utilizzato in pd (oin qualunque altra applicazione digitale). Sostanzialmente adc∼ prende ilsuono in entrata della scheda audio e lo campiona al samplerate scelto (tipi-camente 44100 campioni al secondo) rendendolo disponibile a pd per l’uso.

185

Page 187: Inventare il suono con PURE DATA - Altervista

Una volta dentro il segnale può essere trattato come un qualunque seg-nale numerico. Dopo essere stato processato, elaborato, manipolato oquant’altro può essere riconvertito tramite dac∼ e rimandato alla schedaaudio.

L’oggetto accetta anche degli argomenti numerici, che definiscono l’indicedelle eventuali entrate. Ad esempio adc∼ 1 2 3 4 5 6 7 8 istanzia unadc∼ con otto canali in entrata. La stessa cosa può essere fatta con dac∼.Ovviamente la scheda deve permettere l’entrata e l’uscita del numero dicanali desiderato. Se la scheda permette solo quattro canali, gli altri quat-tro resteranno inattivi.

La figura 187 mostra una situazione in cui il suono entra in pd con adc∼ed esce con dac∼ (una patch assolutamente inutile, ma esplicativa).

adc~

dac~

adc~ 1 2 3 4 5 6 7 8

dac~ 1 2 3 4 5 6 7 8

Figure 187: adc∼ e dac∼ in azione

Il secondo oggetto in questione è openpanel, che insieme a soundfiler con-sente di aprire un file audio e inserirlo in una tabella per essere utilizzatoin vari modi. openpanel alla ricezione di un bang apre una finestra di di-alogo da cui è possibile scegliere un file situato nell’hardisk del computer.soundfiler, tramite il messagio read, consente di convertire un file binario inuna lista di numeri in virgola mobile e inserirli in una tabella. Al contrario,tramite il messaggio write fa esattamente il contrario: converte in binarioil contenuto di una tabella. La figura 188 mostra una patch in cui un fileaudio viene messo in un’array. Tramite openpanel si sceglie il file da aprire esoundfiler lo inseriamo nell’array. L’argomento -resize adatta la dimensionedella tabella tab-file a quella del file stesso. Oltretutto soundfiler emette dalsuo outlet la dimensione in campioni del file importato.

186

Page 188: Inventare il suono con PURE DATA - Altervista

openpanel

soundfiler

read -resize $1 tab-file

60480

tab-file

Figure 188: Importazione di un file audio in una tabella

Come sempre i file di help dei due oggetti sono utili per una conoscenzacompleta di tutti i messaggi che gli oggetti accettano.

Gli ultimi due oggetti di questa sezione sono readsf∼ e writesf∼. Ilprimo consente di aprire un file audio e di eseguirlo, il secondo consentedi registrare il flusso audio di pd in un file audio. La figura 189 esemplifical’uso di entrambi. Al contrario di openpanel, savepanel consente di creare unfile su cui si andrà a scrivere. Per utilizzare writesf∼ è necessario ine ffettiprima creare il file vuoto su cui si scriverà il segnale, poi si può avviare laregistrazione tramite il messaggio start (oppure 1, in alternativa. stop in-terromperà la scrittura (zero in alternativa). Analogamente readsf∼ avviail playback del file con start (1), lo interrompe con stop (zero). Entrambigli oggetti accettano alcuni argomenti, il primo dei quali è il numero deicanali.

15.3 UN SEMPLICE random slicer

Già con la conoscenza di questi pochi oggetti è possibile fare cose interes-santi con i file audio. In questa sezione implementiamo un random slicer,cioè un algoritmo che prende un file audio, tipicamente un pattern di batte-

187

Page 189: Inventare il suono con PURE DATA - Altervista

readsf~ 2

openpanel

open $1

writesf~ 2

start

stop

start

stop

savepanel

open $1

Figure 189: readsf∼ e writesf∼

ria e lo fa a fette (slice significa fetta per l’appunto) e lo riesegue cambiandocasualmente l’ordine di esecuzione delle fette. È una tecnica molto usatain certa dance music per rendere meno ripetitivo un pattern ritmico.

Prima di procedere è necessario preparare o procurarsi un file audio chesia loopabile, cioè che funzioni bene nel momento in cui venga eseguito informa circolare, cioè quando giunto al termine ricominci da capo senzasoluzione di continuità. La rete offre gratuitamente tantissimi pattern dibatteria scaricabili gratuitamente 1.

Tipicamente uno slicer divide il pattern per una potenza di due perché ilsistema ritmico della tradizione occidentale tendenzialmente tende ad es-sere binario, soprattutto in circostanze di questo tipo. Quindi prima ditutto implementeremo un sistema per scegliere in quante slices dividere ilpattern.

Come si vede in figura 190 l’oggetto soundfiler restituisce la dimensione incampioni del file audio. Tale dimensione viene divisa per 44.1 per avernela dimensione in millisecondi. Questa misura viene divisa per il numerodi slices che si scelgono con la GUI (16 di default) per avere la durata inmillisecondi di una singola fetta. D’altra parte la dimensione in campi-

1 Si veda per sesmpio il sito http://www.freesound.org

188

Page 190: Inventare il suono con PURE DATA - Altervista

oni viene divisa per il numero delle fette per avere la dimensione in cam-pioni di ogni fetta. I due valori ottenuti saranno gli unici necessari perl’implementazione dell’algoritmo.

openpanel

soundfiler

read -resize $1 drumfile

f

/ 44.1

/ 16 / 16

pow 4

2

t b

t b b f

inlet div

inlet bang

s slicenum

s msdur s sampdur

Figure 190: Scelta del numero di slices

In figura 191 un oggetto metro controlla l’emissione ordinata delle slices.L’algoritmo non fa altro che riprodurre le fette una alla volta, eseguendo ilfile come è in origine.Ogni fetta è attivata tramite vline∼ che legge la porzione di tabella in-teressata alla velocità di msdur, cioè alla velocità della durata di una slice.All’uscita di vline∼ il segnale viene prima moltiplicato per la durata diuna fetta in campioni, poi viene sommato a questo segnale l’offset di let-tura. Il contatore infatti conta da 0 a 15, cioè le slice da leggere, il risultatoè moltiplicato per la durata della slice in campioni e il tutto viene aggiuntoal segnale di vline∼.

Una volta costruito il motore che gestisce l’esecuzione delle slices al giustotempo si può aggiungere la parte di algoritmo che si occupa della sceltadelle fette da eseguire. Nell’esempio precedente infatti la scelta è quella dieseguire tutte le slice nell’ordine, il che ha poco senso perché si ha una ripe-tizione pedissequa del pattern sempre uguale. L’intervento più semplice dafare è quello di sostituire al contatore un oggetto random che scelga casual-

189

Page 191: Inventare il suono con PURE DATA - Altervista

tabread4~ drumfile

dac~

*~

line~

$1 20

+~

vline~

start

t b b

f + 1

% 16

0, 1 $1

f

s cursor

*~ *

pd slicersettings

choose_division

1

1/2

1/4

1/8

1/16

1/32bang

r msdur

metro

r slicenum

r sampdur

open a file

drumfile

Figure 191: Slicer che riproduce il pattern in ordine

mente la slice da eseguire. Il risultato sarebbe sicuramente più interessante,ma si perderebbero i punti di riferimento perché presumibilmente i colpiaccentati e quelli non accentati della batteria sarebbero distribuiti troppocasualmente.

Un risultato sicuramente migliore è quello di far eseguire le prime 8 slicesin ordine, e di scegliere casualmente fra le restanti 8 quelle da eseguire. Lafigura 192 mostra la parte di algoritmo da sostituire per realizzare le duepossibilità appena descritte. Nel secondo caso l’oggetto expr esegue un ifsul numero in entrata: se minore di 8 (quindi tutte le slices da 0 a 7) le fauscire così come sono entrate, se maggiore di 8 emette un numero casualecompreso fra 8 e 15.In quella porzione di algoritmo si può fare qualunque cosa che renda inter-essante l’esecuzione attraverso scelte più o meno randomiche. Ad esempiosi può fare in modo che le slices pari restino invariate nell’ordine di ese-

190

Page 192: Inventare il suono con PURE DATA - Altervista

tabread4~ drumfile

dac~

*~

line~

$1 20

+~

vline~

start

t b b

f + 1

% 16

0, 1 $1

f

s cursor

*~ *

r msdur

metro

r slicenum

r sampdur

random 16

f + 1

% 16

r slicenum

expr if($f1 < 8, $f1, random(8, 16))

sezione da sostituire

------> ------>

Figure 192: Slicer che riproduce il pattern in ordine

cuzione e le dispari siano casuali, oppure si può costruire un dispositivoche effettua un freezing, cioè che blocca la manipolazione delle slices ripe-tendo l’esecuzione della slice attiva al momento del freezing stesso. Si puòanche decidere di eseguire alcune slices al contrario, magari scegliendo laprobabilità con cui una fetta venga eseguita in questo modo.

La figura 193 mostra il random slicer con un freezer e con la possibilità diimpostare la probabilità di slices eseguite al contrario.L’oggetto expr lascia passare le prime 4 fette e le fette dall’ottava all’undicesimanell’ordine giusto, mentre randomizza tutte le altre. spigot invece gestisceil freezing filtrando le comunicazioni. Infine random in combinazione con <e sel gestisce la probabilità di reversing.

15.3.1 CONTROLLARE LO slicer VIA SEGNALE

Implementando il random slicer abbiamo usato un oggetto metro per control-lare il timing dell’emissione delle slices. Naturalmente la stessa cosa puòessere realizzata controllando il tutto via segnale. Per la verità lo stessoalgoritmo della patch della sezione precedente può essere realizzato concontrollo via segnale. Invece di usare metro come trigger principale puòessere usato phasor∼.

191

Page 193: Inventare il suono con PURE DATA - Altervista

tabread4~ drumfile

dac~

*~

line~

$1 20

+~

vline~

start

f

s cursor

*~ *

pd slicersettings

choose_division

1

1/2

1/4

1/8

1/16

1/32bang

r msdur

metro

r sampdur

open a file

f + 1

% 16

r slicenum

t b b

random 100

$2, $3 $1

pack 0 0 0

sel 1 0

< 90

freeze!expr 1 - $i1

0 1 1 0

unpack 0 0

spigot 1

expr if($f1 < 4 || ($f1 > 7 && $f1 < 12), $f1, random(0, 8))

r probrev

expr 100 - $i1

5 prob_reversing

drumfile

Figure 193: Il random slicer con freeezer e probabilità di reversing

La frequenza di phasor∼ sarà quella necessaria a compiere una rampa da0 a 1 nel tempo corrispondente alla durata complessiva del pattern ritmico.Poi tale rampa dovrà essere manipolata in modo tale da innescare le slicesin base al numero delle stesse. Per questo useremo l’oggetto wrap∼ checostringe un segnale in entrata a restare nel range [0,1]. L’oggetto, esat-tamente, restituisce il segnale in entratta sottratto dall’intero immediata-mente superiore al segnale stesso. La figura 194 mostra un esempio delsuo funzionamento. il segnale generato da un phasor∼ viene moltiplicatoper 4, generando quindi una rampa che va da 0 a 4. wrap∼ compie la suaoperazione generando 4 rampe da 0 a 1.

La prossima figura (195) mostra come si possa leggere una tabella a fram-menti tramite phasor∼, wrap∼ e samphold∼.

192

Page 194: Inventare il suono con PURE DATA - Altervista

phasor~(x)

0,0

1,0

2,0

3,0

4,0

*~ 4

0,0

1,0

2,0

3,0

4,0

wrap~

0,0

1,0

2,0

3,0

4,0

Figure 194: L’oggetto wrap∼

L’algoritmo necessita di qualche spiegazione. Supponiamo di avere unatabella con un file audio della durata di un secondo esatto, quindi dellalunghezza di 44100 campioni e supponiamo di voler dividere il file in 4

slices. L’oggetto phasor∼ avrà frequenza 1. Ciò significa che in un secondogenera una rampa che va da 0 a 1. Si moltiplica il segnale per 4 (cioè peril numero di slices che abbiamo scelto), quindi la rampa generata in un sec-ondo andrà da 0 a 4. wrap∼ genera quatro rampe da 0 a 1 al tempo totaledi un secondo. Ogni rampa quindi durerà 1/4 di secondo. Il segnale inuscita viene moltiplicato per la durata di una slice in campioni, cioè 1/4 di44100 nel nostro caso. Escludendo tutto il resto della patch in questo modoin un secondo vengono letti 4 volte i primi 11025 campioni della tabella.Se terminassimo qui il nostro algoritmo e se i primi 11025 campioni dellatabella contenessero il suono della cassa di una batteria si udirebbe unrullo continuo di questa cassa.

193

Page 195: Inventare il suono con PURE DATA - Altervista

wrap~

*~ 4

+~

samphold~

tabread4~ drum

table drum 44100

phasor~ 1

*~ 11025

*~ 11025

Figure 195: Leggere una tabella affettata via segnale

La parte destra della patch invece permette di proseguire nella lettura dellatabella oltre i primi 11025 campioni. L’oggetto samphold∼ campiona il seg-nale che arriva nell’inlet di sinistra ogni volta che il segnale di destra tornaa zero. Nel nostro caso ogni volta che la rampa generata da wrap∼ torna azero il segnale in uscita dal moltiplicatore viene fatto uscire da samphold∼.In pratica quando wrap∼ genera la prima delle 4 rampe samphold∼ faràuscire il primo campione della rampa moltiplicata, cioè zero, con la sec-onda rampa di wrap∼ uscirà 1, con la terza 2 e così via. Usciranno cosìin ordine il numero delle slices, che vengono immediatamente moltiplicateper la durata in campioni. Rappresentano un offset che viene sommato alprimo segnale.

Con questo principio è possibile costruire un random slicer controllato viasegnale. Attraverso expr∼ si possono anche compiere varie operazioni sulsegnale in modo da manipolare la scelta delle fette come nell’algoritmodella sezione precedente.

Le prossime immagini mostrano un algoritmo simile a quello, con possibitàdi freezing, reversing e rolling cioè ripetizione rapidissima di una slice. Perquest’ultimo caso basta raddoppiare (o quadruplicare) la velocità di lettura

194

Page 196: Inventare il suono con PURE DATA - Altervista

ed eseguire per un po’ la stessa fetta. Le immagini seguenti mostranol’algoritmo generale (fig. 196), e la varie subpatches (figg. 197,198 e 199).

tabread4~ drumfile

dac~

*~

line~

$1 20

AMPLITUDE

pd slicersettings

choose_division

1

1/2

1/4

1/8

1/16

1/32bang

wrap~

samphold~

*~

expr 1 - $i1

+~

samphold~

expr~ random(0, 100)

*~

*~

sig~ 16

snapshot~

edge~

expr~ $v1 < 0.5

s cursor

random 100

expr if($f1 < $f2, 1, 0)

pd freezerep

freeze!expr~ if($v1 < $f2, -1, 1)

r sampdur

r phasordur

r slicenum

expr~ if($v1 < (($f2 / 2) - 1), $v1, random($f2 / 2, $f2))

*~

r sampdur

*~

s freeze

r freeze

pd rollphasor~

choose a file

0rep_prob

10rev_prob

drumfile

Figure 196: Il random slicer controllato da phasor∼

15.4 GRANULAZIONE SU FILES AUDIO

Una volta che un file audio è stato caricato in una tabella può essere ma-nipolato, come abbiamo visto, in modi diversi. Uno dei comportamenti piùvisibili è determinato dal cambiamento della velocità di lettura dei campi-oni. Aumentare la velocità di lettura comporta un aumento della frequenzadel file e una diminuzione del tempo di esecuzione, viceversa, diminuire la

195

Page 197: Inventare il suono con PURE DATA - Altervista

openpanel

soundfiler

read -resize $1 drumfile

f

/ 44.1

/ 16

pow 4

2

t b

t b b f

inlet div

inlet bang

s slicenum

s sampdur

expr 1000 / $f1

s phasordur

Figure 197: la subpatch che gestisce la scelta del file e il numero delle slices in cuisuddividerlo

outlet

== 1

+ 1

* 16

r sampdur

expr $f2 / $f1

r slicenum

r freeze

Figure 198: La subpatch per impostare la velocità di lettura della tabella

velocità farà diminuire la frequenza e aumentare la durata dell’esecuzione.

Se leggiamo un file di un secondo in mezzo secondo, quindi con un fattoredi moltiplicazione 0.5, dimezzeremo il tempo ti esecuzione e trasporremole frequenze esattamente del doppio. La patch in figura 200 mostra un al-goritmo che permette di cambiare la frequenza del phasor∼ che legge latabella. All’aumentare della frequenza si osserva una trasposizione della

196

Page 198: Inventare il suono con PURE DATA - Altervista

* 100

f spigot

outlet rep

t b

t f f b

inlet freeztog inlet repprob

Figure 199: La subpatch per il freezing e il rolling

frequenza del campione.

phasor~ 1

4.7

expr $f1 / 10 - 5

openpanel

soundfiler

read -resize $1 audiofile

open_file

f

t b f

tabread~ audiofile

dac~

*~

lop~ 1

sig~

AMPLITUDE

*~ expr 1000 / ($f1 / 44.1)

s origdur

r origdur

SPEED(-5/5)

audiofile

Figure 200: Modifica della durata e della frequenza

197

Page 199: Inventare il suono con PURE DATA - Altervista

Certamente la cosa più interessante è cercare di svincolare i due compor-tamenti, cioè rendere indipendente la durata dalla trasposizione. Questo èpossibile farlo, realizzando un algoritmo di tipo granulare, che segmenta ilfile audio in piccoli segmenti e su quelli opera una trasposizione, ma allostesso tempo lascia invariata la durata del file stesso.

Il principio è semplice: si divide il file in grani, si stabilisce un fattore ditrasposizione e uno di time stretching. Nel caso si voglia allungare la duratadi un file audio i grani verranno eseguiti non proprio uno dietro l’altro, macon una certa distanza l’uno dall’altro. Se, in questo caso, si decide di nontrasportare il campione, la frequenza delle altezze rimarrà la stessa, mentreaumenterà la durata del file. Viceversa si può lasciare invariata la duratadel campione e di trasportare il grano aumentando o diminuendone la ve-locità di esecuzione. In entrambi i casi però si produrrà un intervallo disilenzio fra un grano e l’altro.

Quando un grano viene trasposto verso l’acuto si accorcia inevitabilmentee nel momento in cui la durata totale resta la stessa, al termine del granoci sarà una certa quantità di silenzio. Quando invece il grano non vienetraposto, rimane identico all’originale, ma se si rallenta l’esecuzione si pro-durrà lo stesso fenomeno.

La fig. 201 mostra questo comportamento. La prima immagine mostrail frammento di file suddiviso in grani di uguale durata ed equidistanti.Nella seconda immagine i grani, di identica durata rispetto all’immagineprecedente, vengono rarefatti in modo da allargare il tempo di esecuzione(in questo caso la metà del tempo) mentre nella terza immagine il temporimane uguale all’originale, ma i grani vengono trasposti di un’ottava (fre-quenza doppia).

L’algoritmo che descriveremo è stato implementato e proposto come tuto-rial di pd da Miller Pusckette stesso 2.

La figura 202 mostra l’algoritmo nella sua interezza.Per semplicità abbiamo diviso la patch in regioni etichettate con letteremaiuscole per facilitare i riferimenti. La regione A permette di impostare

2 Si tratta della patch-tutorial che si chiama B14.rockafella.sampler.pd che si può trovare nellacartella doc/3.audio.examples dentro la cartella principale di pd

198

Page 200: Inventare il suono con PURE DATA - Altervista

original file

samples0 200 400 600 800 1000

time stretching

samples0 200 400 600 800 1000

pitch transposing

samples0 200 400 600 800 1000

Figure 201: Principio di granulazione di un file audio per time stretching e pitchshifting indipendenti

la dimensione del grano (chunk size), scelta in millisecondi, ma poi trasfor-mata in secondi moltiplicando il valore per 0.001. La regione B impostala velocità in percentuale del campione da manipolare e la sua lunghezza(in millisecondi, trasformati in secondi). La regione C invece permette latrasposizione del campione, in decimi di mezzitoni. Le regioni D1 e D2

infine processano il tutto. Sono due frammenti di codice identici perchéc’è anche un fattore di overlapping di due grani, quindi ci saranno duetreni di grani sovrapposti, al fine di evitare quella frammentazione di cuisi è parlato prima.

199

Page 201: Inventare il suono con PURE DATA - Altervista

hip~ 5

40

50

+~

samphold~

*~

r~ phase

s~ phase

r~ phase

r~ phase

s chunk-sizechunk sizein seconds

r chunk-size

t b f

-~ 0.5

*~ 0.5

cos~

phasor~

s~ read-pt

r~ read-pt

+~

<-- transposition, halftones/10

* 0.001

phasor~

*~ 44100

tabread4~ table23

r chunk-size

+~ 1

12.5s precession

t b f

r precession

* 0.01

*~

+~

samphold~

*~

-~ 0.5

*~ 0.5

cos~

r~ read-pt

*~ 44100

tabread4~ table23

r chunk-size

+~ 1

r~ phase2

r~ phase2

r~ phase2

<-- precession, percent

900

* 0.001

900

<-- chunk size (msec)

expr (pow(2, $f1/120)-$f3)/$f2

t b f

loadbang

<-- loop length(msec)

*~

/

+~ 0.5

wrap~

*~

s~ phase2

0

A

B

C

D1 D2

output~

volume

dsp

pd table

choose_a_file

Figure 202: la patch per il time stretching e il pitch shifting indipendenti

Sulla regione A non c’è nulla da aggiungere. Nella regine B la percentualedella velocità del campione da leggere (per esempio il 50% significa che ilframmento di file sarà eseguito a velocità dimezzata) viene divisa per ladurata in secondi del campione che si vuoi eseguire. Il risultato diventa lafrequenza di un phasor∼ il cui segnale viene a sua volta moltiplicato per

200

Page 202: Inventare il suono con PURE DATA - Altervista

la durata del file da eseguire. In sostanza phasor∼ restituisce una rampache va da 0 alla lunghezza del campione da processare con una frequenzache corrisponde alla velocità a cui vogliamo sia eseguito.

Se volessimo una lunghezza del file da eseguire pari a 900 millisecondi,cioè 0.9 secondi alla velocità originale (il 100% della velocità), phasor∼covrebbe compiere 1000/900 rampe al secondo, cioè 1.1111. Nel caso di ve-locità al 50%, come nel nostro esempio, si dividerà 500 per 900, cioè 0.5555.Questa è la rampa che va da 0 a 0.9. Come si vede dalla regione D1 (e D2)è sufficiente moltiplicare tale rampa per 44100 per avere la lettura dellatabella dal primo campione fino al campione 44100*0.9, cioè 39690.

La regione C genera una rampa da aggiungere alla rampa principale. È nec-essario calcolare la velocità di lettura dei grani che consenta di mantenereindipendente l’altezza del campione rispetto alla velocità di riproduzione.Se, ad esempio, decidiamo di eseguire il campione a una velocità del 100%non ci sarà alcuna granulazione e la regione C attribuirà alla rampa secon-daria il valore di zero, ma se vogliamo eseguire il campione al 50%, senzaavere trasposizione, i grani dovranno essere eseguiti più velocemente, inmodo da mantenere la frequenza originale.

Oltretutto vengono create due rampe, una con differenza di fase di 0.5, inmodo da creare un overlapping per riempire i vuoti generati soprattutto infase di riduzione della velocità.

Le regioni D1 e D2, tramite samphold∼ eseguono la rampa principale (r∼read-pt) e aggiungono la rampa secondaria, D1 quella con fase zero (r∼phase), D2 quella con fase 0.5 (r∼ phase2).

201

Page 203: Inventare il suono con PURE DATA - Altervista

Part III

A P P L I C A Z I O N I VA R I E

Page 204: Inventare il suono con PURE DATA - Altervista

16 E S T E N D I B I L I TÀ D I P D

16.1 PD COME LINGUAGGIO DI PROGRAMMAZIONE

Come abbiamo già avuto modo di mostrare, Pd è un vero e proprio lin-guaggio di programmazione. Pur essendo nato per gestire, creare, ma-nipolare applicazioni audio Pd ha anche le consuete capacità di calcolo diqualunque linguaggio e anche numerose estensioni che permettono di farecose che vanno ben oltre gli scopi per cui fu pensato in origine.

16.1.1 externals E LIBRERIE

La comunità di sviluppatori e artisti che si muove intorno a Pure Data èmolto vasta e ogni giorno vengono annunciate nuove estensioni al softwareche ne espandono le potenzialità.

Tali estensioni, tipicamente, consistono in nuovi oggetti che possono omeno essere raccolti in librerie di oggetti. Nella sezione relativa abbiamovisto che in Pd c’è la possibilità di incapsulare degli algoritmi dentro lesubpatches, che possono però essere utilizzati solo nel contesto della patchin cui sono creati. Quando tali algortimi affrontano problemi più generalie devono quindi essere utilizzati in contesti diversi, possono essere riutiliz-zati come abstractions. In questo caso si tratterà di normali patch con inlete outlet che vengono salvate con estensione pd e poste all’interno del pathper poter essere richiamate ogni qualvolta siano necessarie.

Un terzo tipo di incapsulamento degli algoritmi è quello costituito dagli ex-ternals che si presentano come normalissimi oggetti pd, ma che non fannoparte della libreria standard del programma e non possono essere visibilial loro interno come le normali abstractions perché sono realizzate in lin-guaggio C e compilate appositamente per l’uso in Pd.

203

Page 205: Inventare il suono con PURE DATA - Altervista

Gli externals a volte vengono organizzate in librerie che possono esserecaricate per intero all’apertura del programma. Il menu Startup serve alocalizzare la posizione di tutte le librerie che bisogna caricare all’avviodel programma.

16.1.2 ALCUNE LIBRERIE

Pd nella sua versione extended include già numerose librerie, che rendonoil programma funzionale a un utilizzo molto esteso. la libreria GEM, cheesamineremo più dettagliatamente nel capitolo successivo, offre una seriedi oggetti per manipolare immagini e video. cyclone mette a disposizionedegli utenti di pd una serie di oggetti-cloni de Mas/Msp, di cui fra l’altroabbiamo già fatto uso più volte(Uzi, counter, drunk, etc. . . ). La libreria zexy

estende genericamente sia il parco degli oggetti audio che quelli dati. pmpd

è una libreria di oggetti per simulare comportamenti fisici del mondo reale.

per una lista completa delle librerie e delle loro funzionalità rimandiamoal portale di pure data (http://puredata.info/).

204

Page 206: Inventare il suono con PURE DATA - Altervista

17 G E M E I L V I D E O

17.1 LA LIBRERIA GEM

La libreria GEM è una libreria per la gestione del video e delle immaginiin pd.

Si basa sull’uso di alcuni oggetti fondamentali che consentono di creare,gestire, aprire o chiudere una finestra particolare attivata tramite l’oggettogemwin in cui viene effettuato il rendering video. Come mostrato in figura203 l’oggetto gemwin riceve i messaggi create e destroy per creare e distrug-gere la finestra grafica e i messaggi 1, per attivare il rendering e 0 perdisattivarlo.

gemwin

create

destroy

Figure 203: Gestione della finstra grafica di GEM

uns volta abilitato il rendering nella finestra grafica, è possibile creare delleforme all’interno di essa. L’oggetto gemhead abilita il rendering di ognitipo di forma e deve essere presente all’inizio di una catena di creazionedella forma. L’oggetto che identifica una forma, ad esempio square per unquadrato, deve trovarsi alla fine di questa catena. Fra questi due estremidella catena possono essere presenti molti atri oggetti che gestiscono laforma: colore, dimensioni, posizione, etc.Nella figura 204 creiamo prima la finestra di GEM con create, poi attiviamo

205

Page 207: Inventare il suono con PURE DATA - Altervista

il rendering con toggle e quindi vedremo apparire un quadrato di colorebianco (l’argomento dell’oggetto color 1 1 1 scala fra 0 e 1 i valori di RGB,cioè rosso, verde e blu, tutti impostati al massimo per dare il bianco).

gemwin

destroy

create gemhead

square

color 1 1 1

Figure 204: Creazione di un quadrato

L’oggetto color fa parte di quella categoria di oggetti detti manipulators checonsentono di manipolare le forme in vari modi. L’oggetto translateXYZconsente di spostare nello spazio una forma. Come si intuisce le dimen-sioni sono tre, quindi lo spazio è tridimensionale. Nella prossima patch(fig. 205), c’è un quadrato di dimensione 0.25 che si sposta in uno spazioa due dimensioni (la coordinata Z quindi non ci interessa) ogni quarto disecondo.

Le coordinate variano da -4 a 4 sia per l’asse delle x che per quella della y,quindi il punto [0,0] rappresenta il centro del piano.

Le forma possibili,chiamate Geos nella terminologia GEM e identificate daoggetti con lo stesso nome, sono:

• square

• circle

• triangle

• cube

• sphere

• cone

206

Page 208: Inventare il suono con PURE DATA - Altervista

gemwin

destroy

create gemhead

color 1 1 1

translateXYZ

t b b

/ 100 / 100

random 800 random 800

- 4 - 4

square 0.25

metro 250

Figure 205: Traslazione di un quadrato

Invece i manipulators sono:

• color

• colorRGB

• rotate

• rotateXYZ

• scale

• scaleXYZ

• translate

• translateXYZ

Come sempre gli help di ognuno di tali oggetti possono essere un va-lidissimo ausilio per la comprensione del loro comportamento. Il sito in-ternet http://gem.iem.at/documentation/manual/manual presenta inveceun manuale abbastanza esaustivo sulla libraria GEM.

207

Page 209: Inventare il suono con PURE DATA - Altervista

17.2 INTERAZIONE AUDIO E GEM

Già con queste poche nozioni possiamo creare un algoritmo in cui audioe video interagiscono. Nella patch in figura 206 metro invia un bang ad uninviluppo d’ampiezza controllato da line∼ per l’oscillatore, ma allo stessotempo controlla il colore del quadrato con un inviluppo identico, che vaa modificare il primo dei tre colori dell’oggetto color, che varia dal rosso(quando è 1) al nero quando è zero.

gemwin

destroy

create

gemhead

activate

square 0.25

color 0 0 0

dac~

*~

line~

1 25

delay 50

metro 500

line

* 0.01

100 25

$1 0 0

0 1500 150 osc~ 80

Figure 206: Esempio di interazione audio/video

Volendo usare più oscillatori e più quadrati no dovremmo fare altro checopiare la aprte di patch che ci interessa e aggiungere un oggetti transla-teXYZ per sistemare opportunamente i quadrati nello spazio.

la prossima patch è un po’ più elaborata (fig. 207. Un oggetto metro emettebang ogni 125 o 250 millisecondi. random genera un numero compreso fra

208

Page 210: Inventare il suono con PURE DATA - Altervista

0 e 6 inviandolo a sel che smista i bang di uscita fra varie combinazioni: glioscillatori possono suonare tutti insieme, due alla volta oppure uno allavolta, in base al numero generato da random.

La subpatch di sinistra (quadsx) invia il segnale a sinistra nel campo stereoe in minor quantità a destra, viceversa quella di destra. Il segnale dellasubpatch centrale è in posizione centrale.

La patch di sinistra e quella di destra possono anche ricevere frequenza di-verse e in base a quelle il quadrato si sposterà sull’asse verticale (y) mentrel’oscillatore centrale suonerà sempre la stessa frequenza, lasciando il suoquadrato nella stessa posizione.

la figura 208 mostra l’interno della subpatch quadsx. Il bang ricevuto dall’inletattiva l’inviluppo di ampiezza del generatore dell’onda (in questo caso unphasor∼) e la produzione del colore. Allo stesso tempo mette in azioneun oggetto random che genera numeri compreso fra 0 e 2, che andrannoa modificare la posizione del quadrato sull’asse delle y e la frequenza delgeneratore audio, che varierà fra i valori 500, 1000 e 1500.

La subpatch quaddx è identica, con l’unica differenza che l’oggetto transla-teXYZ ha come argomento 2 invece di -2, quindi sarà traslata un a destrarispetto al centro.

la subpatch quadc, del quadrato centrale (fig. 209), è più semplice. mancainfatti tutta la gestione della frequenza di osc∼, che ha frequenza fissa (100

hz).

209

Page 211: Inventare il suono con PURE DATA - Altervista

gemwin

destroy

create activate

pd quadsx pd quadc

metro 250

*~ *~ *~

dac~

*~ 0.25

*~ 0.25

line~

$1 5

expr (random(1, 3) * 125)

pd quaddx

random 7

sel 0 1 2 3 4 5 6

Figure 207: interazione audio video con tre oscillatori e tre quadrati

210

Page 212: Inventare il suono con PURE DATA - Altervista

gemhead

square 0.25

color 0 0 0 *~

line~

line

* 0.01

outlet~

inlet

translateXYZ -2 0 0

100 5 0 10

1 5 0 10

delay 100

+ 1

random 3

- 1

* 2

phasor~ 1000

* 500

$1 $1 $1

Figure 208: la subpatch del quadrato sinistro (quadsx)

211

Page 213: Inventare il suono con PURE DATA - Altervista

gemhead

square 0.25

color 0 0 0

*~

line~line

* 0.01

$1 0 0outlet~

inlet

translateXYZ 0 0 0

100 5 1 5

delay 100

0 100 10 osc~ 100

Figure 209: la subpatch del quadrato centrale (quadc)

212

Page 214: Inventare il suono con PURE DATA - Altervista

18 N E T W O R K I N G

18.1 ARCHITETTURA DI RETE IN PD

Il concetto di Networking assume in pd sfaccettature diverse e complesse.Semplificando molto si può affermare che l’architettura del sistema sia giàdi per sé basata sul modello di comunicazione client-server, laddove unsistema di messaggistica interna (internal messaging system), basato su unprotocollo di comunicazione detto FUDI, consente di inviare messaggi frapatch e verso il server.

Tale sistema di messaggistica incorpora due tipi di messaggi, quelli indi-rizzati al processo che gestisce l’intero sistema compreso il motore audio(pd messages) e quelli che viaggiano da patch a patch, anche nel caso di patchprive di interfaccia grafica.

In effetti pd può funzionare, quindi produrre audio, ricevere e inviare mes-saggi, anche in assenza dell’interfaccia grafica consueta. Questo implica lapossibilità di creare e gestire interfacce implementate in altri linguaggi 1.Questo non significa che pd possa comunque fare a meno delle patch, masolo che possa nasconderne la visuale grafica all’utente. La patch infattinon è altro un file di teso in cui compaiono i comandi attraverso i quali sicreano gli oggetti e tutte le altre istanze di un algoritmo.

Una patch si concretizza in quella che in pd si chiama canvas, cioè il con-tenitore dove gli oggetti, i messaggi e tutto il resto vengono creati e postiper far si che un algoritmo prenda vita. Solo dalla canvas è possibile dire almotore audio cosa fare esattamente. Sulla macchina in cui risiede il motoreaudio (il pd process) ci dovrà essere necessariamente una patch con relativacanvas, che avrà il compito di contenere gli oggetti audio e di spedire mes-

1 http://jeraman.info/2009/03/22/how-to-use-pure-data-as-a-api/

213

Page 215: Inventare il suono con PURE DATA - Altervista

saggi al motore.

Per semplificare: gli oggetti audio dovranno necessariamente risiederenella canvas vicina al server. Tutte le altre macchine remote potranno soloinviare messaggi alla patch principale, che per semplificare chiameremoproxy patch, che si occupera di far funzionare tutto. le macchine remoteperò potranno costruire e distruggere oggetti dalla loro postazione.

In figura 210 viene mostrato il modello di comunicazione attraverso cui pdfunziona.

client patch

proxy patch

client patch

pd engine

Figure 210: Il modello di comunicazione di pd

18.1.1 netsend E netreceive

Proviamo ad esemplificare quanto detto sopra. In concreto dovremo aprireil pd-engine e una patch che funzioneranno da server e attivare delle clientpatch altrove (nel nostro caso tutto avverrà sulla stessa macchina, ma è lastessa cosa).

214

Page 216: Inventare il suono con PURE DATA - Altervista

Nella client patch avremo un oggetto che si occuperà di connettersi allaproxy patch per inviarle dei messaggi. Tale oggetto è netsend. D’altra parte,la proxy patch conterrà l’oggetto netreceive che aprirà la porta di una connes-sione socket e si metterà ina ttesa dei messaggi. A sua volta la proxy patchpotrà inviare messaggi al pd engine tramite normali messaggi preceduti dalpunto e virgola e dalla dicitura pd. In figura 211 abbiamo schematizzatoquesto comportamento.

client patch netsend

proxy patchnetreceive

; pd

pd engine

Figure 211: Il modello di comunicazione di pd in dettaglio

Realizzando il tutto in pd ci toroviamo di fronte alla client patch rappresen-tata in figura 212 e alla proxy patch in figura 213.L’oggetto netsend necessita di una message box per la connessione (in questocaso si connette a localhost sulla porta 5555). Una volta stabilita la connes-sione invierà qualunque tipo di messaggio compatibile con pd, preceden-dolo dalla parola chiave send. In questo caso potrà inviare due tipi dimessaggio: un numero per la frequenza di un oscillatore e un altro nu-mero (che sarà zero o 1) per attivare o disattivare l’audio.

215

Page 217: Inventare il suono con PURE DATA - Altervista

netsend

connect localhost 5555

send frq $1

send active $1

active_audio_engine

connect to port 5555

440

send_osc_frquency

Figure 212: la client patch che si occupa di inviare messaggi al proxy

netreceive 5555

;pd dsp $1

osc~ 200

*~ 0.5

dac~

route frq active

active audio to pd engine

receive message fromclient

Figure 213: la proxy patch che si occupa di ricevere messaggi dalla client patch e diinviare comandi al pd engine

I messaggi saranno precedute da parole-selettori (frq e active, in modo cheil proxy possa smistarli tramite l’oggetto route.

216

Page 218: Inventare il suono con PURE DATA - Altervista

La proxy patch è in ascolto sulla porta 5555 con l’oggetto netreceive. L’oggettoroute smista i messaggi. Nel caso riceva un messaggio preceduto dallaparola-selettore active invierà il numero ricevuto alla message box che si oc-cupa di spedire il comando di accensione dell’audio al pd engine, comandoche deve essere preceduto dal punto e virgola.

18.1.2 Dynamic patching

Nell’ipotesi di controllare pd da una macchina remota, abbiamo visto cheper ora è possibile, di fatto, inviare da remoto dati numerici ad una proxypatch che risiede nella stessa macchina del pd engine. In questo modo laproxy patch riceve solo dati di controllo su una serie di oggetti che costitu-iscono un algoritmo preconfezionato.

Questa limitazione impedirebbe quindi di programmare gli algoritmi intempo reale su un unico motore audio. Allo stato attuale la cosa non èimpossibile, anche se non è agevole come in un linguaggio come SuperCol-lider 2 dove l’architettura client-server è basata sul protocollo OSC e nonnecessita di alcun proxy intermediario fra il client e il server audio.

Negli ultimi tempi la pratica del Live Coding sta prendendo sempre piùpiede nell’ambiente dei programmatori dell’audio e anche nella comunitàdi pd stanno anscendo applicazioni che rendono possibile il Live Codingcondiviso, cioè la creazione di un’unica patch da postazioni diverse.

Tutte le implementazioni si basano sullo sfruttamento dei patch messages, dicui abbiamo parlato prima. Attraverso questi particolari internal messagesè possibile creare, distruggere, manipolare oggetti residenti in altre patch,anche remote.

Ogni internal patch message è costituito da una parola chiave che rappre-senta l’oggetto da creare o l’azione da compiere, seguita da altri argomenti.Ad esempio il messaggio:

obj 100 100 osc~ 200

2 http://supercollider.sourceforge.net/

217

Page 219: Inventare il suono con PURE DATA - Altervista

crea un oggetto osc∼ in posizione [100,100] della canvas con argomento200 per la frequenza. Nella figura 214 mostriamo un esempio di questaprocedura.

send pd-internalmessage01.pd

obj 100 200 osc~ 200

obj 100 250 dac~

floatatom 100 150 5

connect 6 0 7 0, connect 6 0 7 1

connect 8 0 6 0

Figure 214: una patch per l’invio di internal messages all’interno della stessa patch

L’oggetto send invia i messaggi alla patch in cui si trova, in questo casointernalmessage01.pd. Il nome della patch di destinazione deve essere pre-ceduta dal prefisso pd-. I due messaggi con parola chiave obj creano glioggetti osc∼ e dac∼ alle coordinate indicate. Il messaggio floatnum creauna number box e i tre messaggi connect (i primi due si trovano all’internodella stessa message box, separati da una virgola, connettono gli oggetti fraloro.

Cosa significano i numeri che seguono i messaggi di connect? Si tratta diquadruple di valori che identificano il numero dell’oggetto e l’inlet o l’outletda connettere. Il numero dell’oggetto viene attribuito allo stesso nel mo-mento in cui viene creato, secondo l’ordine di creazione. Questo significache, visto che nella patch prima della creazione dei tre oggetti ci sono giàaltri sei oggetti, che vengono numerati virtualmente da zero a 5, i nuovioggetti saranno numerati a partire da 6, secondo il loro ordine. osc∼ saràl’oggetto numero 6, dac∼ il 7, infine la number box l’8.

Il secondo e il quarto numero della quadrupla rappresentano, rispettiva-mente l’outlet e l’inlet da connettere. Ad esempio il messaggio:

connect 8 0 6 0

218

Page 220: Inventare il suono con PURE DATA - Altervista

connette il primo outlet dell’oggetto 8, cioè la number box con il primo inletdi osc∼, che è l’oggetto numero 6. La figura 215 chiarifica il tutto.

send pd-internalmessage01.pd

obj 100 200 osc~ 200

obj 100 250 dac~

floatatom 100 150 5

connect 6 0 7 0, connect 6 0 7 1

connect 8 0 6 0

osc~ 200

dac~

0

---> 6

---> 7

---> 8

in 0

in 1in 0

out 0

out 0

Figure 215: La numerazione degli oggetti e degli inlet-outlet all’interno dellastessa patch

Per far si che la numerazione degli oggetti creati inizi da zero è sufficientecreare nella patch principale una subpatch vuota in cui risiederanno i nuovioggetti.

Con lo stesso principio possiamo inviare dei messaggi per creare deglioggetti da una postazione remota facendo uso degli oggetti netsend e ne-treceive e con opportuno routing di tali messaggi (tramite route). Le figure216 e 217 illustrano questo procedimento alla fine del quale la subpatch ob-jecthost si configurerà come nella figura 218.

219

Page 221: Inventare il suono con PURE DATA - Altervista

netsend

connect localhost 5555

send active $1

active_audio_engine

connect to port 5555

send create obj 20 20 osc~ 200

send create obj 20 50 *~ 0.5

send create connect 0 0 1 0

send create obj 20 80 dac~

send create connect 1 0 2 0

send create connect 1 0 2 1

send create vis 1, send create editmode 1

Figure 216: la client patch per l’invio dei messaggi che creano gli oggetti

18.1.3 pdsend

pd dispone di due programmi standalone per la gestione di ciò che abbi-amo appena esaminato. Si tratta di pdsend e pdreceive che possono essereeseguiti da linea di comando e fanno le veci di netsend e netreceive.

Questi due programmi consentono di creare delle interfacce con altri lin-guaggi di programmazione, il che potrebbe essere utilissimo se si riescea creare un codice in grado di gestire la creazione di messaggi da unapostazione remota.

Senza entrare troppo nel dettaglio, proviamo a illustrare un esempio diuso di pd send. in questo caso faremo un uso ibrido dei comandi, ossiautilizzeremo pdsend per inviare i messaggi e netreceive dentro una proxy

220

Page 222: Inventare il suono con PURE DATA - Altervista

netreceive 5555

;pd dsp $1

active audio to pd engine

receive message fromclient

route create active

pd objecthost

send pd-objecthost

Figure 217: La proxy patch che contiene la subpatch objecthost in cui comparirannoi nuovi oggetti

osc~ 200

*~ 0.5

dac~

Figure 218: la subpatch objecthost con gli oggetti appena creati

patch per ricevere ed eseguire i comandi. La fig. ??) mostra la proxy patch.Si tratta semplicemente di una canvas che contiene l’oggetto netreceive inascolto sulla porta 3001 e con l’argomento zero, che significa che riceveràmessaggi TCP (che sono più affidabili degli UDP, indicati con l’argomento1). L’ulteriore argomento old è necessario per ricevere qualunque tipo dimessaggio da pdsend.

Prima di tutto è necessario aprire pd, poi la proxy patch, infine aprire unafinestra di terminale. Da lì è necessario navigare fino alla posizione del

221

Page 223: Inventare il suono con PURE DATA - Altervista

programma pdsend ed eseguirlo in questo modo:

./pdsend 3001 localhost

oppure

pdsend.exe 3001 localhost

se si è su windows. Poi eseguiamo i seguenti comandi, uno alla volta ter-minandoli ognuno con il punto e virgola:

pd filename n ./; //crea un nuovo file di nome n

#N canvas; //crea la canvas

#X pop 1; //la apre

pd-n obj 100 100 osc~ 200; //crea un oscillatore con

frequenza 200

pd-n obj 100 150 dac~; //crea un’uscita

pd-n connect 0 0 1 0; //connette i due oggetti

pd dsp 1; //attiva l’audio

Si potrebbe anche aprire pd da terminale senza la GUI, con la linea di co-mando (supponiamo di aver salvato la patch con netreceive nel file proxy.pd):

./pd -nogui proxy.pd

a questo punto pd è un programma senza interfaccia grafica, completa-mente gestito da linea di comando. Naturalmente scrivere i messaggi unoalla volta e con la dicitura completa non è molto comodo, ma ci sono già al-cune implementazioni reperibili in rete che rendono il tutto estremamenteintuitivo e immediato. La maggior parte fanno uso di Python, ma non man-cano applicazioni in Perl, Lisp, Scheme, e altri, e c’è da scommettere chenell’immediato futuro l’uso di pd come motore audio pilotato da interfaccediverse sarà all’ordine del giorno!

222

Page 224: Inventare il suono con PURE DATA - Altervista

18.2 IL PROTOCOLLO OSC

Nato intorno al 1997, OSC è un protocollo che consente la comunicazionefra computer collegati in rete. I messaggi vengono impacchettati secondocerti criteri e trasportati tramite i consueti protocolli di trasporto, tipica-mente UDP, ma anche OSC.

Generalmente i messaggi OSC possono essere di qualunque tipo e si usafarli precedere da prefissi che rendono semplice il routing nella macchinaricevente. Tali prefissi hanno la struttura degli indirizzi web, sono prece-duti cioè da una ’/’ (slash).

Il protocollo OSC è molto utile quando si vuole far comunicare pd con unsoftware diverso, sulla stessa macchina o verso altre macchine. La comu-nicazione fra pd e pd è implementata benissimo con gli oggetti netsend enetreceive quindi non avrebbe molto senso usare OSC, anche se gli esempiche seguono rimangono nel contesto di pd sia in ricezione che in invio.

In pd le implementazioni del protocollo OSC sono numerose, ma quellamigliore, e forse la più utilizzata in questo momento, è quella costituitadalla libreria mrpeach. Nonostante questo pd-extended, pur contenendotale libreria, non la carica di default all’avvio del programma. Quindi ènecessario caricarla nella tramite il messaggio import.Gli oggetti necessari a stabilire una connessione OSC e a ricevere/inviarei messaggi sono udpsend, udp receive, packOSC e unpackOSC. I primi dueservono a stabilire la connessione e a inviare i paccheti, gli altri due aprepararli per essere spediti, formattano cioè i dati nel formato interno delprotocollo. Nella figura 219 viene mostrato un semplice esempio di comu-nicazione via OSC.

La macchina che spedisce i messaggi (sender) usa udpsend, si connette allaporta 3001 dell’indirizzo dell’interfaccia di loopback, cioè localhost perchési tratta di comunicare nello stesso computer. Infine impacchetta i mes-saggi, facendoli precedere dalla parola chiave send, tramite packOSC e lispedisce tramite udpsend.

Il destinatario (receiver) riceve i messaggi tramite udpreceiver, li interpretae li spacchetta grazie a unpackOSC, infine li invia a route che li indirizza

223

Page 225: Inventare il suono con PURE DATA - Altervista

import mrpeach

connect localhost 3001

packOSC

udpsend

send /test $1

unpackOSC

route /test

0

0

sender receiver

udpreceive 3001

Figure 219: Una semplice connessione OSC

opportunamente.

Il meccanismo di indirizzamento tramite le slash può essere molto elabo-rato, si tratta semplicemente di organizzare l’indirizzamento per route inmodo da instradare i messaggi in modo coerente.

La figura 220 mostra un esempio di istradamento più elaborato.

Naturalmente nulla impedisce di creare connessioni duplex, dove una macchinainvia e riceve messaggi allo stesso tempo. È sufficiente creare due oggettiudpsend e udpreceive, ovviamente su porte diverse. in pratica si creanodue connessioni OSC diverse, una per ricevere, l’altra per inviare dati.Nell’esempio di figura 221 la macchina A invia dati sulla porta 3001 ericeve sulla porta 3002, la macchina B, viceversa, invia sulla 3002 e ricevesulla 3001.

Tutte le comunicazioni che abbiamo realizzato nei precedenti esemi fannouso del protocollo UDP per trasportare i dati, ma nulla vieta di utilizzare ilprotocollo TCP, che è più affidabile anche se a volte meno veloce. Se si usauna connessione internet per comunicare con pd probabilmente potrebbeessere meglio usare il TCP, ma in una LAN locale è preferibile in generale

224

Page 226: Inventare il suono con PURE DATA - Altervista

import mrpeach

connect localhost 3001

packOSC

udpsend

udpreceive 3001

unpackOSC0

sender receiver

0

0

0

route /data /audio

route /sliderA /sliderB

route /frq /amp

0 0

send /data /sliderA $1

send /data /sliderB $1

send /audio /amp $1

send /audio /frq $1

Figure 220: Routing elaborato dei messaggi

utilizzare il protocollo UDP.

Per realizzare connessioni che facciano uso di TCP è sufficiente usare glioggetti tcpsend e tcpreceive al posto di udpsend e udpreceive.

18.3 L’AUDIO IN streaming

I protocolli che abbiamo esaminato fino ad ora (MIDI, OSC, FUDI) trasportanofondamentalmente dati numerici, simboli, liste, ma non consentono di in-viare e ricevere campioni audio. Per fare questo occorre utilizzare proto-colli diversi, implementati in pd da oggetti specifici.

La prima coppia di oggetti che esaminiamo è streamin∼ e streamout∼che servono a inviare segnale audio fra pd e pd in una LAN o attraversouna connessione internet.

225

Page 227: Inventare il suono con PURE DATA - Altervista

import mrpeach

connect localhost 3001

send /data $1

packOSC

udpsend

udpreceive 3001

unpackOSC

30

route /data

udpsend

unpackOSC

udpreceive 3002

route /audio

connect localhost 3002

packOSC

0

send /audio $1

00

A B

Figure 221: Connessione OSC duplex

Sostanzialmente sono l’omologo audio di netsend e netreceive, con alcunedifferenze che vedremo fra poco. Anche in questo caso è necessario sta-bilire una connessione tramite la definizione di un indirizzo e di una portadi comunicazione (fig. 222).Come appena detto, ci sono delle differenze con netsend e receive, infattistreamin∼ può accettare un solo segnale per porta, quindi nel caso si vo-lesse usare tale oggetto come server audio per più client o per un client conun segnale stereo, ogni segnale dovrebbe essere instradato su una porta dif-ferente e per ogni porta ci dovrebbe essere un oggetto streamin∼ diverso(fig. 223).

Per ovviare a questa complicazione è in fase di testing una coppia dioggetti, netsend∼ e netreceive∼ che consentono di inviare e ricevere seg-

226

Page 228: Inventare il suono con PURE DATA - Altervista

streamout~

connect localhost 3001

osc~ 200

streamin~ 3001

dac~

client server

Figure 222: Connessione audio con streamin∼ e streamout∼

nali multicanale su una stessa porta 3.

Un’altra possibilità notevole che pd offre, è quella di inviare il flusso audiodirettamente ad un server per il media streaming, tramite un protocollo ditipo multicast. In pratica pd può andare in diretta radio!.

L’oggetto mp3cast∼ svolge questa funzione. Naturalmente bisogna esserein possesso dell’account e dell’indirizzo di un server streaming, stabilire unmountpoint, cioè un file temporaneo che funziona come un buffer per mem-orizzare il segnale e infine è necessario dire all’oggetto che tipo di serversi utilizza (fig. 224).

Come si può notare è possibile inviare un segnale stereofonico. Il segnaleviene compresso nel formato mp3 e inviato in tempo quasi-reale (il ritardopuò essere di circa 10 secondi. A questo punto non è difficile implementareuna semplicissima postazione radio (fig. 225).La patch è semplice: subpatch che si occupa della connessione (fig. 226),una che si occupa di inviare tre segnali a mp3cast∼, cioè il microfono, unamini implementazione di modulazione di frequenza e un oggetto sfplay chelegge file audio per una eventuale esecuzione di playlist (fig. 227). Infinela subpatch che si occupa dei controller pilotati via MIDI tramite l’oggettoctlnin (fig. 228). Va ricordato che le GUI possono ricevere e inviare mes-saggi tramite send e receive semplicemente impostando il destinatario e ilmittente dalle properties della GUI stessa (fig. 229).Esiste un altro oggetto che implementa le connessioni a tali tipi di server, sichiama oggcast∼, che differisce da mp3cast∼, come si intuisce dal nome,

3 http://www.nullmedium.de/dev/netsend~/

227

Page 229: Inventare il suono con PURE DATA - Altervista

streamout~

connect localhost 3001

osc~ 200

streamin~ 3001

dac~

client A

server

streamin~ 3002

streamin~ 3003

streamin~ 3004

streamout~

connect localhost 3002

client B

streamout~

connect localhost 3003

client C (stereo)

osc~ 300

osc~ 600

streamout~

connect localhost 3004

osc~ 1200

*~ 0.25

*~ 0.25

*~ 0.25

Figure 223: Connessione audio multiple

per il fatto di comprimere l’audio non in mp3 ma in formato Ogg Vorbis.

228

Page 230: Inventare il suono con PURE DATA - Altervista

mp3cast~

osc~ 200

passwd mypass

connect shoutcast.host.com 8000

mountpoint mymusic.mp3

shoutcast

Figure 224: Trasmettere il proprio segnale in una webradio

mic mysound playlist

bang_to_connect!

choose_a_file_to_playCarrier

109

Modulating

70

playlistmysound

start/stop

Figure 225: Una semplice postazione radio

229

Page 231: Inventare il suono con PURE DATA - Altervista

passwd mypass

mountpoint mymusic.mp3

shoutcast

connect shoutcast.host.com 8000

outlet

t b b b b

bang_to_connect!

Figure 226: la subpatch per la connessione al server multicast

adc~

sfplay 2

*~ *~

*~

*~ *~

open astronomydomine.wav l

r mic

$1 20

line~ $1 20

line~

r mysound

$1 20

line~

r playlist

loadbang

openpanel

choose_a_file_to_play

prepend open

osc~ 100

osc~ 400*~ 0.5

+~ 0.5

*~

Carrier

109

Modulating

70

start stop

playlistmysound

mp3cast~

inlet messages

start/stop

sel 1 0

Figure 227: Implementazione dei segnali da inviare alla radio

230

Page 232: Inventare il suono con PURE DATA - Altervista

ctlin 1

/ 128

send sld1

/ 128

ctlin 2

send sld2

/ 128

ctlin 3

send sld3

mic mysound playlist

Figure 228: Configurazione dei controller da pilotare via MIDI

231

Page 233: Inventare il suono con PURE DATA - Altervista

Figure 229: la finestra delle properties della vertical slider dove impostare send ereceive

232

Page 234: Inventare il suono con PURE DATA - Altervista

19 A P P L I C A Z I O N I S PA R S E

19.1 LAPTOP ORCHESTRA

Come si avrà avuto modo di intuire, le potenzialità di pd in merito alnetworking sono moltissime. L’idea quindi di organizzare gruppi che suo-nano su un palco facendo uso di questo programma è molto concreta. LaCLOrk, Concordia Laptop Orchestra 1, ha sviluppato con pd un sistemadi sincronizzazione dei dati all’interno di una Lan. Pd è usato anche dallaLinux laptop orchestra 2 e da molte altre.

Quando si tratta di mettere in piedi un’orchestra di laptop le problematichesono molte: Ognuno suona un proprio strumento sul suo motore audio oci si serve di un motore audio comune? Si improvvisa o si eseguono branistrutturati? Si suona stereo o in multifonia? Questi problemi naturalmentepossono essere affrontati in base alle condizioni di ogni orchestra.

Il modo più semplice, ma meno orchestrale, è quello di suonare sul propriolaptop in modo indipendente. Ogni postazione ha in attivo la propria patchsul proprio motore audio. La figura 230 mostra questa configurazione, chedefiniamo di tipo PUNCTUAL.

Nel capitolo sul Networking abbiamo illustrato molte delle funzionalità direte offerte da pd. Reamite gli oggetti netsend e netreceive strutturare unarete di postazioni in cui gira pd è estremamente facile. Una configurazionepossibile è quella in cui il motore audio e la patch principale sono avviatiin un server con l’oggetto netreceive. I client inviano dati al server. Ognunosi occupa di pilotare parti specifiche della server patch. La comunicazione

1 http://music.concordia.ca/news-and-events/events/dance-music-laptop-orchestra.

php

2 http://l2ork.music.vt.edu/main/

233

Page 235: Inventare il suono con PURE DATA - Altervista

PUNCTUAL Architecture

LAPTOP 1

AUDIO ENGINE

LAPTOP 4

AUDIO ENGINE

LAPTOP 2

AUDIO ENGINE

LAPTOP 3

AUDIO ENGINE

LAPTOP 5

AUDIO ENGINE

LAPTOP 6

AUDIO ENGINE

Figure 230: Architettura con postazioni indipendenti

quindi avviene solo dai client verso il server (fig. 231).

Audio centralized

SERVER

netreceive 3001route /A /B /C /D

part A part B part C part D

AUDIO ENGINE

CLIENT 1

Data control part A

netsend 3001 /A

CLIENT 2

Data control part B

netsend 3001 /B

CLIENT 3

Data control part C

netsend 3001 /C

CLIENT 4

Data control part D

netsend 3001 /D

Figure 231: Architettura con un server che riceve dati di controllo per il motoreaudio

Al contrario, in una tipica architettura UNICAST, un server può generaredegli eventi di controllo e inviarli ai client: Si tratta di una sorta di diret-

234

Page 236: Inventare il suono con PURE DATA - Altervista

tore d’orchestra che dice ad ogni client quello che deve fare. In questo casol’audio è decentralizzato, ogni client ha il proprio motore, incluso il server(fig. 232).

UNICAST Architecture(Audio decentralized)

SERVEREvent Generator

netsend 192.168.0.2 3000

netsend 192.168.0.3 3001

netsend 192.168.0.4 3002

netsend 192.168.0.5 3003

localhost

AUDIO ENGINE

CLIENT 1

netreceive 3000

AUDIO ENGINE

CLIENT 2

netreceive 3001

AUDIO ENGINE

CLIENT 3

netreceive 3002

AUDIO ENGINE

CLIENT 4

netreceive 3003

AUDIO ENGINE

Figure 232: Architettura UNICAST, il server genera gli eventi-partitura che ven-gono selettivamente inviati ai client

Un ultimo tipo di proposta è quella che si può definire BROADCAST Ar-chitecture con audio centralizzato. Un server invia un messaggio comune(BROADCAST) a tutta la rete, tipo un messaggio di sincronizzazione (clock)e riceve a sua volta da tutti i client i dati per il controllo del motore audio(fig. 233). È l’architettura più complessa, poiché richiede una connessionefull-duplex, cioè con doppia direzionalità. la trasmissione viaggia dal cliental server e viceversa.

Naturalmente queste architetture proposte sono legate alle condizioni incui si opera, ma sono anche funzionali al concetto di localizzazione dellasorgente sonora. Un’architettura audio centralized accentra l’audio su unapostazione specifica, di conseguenza non permette realmente di associareil gesto di chi suona a ciò che si ascolta. D’altro canto è più sempliceda gestire dal punto di vista dell’hardware, è sufficiente un impianto diamplificazione con stereofonia. Molto più complessa è la condizione di

235

Page 237: Inventare il suono con PURE DATA - Altervista

BROADCAST FULL-DUPLEX Architecture(Audio centralized)

SERVER

netreceive 3000

(audio control data)

netsend 3001(broadcast)

(clock)

AUDIO ENGINE

CLIENT 1

netreceive 3001 (clock)

netsend 3000

(audio control data)

CLIENT 2

netreceive 3001 (clock)

netsend 3000

(audio control data)

CLIENT 3

netreceive 3001 (clock)

netsend 3000

(audio control data)

CLIENT 4

netreceive 3001 (clock)

netsend 3000

(audio control data)

Figure 233: Architettura BROADCAST FULL-DUPLEX, il server invia un clock ericeve i controlli del motore audio

audio decentralized, dove ogni laptop produce il suo segnale. È ipotizz-abile un’uscita su canali multipli anche in termini di amplificazione. Lasoluzione della PLork (Princeton laptop Orchestra 3) è degna di citazione:si tratta di un’architettura audio decentralized dove ogni componente escecon il proprio segnale e lo diffonde con uno speaker a irradiamento circo-lare.

le soluzioni possibili sono tante quante le problematiche, ma le prospettivedi questo modo di suonare sono interessanti e in un futuro molto prossimo

3 http://plork.cs.princeton.edu/

236

Page 238: Inventare il suono con PURE DATA - Altervista

le Laptop Orchestra si moltiplicheranno a dismisura.

19.2 IL LIVE CODING

Una delle direzioni più recenti intraprese nell’ambito della musica elettron-ica è quella del Live coding, o della programmazione in tempo reale (On thefly programming o Just in time Programming).

Il principio su cui si basa il Live coding è quello per cui lo strumento (quindiil suono) e la composizione vengono creati contemporaneamente in temporeale dal musicista, che si occupa di scrivere il codice pensandolo nel mo-mento stesso della messa in atto. Il processo di creazione/composizionediventa trasparente e accessibile a chi ascolta. Per agevolare questa com-prensibilità spesso i Live coders si servono di proiettori per divulgare leimmagini del codice creato, commentandolo opportunamente durante ilprocesso.

Le implicazioni di questa tecnica, di questo modo di procedere, sono moltissime,soprattutto perché propone un approccio diverso non solo dal punto divista del musicista, ma anche da quello dell’ ascoltatore che assume unruolo inevitabilmente più consapevole, dal momento che viene diretta-mente accompagnato alla condivisione di quello che viene creato.

Un software storico come il già citato SuperCollider ha una libreria di Classidi oggetti (JITlib) che consentono di programmare in tempo reale. Chuck4 invece è stato pensato proprio per questo, è fortemente orientato allaprogrammazione in tempo reale. Sono entrambi ambienti testuali, anchese hanno la possibilità di generare oggetti grafici.Impromptu è un’ambiente di programmazione con una spiccata predispo-sizione al live programming 5. È un ambiente basato sul linguaggio Scheme,un dialetto del Lisp, un linguaggio funzionale molto usato negli studi sull’IntelligenzaArtificiale. È un linguaggio elegante ed estremamente espressivo, tanto dasomigliare in certi casi al linguaggio umano.

4 http://chuck.cs.princeton.edu/

5 http://impromptu.moso.com.au/

237

Page 239: Inventare il suono con PURE DATA - Altervista

Pd può essere annoverato fra i software più adatti per il Live coding peralcune ragioni:

• la sua vocazione grafica Dataflow consente di capire esattamente comeviene creato un algoritmo. Gli oggetti vengono collegati in modologico attraverso cavi di collegamento, dando un’idea molto precisadei rapporti di causa-effetto fra gli eventi;

• gli oggetti grafici GUI, che tendono a nascondere i processi, sonorelativamente limitati e se ne può evitare l’uso molto agevolmente;

• a differenza di Max, suo fratello maggiore, non crea problemi di click-ing audio quando si stacca un cavo o se ne crea uno.

Pd per adesso non ha librerie specifiche per il Live coding, anche perchénon ne ha bisogno. Di fatto usare pd significa programmare sempre intempo reale! Naturalmente questo non significa che tutti i programmatoridi pd siano dei buoni live coders. Si tratta infatti di acquisire una certadimestichezza con l’immaginare algoritmi in tempi rapidi e di realizzarlisenza troppi errori.

La disciplina è in continua espansione e il sito toplap.org, il centro nevral-gico del Live coding, propone anche degli esercizi per imparare a realizzarealgoritmi in modo chiaro e rapido. La soluzione agli esercizi è quasi sem-pre scritta in codice per SuperCollider, ma nessuno impedisce di provare arisolverli in pd!

19.3 ARDUINO

238

Page 240: Inventare il suono con PURE DATA - Altervista

C O N C L U S I O N E

239

Page 241: Inventare il suono con PURE DATA - Altervista

B I B L I O G R A F I A

AA.VV. [2000], The CSound Book, ed. by R. Boulanger, The MIT Press, Cam-bridge.

– [2010b], The Audio programming Book, ed. by R. Boulanger and V. Laz-zarini, The MIT Press, Cambridge.

– [2011], The SuperCollider Book, ed. by S. Wilson, D. Cottle, and Collins N.,The MIT Press, Cambridge.

Bianchini, Riccardo and Alessandro Cipriani [1998], Il suono virtuale. Sintesied elaborazione del suono. Teoria e pratica con Csound. Con CD-ROM, Con-TempoNet.

Blum, Frank [2007], Digital Interactive Installations: Programming interactiveinstallations using the software package Max/MSP/Jitter, VDM Verlag Dr.Mueller e.K., Cambridge.

Collins, Nick [2010], Introduction to Computer Music, Wiley, Chichester.Cope, David [2004], Virtual Music, The MIT Press, Cambridge.Dodge, Charles and Thomas A. Jerse [1997], Computer Music, Schirmer.Farnell, Andy [2010], Designing Sound, The MIT Press, Cambridge.Giri, Maurizio and Alessandro Cipriani [2009], Musica Elettronica e Sound

Design, ConTempoNet.Manning, Peter [2004], Electronic and Computer Music, Oxford University

Press, Oxford.Manzo, V.J. [2011], Max/MSP/Jitter for Music: A Practical Guide to Developing

Interactive Music Systems for Education and More, Oxford University Press,Oxford.

Puckette, Miller [2007a], The Theory and Technique of Electronic Music, WorldScientific Publishing Company.

Roads, Curtis [1996], The Computer Music Tutorial, The MIT Press, Cam-bridge.

– [2004], Microsound, The MIT Press, Cambridge.Rowe, Robert [2004], Machine Musicianship, The MIT Press, Cambridge.Taube, Heinrich K. [2004], Notes from the Metalevel, Taylor & Francis, Lon-

don.Temperley, David [2010], Music and Probability, The MIT Press, Cambridge.

240

Page 242: Inventare il suono con PURE DATA - Altervista

Winkler, Todd [2001], Composing Interactive Music. Techniques and Ideas Us-ing Max, The MIT Press, Cambridge.

241

Page 243: Inventare il suono con PURE DATA - Altervista

S I TO G R A F I A

AA.VV. [2009], Pure Data Floss Manual, un buon manuale di Pure Data ininglese, http://flossmanuals.net/puredata/.

– [2010a], Pure Data, il sito ufficiale di pd-extended, dove si possono scari-care tutte le versioni del software e la relativa documentazione, http://www.puredata.info/.

Kreidler, Johannes [2011], Programming Electronic Music in Pd, un ottimomanuale di Pure Data, disponibile in varie lingua, ma non in italiano,http://www.pd-tutorial.com/.

Puckette, Miller [2007b], The Theory and Technique of Electronic Music, il li-bro di Miller Puckette, creatore di Max e di Pure Data, scaricabile libera-mente dal suo sito, http://crca.ucsd.edu/~msp/.

Valle, Andrea [2008], the SuperCollider Italian Manual, un manuale in ital-iano di SuperCollider, scritto da Andrea Valle e distribuito sotto licenzaCreative Commons, http://www.fonurgia.unito.it/andrea/wikka.php?wakka=SuperCollider.

Wang, Ge, Cook amd Perry R., et al. [2007], Chuck Manual, il sito dedicatoa Chuck, un altro linguaggio di programmazione dedicato all’audio intempo reale. Da qui è possibile scaricare il software dell’ambiente, ilmanuale e la documentazione varia, http://chuck.cs.princeton.edu/.

242 242

Page 244: Inventare il suono con PURE DATA - Altervista

I N D E X

vline∼, 177, 179

vline∼, 175–178, 189

bang, 19

if, 54

Modulazione di Frequenza, 143–145

object box, 16

print, 15

243 243

Page 245: Inventare il suono con PURE DATA - Altervista

I N D E X

vline∼, 177, 179

vline∼, 175–178, 189

bang, 19

if, 54

Modulazione di Frequenza, 143–145

object box, 16

print, 15

244 244