Inventare il suono

132
Inventare il suono con PURE DATA Manuale introduttivo di musica elettronica vers. 0.1.2 Francesco Bianchi [email protected] 2010

Transcript of Inventare il suono

Page 1: Inventare il suono

Inventare il suono con

PURE DATAManuale introduttivo di musica elettronica

vers. 0.1.2

Francesco Bianchi

[email protected]

2010

Page 2: Inventare il suono

NOTA SUL COPYRIGHT

Questo documento e il suo contenuto sono rilasciati sotto licenzaCreative Commons 2.5 di tipo Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Generico.

Sei quindi libero:

• di riprodurre, distribuire, comunicare al pubblico, esporrein pubblico, rappresentare, eseguire e recitare quest’opera

• di modificare quest’opera

alle seguenti condizioni:

• Attribuzione. Devi attribuire la paternità dell’opera neimodi indicati dall’autore o da chi ti ha dato l’opera in li-cenza e in modo tale da non suggerire che essi avallino teo il modo in cui tu usi l’opera.

• Non commerciale. Non puoi usare quest’opera per finicommerciali.

• Condividi allo stesso modo. Se alteri o trasformi quest’-opera, o se la usi per crearne un’altra, puoi distribuire l’-opera risultante solo con una licenza identica o equivalentea questa.

2

Page 3: Inventare il suono

I N D I C E

Introduzione 9

i L’AMBIENTE 10

1 FONDAMENTI 11

1.1 Cos’è Pure Data? . . . . . . . . . . . . . . . . . . . . 11

1.2 Pd-extended . . . . . . . . . . . . . . . . . . . . . . . 12

1.3 Installazione . . . . . . . . . . . . . . . . . . . . . . . 12

1.3.1 GNU/Linux . . . . . . . . . . . . . . . . . . . 12

1.3.2 Windows e Mac Os X . . . . . . . . . . . . . 13

2 PANORAMICA DELL’AMBIENTE 14

2.1 Pd window e patch window . . . . . . . . . . . . . . . 14

2.1.1 il motore DSP . . . . . . . . . . . . . . . . . . 15

2.1.2 print . . . . . . . . . . . . . . . . . . . . . . . 16

2.2 Le scatole di Pd . . . . . . . . . . . . . . . . . . . . . 16

2.2.1 oggetti e connessioni . . . . . . . . . . . . . . 16

2.2.2 messaggi e liste . . . . . . . . . . . . . . . . . 18

bang e number box . . . . . . . . . . . . . . . . 19

ii DATI 21

3 BASI DI PROGRAMMAZIONE CON PURE DATA 22

3.1 Variabili e costanti . . . . . . . . . . . . . . . . . . . 22

3.1.1 pack e unpack . . . . . . . . . . . . . . . . . . . 25

3.2 Gestione del tempo . . . . . . . . . . . . . . . . . . . 26

3.2.1 metro . . . . . . . . . . . . . . . . . . . . . . . 26

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

3.2.2 line . . . . . . . . . . . . . . . . . . . . . . . . 27

3.2.3 delay . . . . . . . . . . . . . . . . . . . . . . . 29

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

3.3 Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . 30

3.3.1 operatori aritmetici . . . . . . . . . . . . . . . 31

3.3.2 expr . . . . . . . . . . . . . . . . . . . . . . . . 32

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

3.5 Connessioni senza cavi . . . . . . . . . . . . . . . . . 35

3.6 Subpatches e Abstractions . . . . . . . . . . . . . . . . 36

3.6.1 subpatch . . . . . . . . . . . . . . . . . . . . . 37

3

Page 4: Inventare il suono

Indice

3.6.2 abstraction . . . . . . . . . . . . . . . . . . . . 39

3.6.3 graph on parent . . . . . . . . . . . . . . . . . 41

4 VETTORI, GRAFICI E TABELLE 43

4.1 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . 43

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

4.1.2 l’oggetto table . . . . . . . . . . . . . . . . . . 48

5 PROGRAMMAZIONE AVANZATA 50

5.1 Istruzioni condizionali . . . . . . . . . . . . . . . . . 50

5.1.1 operatori relazionali . . . . . . . . . . . . . . 50

5.1.2 select . . . . . . . . . . . . . . . . . . . . . . . 51

5.1.3 operatori logici . . . . . . . . . . . . . . . . . 53

5.1.4 If . . . . . . . . . . . . . . . . . . . . . . . . . 56

5.2 loops e iterazioni . . . . . . . . . . . . . . . . . . . . . 57

6 OGGETTI GUI 60

6.1 Altre GUI dalle librerie di Pd . . . . . . . . . . . . . 63

7 LISTA DEGLI OGGETTI PER MANIPOLARE DATI 66

iii AUDIO 67

8 L’AUDIO DIGITALE 68

8.1 L’oscillatore . . . . . . . . . . . . . . . . . . . . . . . 68

8.1.1 frequenza e ampiezza del segnale . . . . . . 70

8.1.2 osc∼ . . . . . . . . . . . . . . . . . . . . . . . 73

8.1.3 tabwrite∼ . . . . . . . . . . . . . . . . . . . . 74

8.1.4 la rappresentazione del suono . . . . . . . . 74

8.2 Le forme d’onda . . . . . . . . . . . . . . . . . . . . . 78

8.2.1 tabosc4∼ . . . . . . . . . . . . . . . . . . . . 79

8.2.2 onda quadra . . . . . . . . . . . . . . . . . . . 79

pulse width modulation (PWM) . . . . . . . 82

8.2.3 onda a dente di sega . . . . . . . . . . . . . . 85

phasor∼ . . . . . . . . . . . . . . . . . . . . . 86

8.2.4 onda triangolare . . . . . . . . . . . . . . . . 86

9 IL panning 90

9.1 l’oggetto dac∼ . . . . . . . . . . . . . . . . . . . . . . 90

9.2 Controllo del panning . . . . . . . . . . . . . . . . . . 91

9.2.1 Segnali bipolari e unipolari . . . . . . . . . . 93

9.2.2 il DC offset . . . . . . . . . . . . . . . . . . . 93

10 SINTESI ADDITIVA, SINTESI TABELLARE E SINTESI VET-TORIALE 97

10.1 Operatori di segnale . . . . . . . . . . . . . . . . . . 97

10.1.1 expr∼ . . . . . . . . . . . . . . . . . . . . . . 97

4

Page 5: Inventare il suono

Indice

10.2 Sintesi additiva . . . . . . . . . . . . . . . . . . . . . 97

10.2.1 sintesi additiva a spettro armonico . . . . . . 97

10.2.2 sintesi additiva a spettro non armonico . . . 97

10.2.3 spettro fisso . . . . . . . . . . . . . . . . . . . 97

10.2.4 spettro variabile . . . . . . . . . . . . . . . . . 97

10.3 Sintesi vettoriale . . . . . . . . . . . . . . . . . . . . . 97

10.3.1 dissolvenza incrociata automatica fra duetabelle . . . . . . . . . . . . . . . . . . . . . . 97

10.3.2 dissolvenza incrociata automatica fra piùtabelle . . . . . . . . . . . . . . . . . . . . . . 97

10.3.3 algoritmo di selezione per il crossfading fratabelle . . . . . . . . . . . . . . . . . . . . . . 97

10.3.4 controllo del crossfading attraverso grid . . . 97

11 SINTESI SOTTRATTIVA 98

11.1 La sintesi sottrattiva . . . . . . . . . . . . . . . . . . 98

11.1.1 il rumore . . . . . . . . . . . . . . . . . . . . . 98

11.2 I filtri . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

11.2.1 filtri passa-alto . . . . . . . . . . . . . . . . . 101

11.2.2 filtri passa-basso . . . . . . . . . . . . . . . . 101

11.2.3 filtri passa-banda . . . . . . . . . . . . . . . . 101

11.2.4 filtri escludi-banda . . . . . . . . . . . . . . . 101

11.2.5 gli ordini dei filtri . . . . . . . . . . . . . . . . 101

12 MOULAZIONE AD ANELLO (RM), TREMOLO, MODULAZIONED’AMPIEZZA (AM) 102

12.1 La modulazione ad anello . . . . . . . . . . . . . . . 102

12.2 Segnali bipolari e unipolari . . . . . . . . . . . . . . 105

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

12.4 La modulazione d’ampiezza . . . . . . . . . . . . . . 109

12.4.1 l’indice di modulazione . . . . . . . . . . . . 112

13 VIBRATO E MODULAZIONE DI FREQUENZA (FM) 116

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

13.2 Modulazione di frequenza . . . . . . . . . . . . . . . 117

13.2.1 l’inviluppo . . . . . . . . . . . . . . . . . . . . 119

13.2.2 FM a spettro variabile . . . . . . . . . . . . . 123

13.2.3 algoritmo per il controllo random dei parametri124

13.3 Portanti multiple . . . . . . . . . . . . . . . . . . . . 124

13.4 Modulanti multiple . . . . . . . . . . . . . . . . . . . 124

14 SINTESI PER DISTORSIONE NON LINEARE (DNL) 128

14.1 Ancora sulle tabelle . . . . . . . . . . . . . . . . . . . 128

14.2 Teoria della sintesi per distorsione non lineare . . . 128

5

Page 6: Inventare il suono

Indice

14.3 Sintesi per distorsione non lineare . . . . . . . . . . 128

15 INTRODUZIONE ALLA SINTESI GRANULARE 129

15.1 Teoria della sintesi granulare . . . . . . . . . . . . . 129

15.1.1 Panoramica dei tipi di sintesi granulare . . . 129

15.2 Algoritmo per la sintesi Pulsar . . . . . . . . . . . . 129

16 ALTRE APPLICAZIONI DI PURE DATA 130

16.1 GEM e il video . . . . . . . . . . . . . . . . . . . . . 130

16.1.1 un esempio con GEM . . . . . . . . . . . . . 130

16.2 Arduino . . . . . . . . . . . . . . . . . . . . . . . . . 130

16.2.1 pduino . . . . . . . . . . . . . . . . . . . . . . 130

16.3 Il protocollo osc . . . . . . . . . . . . . . . . . . . . . 130

16.3.1 netsend e netreceive . . . . . . . . . . . . . . . 130

16.4 Il Live coding . . . . . . . . . . . . . . . . . . . . . . . 130

16.4.1 suonare in rete: oggcast∼ . . . . . . . . . . . 130

Conclusione 131

Bibliografia 131

Sitografia 131

Indice analitico 131

6

Page 7: Inventare il suono

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

La diffusione massiccia che i moderni calcolatori hanno avutonegli ultimi 30 anni ha prodotto un’onda d’urto dirompente nelmondo della musica elettronica che fino agli anni ’70 era ap-pannaggio di quei pochi fortunati che potevano accedere ai raricentri europei e americani che disponevano delle apparecchia-ture per realizzarla. In pochi anni, a partire dall’avvento deiprimi home computers si sono moltiplicati a dismisura i softwaredi manipolazione dell’audio e oggi chiunque può trovare in reteo in commercio programmi per produrre il proprio brano o ilproprio disco di musica elettronica, spesso senza il bisogno diconoscere a fondo i principi, il funzionamento e le tecniche chestanno alla base dell’audio digitale. Con un semplice click è pos-sibile proiettarsi nel mondo dei suoni più strani senza dover nec-essariamente conoscere una tecnica di sintesi o, quantomeno, unoscillatore.

Stando così le cose, qualcuno a questo punto potrebbe chiedersi,leggittimamente, perché dovrebbe leggere un manuale di musi-ca elettronica. Il panorama del software è talmente vasto chechiunque può trovare il programma adatto alle sue esigenze, inlinea con le proprie conoscenze informatiche e musicali. Eppureci sono varie ragioni perché si potrebbe leggere un manuale delgenere e imparare almeno le basi della programmazione e dellasintesi dell’audio. Proviamo ad elencarne qualcuna:

- Studiare la musica elettronica aiuta a capire meglio quel-lo che si fa con i programmi, soprattutto aiuta a capirequali sono i limiti dei programmi stessi. Ad esempio i sin-tetizzatori software attualmente in commercio sono per lopiù monofunzionali, cioè svolgono un compito e solo quello.Naturalmente in molti casi lo svolgono benissimo, ma nonsanno fare altro. Ci sono sintetizzatori per la Modulazionedi Frequenza, sintetizzatori per la Sintesi Granulare o Ad-ditiva. Se si vuole possedere un sintetizzatore per una di

7

Page 8: Inventare il suono

Indice

queste tecniche bisogna acquistarlo o bisogna accontentarsidi prodotti che non danno ottimi risultati.

- Questi programmi possono costare molto, soprattutto i migliori.Se si volessero avere dei sintetizzatori per realizzare 3 o4 tecniche di sintesi del suono si dovrebbero acquistare3 o 4 prodotti commerciali diversi, questo a scapito delportafogli e del fatto che probabilmente fra qualche annosaranno obsoleti e diverranno quindi praticamente inutili.E’ molto meglio studiare le tecniche di sintesi e il fun-zionamento dell’audio digitale per avere l’opportunità diutilizzare programmi forse più complessi, ma che dannol’opportunità di costruirsi da soli i propri suoni.

- Inventare i propri suoni non è una cosa da poco. I softwarecommerciali sono corredati sempre da moltissimi suonipreconfezionati, detti preset, molto utili, ma che affievolis-cono inevitabilmente il desiderio di cercarne di nuovi. Siinizia ad accontentarsi di quello che offre il convento, chespesso è gradevole e non richiede dispendio eccessivo dienergie. Ma quei suoni saranno sempre dei preset fatti daqualcun altro, non apparterranno mai completamente a chili usa. Quindi studiare e praticare la musica elettronica èun modo per appropriarsi del 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. Unavolta apprese le tecniche di sintesi si possono scegliereprogrammi a costo zero, cioè freeware, come Pure Data,oggetto di questo manuale. Scegliere un programma gra-tuito implica molte cose, alcune meno scontate di quantosi pensi:

– Non è solo una scelta di risparmio, ma una riven-dicazione etica. Sintetizzare il suono attraverso unsoftware digitale implica la progettazione e la realiz-zazione di algoritmi più o meno complessi. Gli al-goritmi non sono altro che rappresentazioni del pen-siero, e il pensiero non si paga, nessun prezzo.

– Usare un software libero significa condividerne unafilosofia basata sulla condivisione dei saperi. I pro-

8

Page 9: Inventare il suono

Indice

grammi liberi sono tali in tutto e per tutto nella mag-gior parte dei casi. Si può prelevare il sorgente, stu-diarlo, modificarlo e redistribuirlo. Non a caso in-torno a questi software ci sono delle vere e propriecomunità che si scambiano opinioni, idee e proget-ti, condividendo liberamente il proprio pensiero conaltri.

– Il software libero è soggetto a mutamento continuo, aun divenire costante che lo pone nella condizione dimigliorare molto più velocemente del software com-merciale e di non invecchiare mai.

Studiate quindi la musica elettronica e praticatela, possibilmentecon software libero.

Buon divertimento!

9

Page 10: Inventare il suono

Parte I

L’A M B I E N T E

Page 11: Inventare il suono

1F O N DA M E N T I

1.1 COS’È PURE DATA?

Traducendo dal sito ufficiale, apprendiamo che Pure Data è unambiente di programmazione grafica in tempo reale per pro-cessare audio e video1. Cerchiamo di entrare nel dettaglio diquesta descrizione. Pure Data è prima di tutto un linguaggio diprogrammazione perché consente di realizzare algoritmi più omeno complessi come tutti gli altri linguaggi2. L’interfaccia concui il musicista-programmatore parla con Pd è grafica, quindinon c’è la necessità di scrivere il codice in un editor di testo, masi realizzano delle patch combinando fra loro vari tipi di oggettigrafici. Nel gergo dei sintetizzatori analogici una patch rappre-sentava l’insieme dei collegamenti fra i suoi moduli. Pd mutuaquesto concetto: attraverso una patch si definisce graficamentel’ordine con cui i vari oggetti sono collegati fra loro. Gli algo-ritmi vengono creati selezionando una serie di entità graficheall’interno di una finestra, detta patch window.

Pd funziona in tempo reale, quindi gli algoritmi sono interat-tivi e i parametri possono essere modificati durante l’esecuzione.E’ anche possibile cambiare la struttura stessa di tali algoritmimentre sono attivi, aggiungendo o rimuovendo moduli in modosemplice e intuitivo.

Pd nasce con la funzione di creare applicazioni audio e, daqualche tempo, video. Una foltissima comunità di sviluppatori,

1 http://puredata.info/2 Un algoritmo si può definire come un procedimento che consente di ottenere

un risultato atteso eseguendo, in un determinato ordine, un insieme di passisemplici corrispondenti ad azioni scelte solitamente da un insieme finito http://it.wikipedia.org/wiki/Algoritmo

11

Page 12: Inventare il suono

1.2 PD-EXTENDED

musicisti, hackers e appassionati sforna ogni giorno nuove ap-plicazioni e librerie che potenziano e aumentano le funzionalitàdi questo ambiente versatile e libero. Si, perché Pure Data èun software libero, e i suoi sorgenti possono essere scaricati, stu-diati, modificati e redistribuiti da chiunque. Inoltre Pure Data èmultipiattaforma, 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 ametà degli anni ’80 aveva sviluppato Max, in seguito divenutoun software commerciale3. Pd riprende le idee e i concetti diquest’ultimo, pur basandosi su una filosofia più libera e apertache ne fa un sistema più dinamico e dalle prospettive future piùinteressanti.

1.2 PD-EXTENDED

Allo stato attuale Pd è arrivato alla versione standard 0.42.5, det-ta Vanilla, scaricabile dal sito del suo creatore4 . Il consigliodi chi scrive è però quello di scaricare la versione extended, checontiene non solo il programma standard, ma anche numeroselibrerie aggiuntive che estendono notevolmente le sue funzional-ità. Attualmente Pd-extended è alla versione 0.41.45.

1.3 INSTALLAZIONE

1.3.1 GNU/LINUX

Prendiamo in esame solo l’installazione sul sistema Ubuntu GNU/Linux, sistema operativo sul quale è stato scritto il presente man-uale e al quale ci riferiamo citando le combinazione di comandida tastiera su Pd. Come già scritto in precedenza, il consiglio èquello di scaricare e installare l’ultima versione di Pd-extended.Per fare questo è sufficiente aggiungere la seguente riga al file/etc/apt/sources.list:

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

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

4 http://crca.ucsd.edu/~msp/software.html5 http://puredata.info/downloads

12

Page 13: Inventare il suono

1.3 INSTALLAZIONE

nel caso si stia operando in una distribuzione Ubuntu Hardy, incaso diverso sostituire la dicitura hardy con il mome della dis-tribuzione di Ubuntu installata.

Successivamente si può eseguire l’installazione dal package man-ager di Ubuntu, Synaptic. Aprirlo, aggiornare l’archivio deipacchetti, cercare Pd-extended e dopo averlo marcato far partireil processo di installazione, alla fine del quale Pd potrà essererichiamato da un terminale digitando semplicemente:

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 Windowso per Mac OS X, eseguire il file scaricato e seguire le sempliciistruzioni di installazione.

13

Page 14: Inventare il suono

2PA 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 window) che ha due funzioni principali:

- mostrare dei messaggi

- consentire la configurazione dell’audio e del MIDI e definirei percorsi in cui Pd cerca le librerie da caricare

Alcuni messaggi vengono visualizzati in fase di avvio del pro-gramma, riguardano le librerie esterne caricate e gli eventualierrori nella configurazione dell’audio o del MIDI. Altri messag-gi possono essere mostrati nella Pd window durante la normaleesecuzione del programmano e il più delle volte riguardano er-rori di procedura o comunicazioni prodotte dall’utente tramitel’oggetto print che sarà esaminato successivamente (vedi 2.1.2).

La configurazione dell’audio avviene tramite la voce di menùMedia che consente di impostare il MIDI (MIDI settings), l’audio(Audio settings), di avviare il motore DSP (Audio on/off) e ditestarne il funzionamento (test Audio and MIDI).

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

1 Esistono numerose librerie, generalmente scritte in C o in Pd stesso, moltedelle quali sono già incluse nel pacchetto Pd-extended, altre scaricabili dal sitoufficiale o da altri siti (vedi sitografia)

14

Page 15: Inventare il suono

2.1 PD window E patch window

Nella versione extended il Path e lo Startup sono già impostatiper caricare la maggior parte delle librerie necessarie per unacompleta funzionalità dell’ambiente.

Generalmente all’apertura del programma ci si trova di frontesoltanto la Pd window. Per iniziare a scrivere gli algoritmi è nec-essario aprire una finestra di patch dal menù File/new. Com-pare così la patch window che è l’ambiente di programmazionevero e proprio. Il suo menù è molto simile a quello della Pdwindow ma ovviamente più orientato all’editing delle patch.

La patch window può trovarsi in due stati funzionali diversi: editmode e run mode. Il primo permette di inserire tutti gli elementiall’interno della finestra, mentre il secondo è necessario per ge-stire la patch quando questa è in azione. Tutti gli oggetti interat-tivi cioè quelli che contengono parametri modificabili via mouseo tastiera, funzionano soltanto in run mode, mentre in edit modepossono solo essere aggiunti o rimossi. Per passare da uno statoall’altro si usa la combinazione di tasti ctrl-E.

2.1.1 IL MOTORE DSP

Quando gli algoritmi di Pd processano esclusivamente dati, ilprogramma è completamente attivo sin dalla sua apertura. Nelcaso in cui invece si devono processare segnali audio, è neces-sario attivare il motore DSP per ascoltare il risultato delle op-erazioni sui segnali. Il motore DSP, acronimo di Digital SignalProcessor, si occupa di elaborare il segnale in tempi rapidissimie di permettere la sua trasformazione da digitale ad analogico eviceversa.Nel momento in cui il coder vuole suonare una patch deve quindiattivare il motore DSP, mediante l’apposita voce di menu Medi-a/audio on. In alternativa può premere la combinazione ditasti ctrl-/. Vedremo successivamente le altre possibilità diintervenire sull’attivazione e la disattivazione del motore DSP,quando si tratterà dell’audio nella seconda parte del presentemanuale.

15

Page 16: Inventare il suono

2.2 LE scatole DI PD

2.1.2 print

Durante l’esecuzione delle patch può accadere che vengano auto-maticamente visualizzati dei messaggi nella Pd window, in par-ticolare alla presenza di errori, ma c’è un oggetto che permetteal programmatore di visualizzare nella Pd window il messaggioo dato che desidera. Si tratta di print, che può solo riceveredati o messaggi e stamparli a video nella Pd window. In alcunecircostanze è utile per verificare il corretto funzionamento deglialgoritmi.

Hello World!

print

Figura 1: un click del mouse sul messaggio produce un output nellaPd window

2.2 LE scatole DI PD

La finestra di patch è il luogo che permette la realizzazione deglialgoritmi di Pd. Essendo un ambiente grafico la finestra si riem-pirà di entità di varia natura, dette scatole (box). Queste scatolesono di quattro tipi: oggetti, messaggi, GUI e commenti e si cre-ano dal menù Put oppure premendo ctrl+n dove n è 1 per glioggetti, 2 per i messaggi, 5 per i commenti. I numeri 3 e 4 cre-ano delle GUI particolari, simboli e number box che esamineremosuccessivamente.

2.2.1 OGGETTI E CONNESSIONI

Gli elementi fondamentali della programmazione in Pure Data le object boxsono gli oggetti, rappresentati dalle object box, caratterizzate dal-la forma rettangolare e dalla presenza di entrate (inlets), nellaparte superiore, e di uscite (outlets), nella parte inferiore.

Un oggetto può creare o processare dati oppure segnale audio ericeve attraverso gli inlets messaggi, liste o uscite di altri oggetti.

16

Page 17: Inventare il suono

2.2 LE scatole DI PD

Può inviare dati o segnali ad altri oggetti. All’interno dell’objectbox si situano gli atomi, cioè stringhe di caratteri o simboli sepa-rati da spazi che rappresentano il tipo di oggetto e gli eventualiargomenti dell’oggetto stesso2.

random 250

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

I collegamenti fra oggetti, anzi fra tutte le object box avvengonotramite cavi di connessione che si realizzano tenendo premuto iltasto sinistro del mouse a partire dall’outlet mittente e rilascian-dolo non appena si è raggiunto l’inlet di arrivo.

+

random

select 0 5 7

Figura 3: collegamenti fra object box

L’inlet di sinistra di ogni oggetto è detto caldo poiché alla ricezionedi un messaggio, di un dato o di un segnale, produce immediata-mente un’uscita dall’oggetto stesso. Tutti gli altri inlets sono fred-di, quindi nel momento in cui ricevono un dato, messaggio o seg-nale, lo inseriscono temporaneamente all’interno dell’oggetto, fi-no a che lo stesso non viene processato all’attivazione dell’inletcaldo.Come già detto, gli oggetti insistono su dati o segnali audio.Graficamente gli oggetti-audio si distinguono da quelli per i dati

2 il concetto di atomo è mutuato dal Lisp, un linguaggio di programmazioneorientato all’elaborazione di espressioni simboliche rappresentate sotto forma diliste e atomi. Una lista si ha in presenza di più espressioni Lisp, un atomoinvece è una lista con una sola espressione. Per approfondire: www.diee.unica.it/~roli/IA/Materiale%20didattico/AA0910/Lisp.pdf

17

Page 18: Inventare il suono

2.2 LE scatole DI PD

pack 0 0

counter

Figura 4: l’entrata fredda riceve un dato dall’oggetto counter, ma packnon produce alcun dato in uscita finché l’inlet caldo nonriceverà qualcosa

perché il primo atomo (ovvero il nome) termina sempre con il seg-no della tilde (∼) e gli inlet e outlet che processano segnale sonoscuri. I cavi che trasportano segnale sono più spessi di quelli chetrasportano dati.

random 1000

osc~

dac~

Figura 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 ri-entrante. Possono contenere stringhe di caratteri, numeri, listeo variabili e vengono attivati con un click del mouse quando siè in run mode oppure alla ricezione di un altro messaggio o diparticolari azioni.

18

Page 19: Inventare il suono

2.2 LE scatole DI PD

questo è un messaggio

print

Figura 6: un click con il mouse sul messaggio produce un output delmessaggio stesso nella Pd window

bang E number box

Un altro modo di attivare un messaggio è quello di utilizzareun bang, uno dei più importanti oggetti di Pd. La sua funzioneè quella di innescare un’azione o una sequenza di azioni, puòmettere in funzione un algoritmo. Si avrà modo di incontrarnepraticamente in ogni patch.

questo è un messaggio

print

Figura 7: la stessa patch precedente, con la differenza che il messaggioviene attivato da un click del mouse sul bang

Il bang ha una sua versione grafica (si ottiene premendo all’in-terno della patch ctrl+shift+b e una doppia versione testuale,che permette di evitare un eccessivo uso di elementi grafici cheappesantiscono l’esecuzione dei programmi.Un altro oggetto molto comune nelle patch di Pd è la numberbox che consente di inviare messaggi numerici con il vantaggiodi poter variare i numeri all’interno della box stessa con la pres-sione e il trascinamento del mouse verso il basso per diminuiree verso l’alto per aumentare il numero stesso. Per comodità èpossibile stabilire eventuali minimi e massimi della number boxpremendo il destro del mouse e andando sulle proprietà del-

19

Page 20: Inventare il suono

2.2 LE scatole DI PD

bang

b

bang grafico

oggetti bang

Figura 8: le varie versioni del bang

l’oggetto3 . Una number box può inviare o ricevere dati attraversoi suoi inlet.

7

+ 5

12

Figura 9: l’oggetto ’+’ effettua in questo caso la somma fra il numeroche entra nell’inlet di sinistra e 5, e manda l’output allanumber box sottostante

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

20

Page 21: Inventare il suono

Parte II

DAT I

Page 22: Inventare il suono

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

3.1 VARIABILI E COSTANTI

Pure Data è un linguaggio di programmazione orientato all’au-dio, quindi al tempo. Per tale ragione i valori e le quantità pas-sate agli oggetti sono quasi sempre variabili, interattivamenteo meno. In fase di apertura di una patch ci potranno esseredelle quantità inizializzate, ma esse all’occorrenza potranno es-sere variate durante l’esecuzione del programma. Ne sono es-empio i parametri passati agli oggetti dall’interno dell’objet box,cioè gli atomi che seguono il primo (il quale, ricordiamo, da ilnome all’oggetto stesso).

Per comprendere meglio questo concetto esaminiamo la patchche abbiamo già incontrato nella figura 9 . L’inlet di sinistradell’oggetto ’+’ riceve una quantità variabile che viene sommataalla costante ’5’ definita all’interno dell’object box. Così com’è lapatch non fa altro che operare una somma fra la quantità in entra-ta e la costante definita nell’oggetto. L’inlet destro dell’oggetto’+’ offre però l’opportunità di variare il secondo addendo dellasomma.Esaminiamo il comportamento della patch in figura 10: se cambi-amo il primo elemento dell’addizione senza toccare il secondo,l’output sarà lo stesso di prima: somma del primo elemento con5. Ora proviamo a cambiare il secondo addendo. Non avremoalcun output!

Non va dimenticato che gli inlet successivi al primo di sinistrasono freddi: immagazzìnano il dato in entrata senza produrreuscita. E’ necessario quindi dire all’oggetto ’+’ di effettuare l’-operazione fra i due nuovi addendi e di far uscire il risultato.

22

Page 23: Inventare il suono

3.1 VARIABILI E COSTANTI

30

10 20

+ 5

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

Nel caso di questo oggetto è sufficiente inserire nell’inlet di sinis-tra un bang, collegato all’uscita del secondo addendo, che ordinaall’object box di far uscire il risultato immediatamente1 .

17

14 3

+ 5

Figura 11: il bang collegato all’uscita del secondo addendo, in entratanell’inlet sinistro dell’oggetto ’+’ rende caldo l’inlet destrodell’oggetto stesso

E’ buona norma stabilire dei valori in fase di inizializzazione del-la patch in modo che essa sia immediatamente funzionante allasua apertura. Per fare questo è sufficiente scrivere i parametridegli oggetti all’interno delle object box. Quando questo non è

1 L’oggetto ’+’ oltre ad accettare numeri in entrata, accetta anche bang nell’inletdi sinistra. Il bang non fa altro che dire all’oggetto di far uscire ciò che ha inmemoria, cioè il risultato dell’addizione

23

Page 24: Inventare il suono

3.1 VARIABILI E COSTANTI

possibile si può ricorrere al’oggetto loadbang che attiva un bangall’apertura della patch (figura 12).

12

7

loadbang

+ 5

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

e 12

Vi sono circostanze in cui è necessario specificare delle variabiliall’interno delle object box. Questo è possibile attraverso il sim-bolo $n, dove n è un numero identificativo. La variabile assumedi volta in volta il valore che la message box riceve nel suo inlet(figura 13)2 .

scelgo il numero $1

12

print

Figura 13: variabile in una message box, osservare l’output nella Pdwindow

2 I simboli identificativi delle variabili devono iniziare da $1 e seguire ordinata-mente. Se una message box ha 3 variabili $1 $2 ed $3 e riceve una lista di 3

atomi, il primo andrà nella variabile $1, il secondo nella $2, etc. . .

24

Page 25: Inventare il suono

3.1 VARIABILI E COSTANTI

3.1.1 pack E unpack

Nel caso in cui una messege box contenga più di una variabile ènecessario che ognuna abbia un’univoca denominazione. Cosìla prima variabile sarà $1, la seconda $2 e così via.

L’inlet del messaggio riceve una lista con i valori che le vari-abili devono assumere. Per realizzare tali liste esiste un oggettoapposito chiamato pack, che mette insieme diversi valori singoli(atomi), combinandoli in liste. Gli argomenti di pack inizializzanoil valore del relativo inlet al valore segnato. Ad esempio pack 219 25 avrà 3 inlet rispettivamente inizializzati con i valori 2, 19,25. Un bang in entrata nell’inlet sinistro produrrà l’output dellalista in memoria in quel momento (fig. 14).

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

print

pack 20 1 2010

0 0 0

Figura 14: pack: un click sul bang senza cambiare i valori delle num-ber box produce l’uscita dei valori inizializzati. Una vari-azione delle number box produce un output nel momento incui viene cambiato il valore dell’inlet di sinistra. Osservareil risultato nella Pd window

L’oggetto unpack fa il contrario rispetto a pack: prende una listae ne convoglia i singoli atomi attraverso i suoi inlet.

25

Page 26: Inventare il suono

3.2 GESTIONE DEL TEMPO

unpack 0 0 0

20 1 2010

20 1 2010

Figura 15: unpack: un click sulla message box produce un output inognuno dei tre outlet

3.2 GESTIONE DEL TEMPO

Come detto in precedenza, Pd è un linguaggio orientato al tem-po, quindi ci sono molti oggetti deputati alla gestione di eventitemporali. Esamineremo alcuni di questi senza dimenticare chela presente trattazione non può trattare di molti altri oggetti cheil programmatore scoprirà nel suo cammino3.

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 tem-porale fra un bang e l’altro. Per funzionare ha bisogno che siaattivato attraverso un messaggio diverso da zero o un bang. Unmessaggio uguale a zero oppure stop, spegne l’oggetto.

UN CONTATORE

Attraverso l’oggetto metro e un altro oggetto che esamineremo inquesto paragrafo, possiamo costruire un contatore4. La patch nonfa altro che emettere a intervalli regolari (nel nostro caso 500 ms)

3 Premendo il destro del mouse su un oggetto si può accedere all’help dellostesso. In molti casi la pagina dell’help rimanda anche ad oggetti simili aquello esaminato. E’ sempre utilissimo pertanto navigare fra le pagine di helpche sono uno strumento di navigazione fondamentale fra gli oggetti di Pd.

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

26

Page 27: Inventare il suono

3.2 GESTIONE DEL TEMPO

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"

Figura 16: metro

un numero intero a partire da zero tale che il successivo sia mag-giore del precedente di una unità. L’algoritmo necessita di unoggetto che permetta di conservare in memoria un numero intero.L’oggetto che fa al caso nostro è int. L’inlet destro di int riceveun intero e lo memorizza finché un bang nell’inlet sinistro non locostringe a inviarlo dall’outlet. All’apertura della patch l’oggettoint viene inizializzato con uno zero nella sua memoria (tramiteloadbang. All’attivazione di metro, int riceve un bang nella suaentrata calda facendo uscire zero, che viene mandato all’uscitadella patch e contemporaneamente viene sommato a 1, tramitel’oggetto ’+’. Quest’ultimo a sua volta spedisce il risultato, cioèuno, nell’entrata fredda di int. Il nuovo valore (uno) uscirà nonappena il successivo bang prodotto da metro non sopravvenga, ecosì via (figura 17).

3.2.2 line

Un oggetto molto comune in Pd è line, che generara delle rampeper raggiungere un determinato valore. line ha bisogno di al-meno due argomenti, il valore-obiettivo, cioè la quantità da rag-giungere, e il tempo in millisecondi necessario a raggiungerlo. Inpresenza di un messaggio con una lista di due numeri, line rag-giungerà il primo nel tempo in millisecondi indicato dal secondo(figura 18).

27

Page 28: Inventare il suono

3.2 GESTIONE DEL TEMPO

metro 500

0 1

int

0

+ 1

23

loadbang

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

Un oggetto molto comune in Pd è line, che generara delle rampeper raggiungere un determinato valore. Accetta due argomentivia message box, ovvero il valore-obiettivo e il tempo in millisec-ondi per raggiungerlo (fig. 18).Una volta terminato il suo percorso line mantiene in memoria ilvalore-obiettivo, quindi un secondo click sulla message box nonprodurrà un nuovo output perché si direbbe a line di creare unpercorso da 1000 a 1000 in 5 secondi. Se volessimo reinizializzareogni volta l’oggetto line ad esempio chiedendogli di creare ognivolta il percorso da 0 a 1000 in 5 secondi, basterà creare unalista di tre atomi, con il primo che indica il valore di partenza, ilsecondo con il valore-obiettivo, separato dal precedente da unavirgola 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 val-ore e il successivo (default 20 ms)

28

Page 29: Inventare il suono

3.2 GESTIONE DEL TEMPO

1000 5000

line

0

Figura 18: line al momento della creazione è inizializzato a zero, quin-di in questo caso al momento del click sulla message boxinizierà un percorso da 0 a 1000, completandolo in 5

secondi

line

0, 1000 5000

0

Figura 19: si può ricominciare la rampa da 0 a 1000 ogni volta che sipreme sulla message box

Nella figura 20 il valore-obiettivo è 2000, da raggiungere in 5

secondi. La rampa inizia da 1000 e i valori escono ogni mezzosecondo (500 ms).

3.2.3 delay

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

3.2.4 line MULTIRAMPA CON delay

Con gli oggetti line e delay possiamo costruire rampe multiplein modo molto semplice. E’ sufficiente preparare tante messagebox quante saranno le rampe e metterle in azione in successione

29

Page 30: Inventare il suono

3.3 ARITMETICA

0

line 1000 500

2000 5000

Figura 20: rampa da 1000 a 2000 in 5 secondi, con step di mezzosecondo fra un valore e l’altro in uscita

metro 1000

delay 500

1

0

Figura 21: i bang saranno intermittenti

con delay. Nel caso della patch in figura 22 c’è un oggetto grafi-co per rappresentare le rampe, una slider orizzontale, di cui cioccuperemo in un apposito capitolo.

3.3 ARITMETICA

Pd dispone di una serie di oggetti che consentono di effettuarele più comuni operazioni matematiche. Abbiamo già incontratol’oggetto ’+’ che permette l’operazione di somma. Nel prossi-mo paragrafo esamineremo alcuni altri oggetti per operare suinumeri.

30

Page 31: Inventare il suono

3.3 ARITMETICA

0, 127 1000 50 600 100 1500

line

0

delay 1000 delay 1600

Figura 22: click sul bang più in alto della patch

3.3.1 OPERATORI ARITMETICI

Gli oggetti per le operazioni aritmetiche e matematiche funzio-nano tutti allo stesso modo, per ora ci limitiamo a darne qui unelenco. Successivamente avremo modo di usarli massicciamente.

Operazioni aritmetiche:

• +

• -

• *

• /

• pow

Operazioni trigonometriche:

• sin

• cos

• tan

31

Page 32: Inventare il suono

3.4 GENERATORI DI NUMERI CASUALI

• atan

• atan2

Operazioni sulle frazioni

• mod

• div

e molti altri...

3.3.2 expr

expr è un versatile strumento che permette di raggruppare in ununico oggetto una serie di operazioni. Con Pd può capitare spes-so di dover effettuare una sequenza di operazioni matematiche,attraverso expr si possono combinare insieme in modo da nonoccupare spazio e da rendere più chiara per il programmatorela sequenza delle operazioni stesse. Per poter funzionare condei dati in ingresso expr necessita di simboli per rappresentaredelle variabili, che, a differenza delle variabili delle message boxsi scrivono in questa forma: $xn dove x è il tipo della variabile en è il numero ordinale che la rappresenta (fig. 23).Le variabili possono essere di tipo intero, decimale, simbolo e rispet-tivamente avranno la forma $in, $fn e $sn.

3.4 GENERATORI DI NUMERI CASUALI

Dopo i più comuni operatori matematici è utile soffermarsi sualcuni oggetti di Pd che generano numeri casuali. Qualunquecoder prima o poi si imbatte nell’esigenza di usare numeri ca-suali e chi usa Pd non fa eccezione. Il primo strumento cheesaminiamo è random che genera un numero casuale ogni vol-ta che riceve un bang. Questo numero viene scelto in un rangecompreso fra 0 e il numero definito nel primo argomento del-l’oggetto meno 1. Un secondo argomento, facoltativo, impostail seme della sequenza. Senza volersi soffermare troppo sulle im-plicazioni tecniche della generazione di numeri casuali, c’è dadire quantomeno che generalmente quando si parla di genera-tori di numeri casuali si usa un termine improprio, perché inrealtà si tratta di generazione di numeri pseudo-casuali, poichéquesti vengono generati da algoritmi. Nel caso di Pd alla base

32

Page 33: Inventare il suono

3.4 GENERATORI DI NUMERI CASUALI

4

+ 12

42.6667 42.6667

/

* 24 - 7

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

Figura 23: nella parte sinistra le operazioni si succedono dall’alto ver-so il basso, nella parte destra le stesse vengono raggruppateda expr. Valutare i due algoritmi in parallelo con un clicksul bang

della generazione di questi numeri c’è una complessa equazionecon una serie di variabili. Il seme della sequenza generata non èaltro che una variabile di questa equazione.random produce solo interi, ma se volessimo generare dei numeripseudo-casuali decimali potremmo semplicemente dividere l’output(figura 25).L’oggetto randomF fa la stessa cosa, ma con una precisione moltomaggiore. Se invece volessimo creare una sequenza di numeripesata, cioè generata con una certa probabilità potremmo usarel’oggetto moses che consente di convogliare un flusso di numeriin due outlet diversi in base a un valore-soglia definito comeargomento. I numeri al di sotto del valore-soglia vengono con-vogliati dall’outlet sinistro, quelli al di sopra da quello destro.

33

Page 34: Inventare il suono

3.4 GENERATORI DI NUMERI CASUALI

random 250

metro 500

1 0

0

Figura 24: la patch genera un numero pseudo-casuale ogni mezzosecondo

metro 500

1 0

0

random 1001

/ 1000

Figura 25: la patch genera un numero pseudo-casuale compreso fra 0

e 1, con 3 cifre decimali

L’oggetto decide produce pseudo-casualmente solo sequenze di0 e 1, mentre drunk funziona come random ma sceglie il numeroeffettuando un salto che lo distanzia dal precedente al massimoquanto stabilito nel secondo argomento (stepsize).In figura 28 si può osservare il diverso andamento di due se-quenze casuali. La prima, generata con random, ha una dis-tribuzione lineare, la seconda, frutto di drunk è molto più ordinata:gli elementi della sequenza si spostano entro un range limitato(definito dal secondo argomento di drunk).

34

Page 35: Inventare il suono

3.5 CONNESSIONI SENZA CAVI

metro 500

1 0

random 100

moses 25

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

metro 500

1 0

80

drunk 100 10

Figura 27: ogni mezzo secondo viene generato un numero compresofra 0 e 99, dove ogni numero è a una distanza minore ouguale 10 dal precedente

3.5 CONNESSIONI SENZA CAVI

Al fine di evitare di riempire la patch window di cavi che possonorenderne meno chiara l’interpretazione, si possono usare i dueoggetti send e receive, che permettono di creare una connessionesenza fili fra le box. L’argomento di receive è un nome identifica-tivo che deve essere identico a quello di send. E’ possibile averepiù oggetti receive con lo stesso identificativo: tutti riceveranno

35

Page 36: Inventare il suono

3.6 subpatches E abstractions

random

drunk

Figura 28: in alto la sequenza generata da random, in basso quellacreata con drunk, con una stepsize di 25

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 ar-ticolate. In questi casi Pd mette a disposizione degli strumentiper annidare delle porzioni di patch in box apposite. Esistono duemodi per annidare contenuti dentro tali box, il primo è quello dicreare delle subpatch, l’altro quello di creare abstraction. Le sub-patch appaiono come delle normali object box formate dal nome

36

Page 37: Inventare il suono

3.6 subpatches E abstractions

4

send numero

receive numero

r numero

r numero

4

4

8

* 2

Figura 29: connessioni senza fili

pd seguito da un nome identificativo per la subpatch, esse pos-sono essere utilizzate solo allinterno della patch dove sono statecreate o all’interno di altre subpatch della stessa patch. Le abstrac-tion invece, pur apparendo come delle normali object box, hannosolo un nome identificativo, ma vengono salvate indipendente-mente dalla patch in cui vengono usate e sono riutilizzabili inaltre patch.

3.6.1 subpatch

Per creare una subpatch è sufficiente scrivere all’interno di unanuova object box pd nome, si aprirà una nuova finestra all’internodella quale si inserirà il contenuto della subpatch. Questa nuovafinestra si può chiudere in qualsisasi momento senza bisogno disalvarla e riaprirla con un semplice click sulla object box in runmode. La patch in figura 30 realizza un algoritmo attraverso ilquale vengono emessi dei bang da quattro outlet diversi, il primoda sinistra se random emette un numero fra 1 e 125, il secondo seil numero è compreso fra 126 e 250, e così via. L’algoritmo dellafigura 31 è identico al precedente, con l’unica differenza che èrealizzato con una subpatch. Le subpatch funzionano esattamentecome le patch solo che devono contenere al loro interno le entratee le uscite necessarie perché siano, nella patch, collegabili alle boxda cui ricevono dati e a cui li inviano.

37

Page 38: Inventare il suono

3.6 subpatches E abstractions

random 500

+ 1

moses 250

metro 500

moses 126 moses 376

Figura 30: un semplice algoritmo senza annidamenti

pd miasubpatch

Figura 31: l’algoritmo precedente realizzato con una subpatch

Come si può vedere dalla figura 32 l’interno della subpatch delnostro algoritmo è uguale alla porzione di patch della figura 30,ma in alto c’è l’oggetto inlet che crea un inlet nella subpatch e4 oggetti outlet, che creano i rispettivi 4 outlet per i bang. Lesubpatch possono essere modificate in qualunque momento e, so-prattutto, possono essere duplicate a piacimento. Rappresentanouno strumento molto comodo per rendere più leggibile e chiaroun algoritmo nella patch window, quindi il consiglio è di usarle ilpiù possibile.

38

Page 39: Inventare il suono

3.6 subpatches E abstractions

inlet

outlet

random 500

+ 1

moses 250

metro 500

moses 126 moses 376

outlet outlet outlet

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

3.6.2 abstraction

Un’abstraction non è altro che una patch che può essere richia-mata dall’interno di una patch. Anch’essa, come la subpatch con-tiene gli oggetti inlet e outlet per creare le varie entrate e uscitedell’object box e, a differenza della subpatch, può essere utilizzatain qualunque patch. L’importante è che il file dell’abstraction siasalvato con l’estensione .pd e che si trovi nella stessa directory incui si sta lavorando o in una delle directory definite nel Path delprogramma (cap. 2.1).

Per richiamare un’abstraction è sufficiente aprire un’object box einserire il nome dell’abstraction senza l’estensione .pd. L’abstractionpotrà essere aperta e chiusa in qualunque momento e anchemodificata, a patto che sia salvata, ma il consiglio è di stare atten-ti a modificare un’abstraction dall’interno di una patch: l’abstractionrisulterà modificata in tutti gli altri progetti in cui viene utilizza-ta!

Un’abstraction può anche essere inizializzata con un argomento,questo è possibile scrivendo l’argomento stesso (o gli argomen-

39

Page 40: Inventare il suono

3.6 subpatches E abstractions

ti) dopo il nome. Il primo argomento determina il valore del-la variabile $1, il secondo quello della variabile $2 e così via.Queste variabili possono essere create all’interno degli oggettidell’abstraction, ma non dentro le message box.

myabstraction 100 1000

0

Figura 33: un’abstraction con due argomenti

Osserviamo la figura 33: l’oggetto myabstraction viene inizializ-zato con due argomenti: 100 per la variabile $1, 1000 per la vari-abile $2. Un bang mette in azione l’abstraction. Ma vediamo cosaaccade al suo interno (figura 34). I due argomenti inviati tramite

inlet

outlet

pack $1 $2

line

Figura 34: l’interno dell’abstraction

l’object box myabstraction si sostituiscono a $1 ed $2, che sono levariabili di pack, che riceve quindi la lista (100 1000) che sonorispettivamente il valore-obiettivo e il tempo in millisecondi del-l’oggetto line. Un bang ricevuto dall’inlet dell’abstraction mette inazione line restituendo la rampa all’outlet.

40

Page 41: Inventare il suono

3.6 subpatches E abstractions

3.6.3 GRAPH ON PARENT

subpatch e abstraction possono anche essere pilotate dalla patchsenza bisogno di essere aperte ogni volta ci fosse il bisognodi cambiare un valore. In sostanza subpatch e abstraction pos-sono diventare oggetti interattivi. Per fare questo una dellesoluzioni potrebbe essere quella di creare degli inlet aggiuntivinella subpatch oppure utilizzare un’altro metodo che Pd mette adisposizione. Se nelle proprietà della subpatch (o dell’abstraction,questo sistema funziona su entrambe), cui si accede premendo ilsinistro del mouse su un punto qualunque della subpatch window,selezioniamo l’opzione graph on parent, comprarirà all’internodella subpatch stessa un riquadro all’interno del quale possiamomettere ciò che vogliamo sia visibile dalla patch genitrice. Glioggetti consentiti sono essenzialmente GUI’s, quindi number box,sliders, radio button etc. . .

1 0

pd submetro

301

regola_metro

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

Nel caso della figura 35 la subpatch submetro contiene un oggettometro con una number box che regola la distanza in millisecondifra i bang.I cavi di connessione vengono nascosti nella patch in modo darendere più chiara la lettura dell’algoritmo.

41

Page 42: Inventare il suono

3.6 subpatches E abstractions

inlet

outlet

metro 500

301

regola_metro

Figura 36: l’interno della subpatch. Per creare il riquadro di visibil-ità basta andare sulle proprietà della subpatch e selezionarel’opzione graph on parent

42

Page 43: Inventare il suono

4V 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 con-servare e manipolare comodamente una grande quantità di dati.Può essere pensato come un contenitore di locazioni di memoria,identificate da un indice, attraverso il quale è possibile accederealla locazione desiderata. I vettori in Pd sono rappresentati dagrafici bidimensionali che hanno sull’ascissa l’indice e sull’ordi-nata il valore corrispondente. Si tratta sempre di vettori monodi-mensionali che gestiscono collezioni di numeri interi, decimali odi segnale (ma di questi ultimi ci occuperemo in seguito) quin-di l’indice è un intero che identifica una e una sola posizionein memoria. Nel linguaggio C i vettori monodimensionali ven-gono definiti, come le variabili, in questo modo:

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

che crea il vettore i di tipo intero di 4 elementi. Immediatamentedopo riempie il vettore con i valori interi 5, 2, 7, 3. In Pd questovettore viene rappresentato come in figura 37.Ricordiamo che l’indice di un vettore inizia da 0, quindi un vet-tore di 4 elementi avrà un indice che va da 0 a 3. Un array inPd si crea dal menu Put/Array. Se premiamo col destro delmouse sul grafico possiamo accedere alle proprietà dell’array,dove possiamo impostare la dimensione del grafico e del vettore.Osserviamo dalla figura 37 le seguenti cose:

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

43

Page 44: Inventare il suono

4.1 VETTORI

i

0 1 2 3

0

5

10

Figura 37: vettori: sull’asse delle ascisse c’è l’indice, sull’ordinata ilvalore

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

3. incolonnati a sinistra ci sono dei valori che rappresentanoil range dell’ordinata, quindi dei valori che può assumereogni elemento dell’array

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

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

- interattivamente, cioè con il mouse

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

;

nome_vettore (comando) argomenti

Si possono scrivere esplicitamente i singoli valori inserendonella message box l’indice del primo elemento da scrivereseguito da tutti i valori da inserire nel vettore. Si possono

44

Page 45: Inventare il suono

4.1 VETTORI

possono produrre i valori del vettore attraverso una fun-zione trigonometrica come sinesum (somma di seni), segui-ta dal numero degli elementi del vettore e dal valore di og-ni curva sinusoidale (compreso fra 0 e 1), oppure cosinesum,uguale alla precedente, ma che genera una cosinusoide ouna somma di cosinusoidi. Si possono inoltre leggere idati richiamandoli da un file di testo con il comando readseguito dal nome del file che contiene di dati (figura 38).

- con oggetti speciali che scrivono i dati all’interno dei vet-tori. L’oggetto tabwrite scrive valori all’interno di un vet-tore. Nell’inlet di sinistra entrano i valori, in quello di de-stra i relativi indici. Il messaggio set in entrata a sinistra de-termina il nome dell’array sul quale operare, nome che puòanche essere inserito nell’oggetto come argomento, subitodopo il nome (figura 39).

Nella patch della figura 39 until provoca l’uscita di una sequenzadi 32 bang che vengono numerati da un contatore, che a sua vol-ta li spedisce all’inlet destro di tabwrite (l’indice dell’array). Con-temporaneamente i bang producono l’uscita di numeri pseudo-casuali decimali, compresi fra 0 e 2, dall’oggetto randomF. Daquesti ultimi viene sottratto 1 in modo da avere un range com-preso fra -1 e 1, che rappresentano i valori minimi e massimi delgrafico del vettore.

Punti 2-4. L’interfaccia del vettore, il grafico, può presentare an-che elementi come un etichetta che rappresenta l’ordinata e unoche rappresenta l’ascissa. Questi elementi si possono aggiungeretramite message box secondo le seguenti sintassi:

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 co-mando. Per verificare il funzionamento di questi comandi sicopi il codice della figura 40, che mostra un vettore di 100 punti,con range da -1 a 1.

45

Page 46: Inventare il suono

4.1 VETTORI

;

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

Figura 38: attivare le tre message box con un click e verificarne il risul-tato sul grafico. Il comando resize ridimensiona il vettoresecondo quanto indicato dal suo argomento, in questo caso32

Fra le proprietà del grafico si può anche impostare il modo concui verrà disegnato il grafico: come punti discreti (draw as points),come punti interpolati (polygon) cioè singoli punti uniti da unalinea che traccia il percorso più breve fra punti adiacenti, infinecome curva di bézier (bezier) che addolcisce gli spigoli (figura 41).

4.1.1 LEGGERE UN VETTORE

Un vettore può essere letto e utilizzato per processare altri dati.Uno degli oggetti che permettere di leggere i dati di un vettoreè tabread che ha un unico inlet che riceve l’indice del valore da

46

Page 47: Inventare il suono

4.1 VETTORI

tabwrite i

int 1 + 1

randomF 2

- 1

1

until

32

i

-1

0

1

Figura 39: click sulla message box in alto e verificare il risultato sulgrafico

restituire. Nella figura 42 tabread legge tutti i valori del vettorei e a sua volta li riscrive in un nuovo vettore (new) che disegnai valori sul grafico uno ad uno. Allo stesso tempo tabread mod-ifica la dimensione di un bang e il movimento dell’indicatore diuna slider verticale.

47

Page 48: Inventare il suono

4.1 VETTORI

;

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

Figura 40: click sulle message box per aggiungere o rimuovere leetichette

4.1.2 L’OGGETTO table

L’oggetto table è simile ad un normale oggetto array con l’unicadifferenza che crea il grafico in una subpatch invece che nellapatch window dove viene creato l’oggetto. Il primo argomentoè il nome dell’array, il secondo, opzionale è la sua dimensione.E’ inoltre possibile mandare messaggi al vettore, con i consuetimetodi visti nei paragrafi precedenti.

48

Page 49: Inventare il suono

4.1 VETTORI

punti polygon

bezier

i

i

i

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

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

Figura 42: click sulle message box per aggiungere o rimuovere leetichette

49

Page 50: Inventare il suono

5P 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 sonogli strumenti che permettono di verificare se una data condizionesia vera o falsa1. In Pd, come nella maggior parte degli altri lin-guaggi di programmazione, esistono degli oggetti e dei costruttisintattici che permettono di verificare una condizione e di es-eguire delle operazioni al verificarsi di determinate situazioni.Tutti queste istruzioni possono essere raccolte e combinate inalgoritmi di selezione.

5.1.1 OPERATORI RELAZIONALI

Gli operatori relazionali consentono di confrontare due valori fraloro, quindi sono binari. Come nel linguaggio C producono unoutput uguale a 1 se la condizione richiesta dall’operatore re-lazionale è soddisfatta, uguale a 0 in caso contrario. I principalioperatori 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 mon-do dell’informatica i suoi modelli. La primitiva fondamentale dell’informatica,il bit, può infatti assumere il valore di 1 o 0, acceso o spento, vero o falso.

50

Page 51: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

> 10

0

0

Figura 43: L’output di ’>’ restituisce 0 finché il numero in entrata èminore o uguale a 10, 1 quando diventa maggiore di 10

5.1.2 select

select (forma abbreviata: sel) opera una selezione sugli atomi inentrata confrontandoli con i suoi argomenti. Se la condizioneè soddisfatta select emette un bang dall’outlet corrispondente, incaso contrario spedisce fuori l’atomo in entrata dall’ultimo outleta destra.

sel 10

5 123 10

0

Figura 44: select

select può selezionare più atomi, in tal caso avrà tanti outlet quan-ti saranno gli atomi da valutare, più uno, da cui farà uscire gliatomi che non soddisfano la selezione (figura 45).Con gli operatori relazionali e select realizziamo un algoritmoche opera una selezione su dei numeri. Quando la selezioneè soddisfatta e select emette 1, verrà attivata una rampa conl’oggetto line (figura 46).

51

Page 52: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

5

123

10

0

sel 10 4

4

Figura 45: select con più selezioni

> 50

sel 1

line

0, 127 2000

20 32 69

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

Se volessimo modificare questo algoritmo in modo da operareuna verifica su una rampa invece che su valori singoli, avremmobisogno di uno strumento che individui il superamento di unasoglia. L’oggetto che fa al caso in questione è change, che filtra leridondanze in un flusso in entrata. Ad esempio se in change entraper 10 volte consecutive il numero 1, emetterà 1 solo alla prima

52

Page 53: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

entrata. Combinando così ’>’ e change possiamo soddisfare lanostra richiesta.

line

0, 100 2000

> 50

sel 1

line

0, 127 2000

100

change

Figura 47: click sulla message box in alto

Esaminiamo la patch in figura 47: all’attivazione della rampa, in-izia il cammino da 0 a 100 effettuato da line. Appena superatoil valore-soglia di 50, l’operatore ’>’ emette 1 a ripetizione, machange elimina tutte le ripetizioni successive, consentendo l’usci-ta solo del primo 1, attivando così il selettore sel 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 ver-ità dell’algebra booleana2. In Pd ci sono operatori che operano

2 Le tavole di verità sono tabelle usate nella logica per determinare se, attribuitii valori di verità alle proposizioni che la compongono, una determinataproposizione è vera o falsa.

53

Page 54: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

al livello di bit e altri che operano sui numeri decimali. Nelprimo caso i numeri interi decimali ricevuti dagli operatori logi-ci vengono trasformati nella loro forma binaria e ogni bit vienevalutato con il bit dell’altro numero che si trova nella stessa po-sizione. Ad esempio l’operatore AND (oggetto ’& ’ in Pd) seguele regole della tavola di verità illustrate nella tabella 1.

a b a ∧ b

0 0 00 1 01 0 01 1 1

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

Se volessimo realizzare un AND sugli interi 21 e 6, ’& ’ oper-erebbe nel modo illustrato nella tabella 2.

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

4 = 0 0 1 0 0

Tabella 2: operazione AND su gli interi 21 e 6

L’operatore OR (in Pd ’|’) agisce allo stesso modo ma seguendole regole della tavola di verità dell’OR booleano (tabella 3).

a b a ∨ b

0 0 00 1 11 0 11 1 1

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

In relazione a questi due operatori ci sono due oggetti (’&& ’ e’||’) che confrontano due valori (interi o decimali) producendocome risultato lo stesso delle tavole di verità su citato. Ad esem-pio ’&& ’ restituisce 1 se e solo se entrambi i valori sono diversi

54

Page 55: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

&

21 6

t b b

4

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

|

t b b

63

41 22

Figura 49: l’operatore OR

da zero, mentre restituisce 0 se uno dei due valori o entrambisono uguali a zero (tabella 1).Altri due operatori che lavorano a livello di bit sono ’«’ e ’»’, chepotremmo chiamare rispettivamente scivola a sinistra e scivola adestra. Il primo, ad esempio, converte l’intero che riceve nel suoinlet sinistro nella sua forma binaria e aggiunge a destra tanti bituguali zero quanti sono richiesti dall’inlet di destra. Nella tabella4 c’è un esempio con il numero 113 da spostare a sinistra di dueposizioni.

55

Page 56: Inventare il suono

5.1 ISTRUZIONI CONDIZIONALI

1

&&

10 10

Figura 50: l’operatore ’&& ’ confronta due valori in base alla tavolà diverità per AND

113 = 1 1 1 0 0 0 1 <<2 =

452 = 1 1 1 0 0 0 1 0 0

Tabella 4: scivola a sinistra di due posizioni

<<

113 2

t b b

452

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

5.1.4 If

Per terminare il capitolo sulle istruzioni condizionali non restache affrontare il costrutto if. Pd non dispone di un oggetto if, maconsente di usare questo comando all’interno dell’oggetto exprche abbiamo già incontrato (sezione 3.3.2). Nei comuni linguag-

56

Page 57: Inventare il suono

5.2 loops E ITERAZIONI

gi di programmazione l’istruzione if valuta un’espressione, severa restituisce un certo risultato, se falsa ne restituisce un altro.Nel linguaggio C la sintassi del costrutto if è la seguente:

i f ( espress ione )f a i una c e r t a cosa ;

e l s efanne un ’ a l t r a ;

che significa: Se l’espressione è vera fai una certa cosa, altrimen-ti fanne un’altra. In Pd invece la sintassi è:

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

0

0

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

Figura 52: se il numero in entrata è minore di 10 espr restituisce ilnumero stesso moltiplicato per 5, altrimenti restituisce 10

5.2 loops E ITERAZIONI

Le iterazioni in Pd si possono gestire in molti modi. General-mente un’iterazione nei linguaggi di programmazione è la ripe-tizione di un evento fino all’uscita dall’evento stesso, determi-nata dal verificarsi di una certa condizione. In Pd un’iterazionepuò essere l’emissione di un bang ogni mezzo secondo per un nu-mero definito di volte. Come sappiamo metro genera bang a ripe-tizione, finché non viene spento. E’ semplice quindi inserire uncontatore che si occupa di contare i bang usciti e appena raggiun-go il valore desiderato si occupa di spegnere metro. Osserviamola patch in figura 53.Pd implementa anche l’oggetto until che emette un numero dibang definito da un numero in entrata nel suo inlet sinistro. A

57

Page 58: Inventare il suono

5.2 loops E ITERAZIONI

1 0

float + 1

0

sel 9

loadbang

metro 500

0

Figura 53: la patch produce 10 bang attraverso un oggetto metrocontrollato da un contatore e da un selettore

differenza della patch in figura 53 until non è orientato al tempoma opera quasi istantaneamente come nei tradizionali linguaggidi programmazione. In effetti until funziona secondo lo schemaclassico di un ciclo for del C:

f o r ( i =0 ; i <100 ; i ++)espress ione ;

che significa: finché il contatore, partito da 0 non arriva a 99, va-luta l’espressione. Se l’espressione fosse un ordine di stampareil valore della variabile-contatore avremmo:

f o r ( i =0 ; i <100 ; i ++)p r i n t f ("%d " , i ) ;

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

58

Page 59: Inventare il suono

5.2 loops E ITERAZIONI

until

100

+ 1

0

print

loadbang

int

Figura 54: ciclo until: valutare l’algoritmo con un click sulla messagebox in alto e osservare il risultato nella Pd window

59

Page 60: Inventare il suono

6O G G E T T I G U I

Nel corso dei nostri primi esperimenti abbiamo già avuto mododi incontrare alcuni oggetti grafici, che nell’ambito del mondoinformatico sono dette GUI (graphical user interfaces). Pd mette adisposizione un certo numero di GUI’s, alcuni nativi, cioè facen-ti parte del pacchetto standard del programma, altri derivati dalibrerie esterne, la maggior parte delle quali sono caricate nel-la versione extended. Genericamente possiamo dire che tutte leGUI di Pd possono essere configurate tramite le properties, acces-sibili 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àmoltissime volte. toggle invece è un oggetto molto utile chepermette di restituire 1 quando è attivo, 0 quando è disattivo.Praticamente è una variabile binaria che si attiva con un clickdel mouse. Quando è attivato mostra una croce all’interno delquadrato che la costituisce (figura 55).

60

Page 61: Inventare il suono

OGGETTI GUI

Pd offre due tipi di slider, che sono delle leve attivabili con ilmouse o da altri oggetti. Fra le due non c’è alcuna differenzase non nel fatto che un tipo è verticale, l’altro orizzontale. Dalleproprietà si può impostare la dimensione, ma soprattutto il rangedell’output.

1 0

metro 500

int 1 + 1

mod 2

sel 0

Figura 55: l’oggetto toggle

Nella figura 55 il toggle più grande attiva un oggetto metro che asua volta manda dei bang a un contatore che attraverso l’oggettomod conta solo da 0 a 1, quando è 0, il bang (grazie all’oggetto sel)esce da sinistra, quando è 1 esce a destra. Nella figura successivainvece (fig. 56) lo slider verticale di sinistra pilota gli altri due:quello di destra attraverso expr effettua il movimento contrario,mentre quello di sotto si muove in parallelo, ma sommato a unmovimento continuo generato dall’algoritmo a sinistra. metro at-tiva un contatore da 0 a 1. Il valore in uscita viene moltiplicatoper un altro valore che va da 0 a 20, gestito dallo slider princi-pale. Il prodotto di questi due fattori diventa il valore-obiettivodell’oggetto line che crea il movimento dello slider in basso. C’èda notare che ci sono due oggetti ’r’, cioè receive, ma non c’è

61

Page 62: Inventare il suono

OGGETTI GUI

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

Figura 56: lo slider verticale a sinistra pilota gli altri due

nessun send! Le GUI infatti possono mandare o ricevere messag-gi senza bisogno di creare oggetti e supplementari. Possiedonodegli oggetti send e receive incorporati che possono essere impo-stati dalle properties della GUI stessa.

I radio button sono oggetti formati da barrette orizzontali o ver-ticali costituite da caselle ordinate. L’uscita è il numero dellacasella a partire da quella più a sinistra nel caso di radio buttonorizzontali, e da quella più in alto nel caso di verticali. Ricor-diamo che il conteggio inizia dallo 0, quindi un radio button di

62

Page 63: Inventare il suono

6.1 ALTRE GUI DALLE LIBRERIE DI PD

16 elementi, avrà un output che va da 0 a 15. In figura 57 due ra-dio button disegnano un grafico. Unica annotazione, i valori delradio button verticale vengono invertiti per consentire un miglioreadesione al grafico, così il primo valore in alto diventa 9 in luogodi zero, il secondo 8 invece che 1, etc. . . .Della GUI VU-meter avremo modo di scrivere nella parte cheriguarda l’audio, mentre possiamo ora accennare alle canvas chesono oggetti semplici che servono a connotare graficamente lenostre patch in modo da caratterizzare con i colori alcune zonedella finestra. Possono essere utili in patch molto articolate dovec’è bisogno di rendere riconoscibili le varie parti dell’algoritmo.Infine l’oggetto number2 è molto simile alla normale number boxcon qualche possibilità in più di configurazione grafica.

6.1 ALTRE GUI DALLE LIBRERIE DI PD

Oltre alle GUI native che abbiamo appena discusso, diamo orauna panoramica veloce di alcune altre GUI introdotte con lenuove librerie:

- grid

- gcanvas

- knob

- envgen

grid e gcanvas sono molto simili, sono due griglie bidimensionaliche emettono la posizione del mouse (x, y) dai due outlet allapressione di quest’ultimo. knob è la classica manopola tipo sin-tetizzatore analogico. Ha un’unica uscita che emette l’output nelrange impostato nelle properties. Infine l’oggetto envgen è un en-velope generator che emette dati in un formato compatibile con laversione audio di line, cioè line∼ , del quale tratteremo appro-fonditamente nella parte di questo manuale dedicata all’audio.

Prima di concludere questo capitolo, va ricordato che l’uso mas-siccio di GUI nelle patch è sconsigliato. La grafica vettoriale chesta alla base di tali oggetti può rallentare la capacità di calcoloquindi quando è possibile evitarne l’uso, si eviti. Ad esempioin luogo dei bang grafici si cerchi di usare l’oggetto relativo bang

63

Page 64: Inventare il suono

6.1 ALTRE GUI DALLE LIBRERIE DI PD

tabwrite array1

r ascissaexpr (9 - $i1)

r ordinata

array1

Figura 57: impostare prima l’indice (radio button) orizzontale, poi ilvalore con quello verticale

o ’b’. Non è importante la bellezza estetica di una patch quantola sua chiarezza, quindi è meglio evitare troppi oggetti grafici e

64

Page 65: Inventare il suono

6.1 ALTRE GUI DALLE LIBRERIE DI PD

abbondare, al contrario, di subpatches e annidamenti.

65

Page 66: Inventare il suono

7L I S TA D E G L I O G G E T T I P E R M A N I P O L A R E DAT I

66

Page 67: Inventare il suono

Parte III

A U D I O

Page 68: Inventare il suono

8L’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 generato da un oscillatore. Nel mondo analogico un oscil-latore è un circuito che genera forme d’onda di vari tipi, anchese generalmente se non si specifica altro si parla di oscillatoreintendendo un generatore di onde sinusoidali.Un’ onda sinusoidale è un’onda generata da una funzione sinu-soidale (vedi fig. 58), che si può esprimere tramite la formula:

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

dove A è l’ampiezza dell’onda, tipicamente impostata ad 1, quin-di i valori della funzione oscillano fra 1 e -1, 2π f = 2π

τ è lafrequenza angolare che indica quanti periodi ci sono in un in-tervallo di 2π, f = 1

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

Per produrre una sinusoide con un calcolatore è necessario fareuso di un oscillatore digitale, un algoritmo che produca i valoridella funzione sinusoidale, ossia delle ampiezze dell’onda. A dif-ferenza di un segnale elettrico, che è continuo, il calcolatore puòsolo produrre segnali discreti, quindi l’oscillatore digitale calcola ivalori della funzione il numero delle volte indicato dalla frequen-za di campionamento. Ad esempio se la frequenza di campiona-mento è 44100 hertz, l’oscillatore calcola i valori della funziona44100 volte al secondo. Questa frequenza di campionamento

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

68

Page 69: Inventare il suono

8.1 L’OSCILLATORE

Parametri di una sinusoide

tempo

ampiezza

−2

−1

01

2

−2

−1

01

2

Figura 58: il grafico di una funzione sinusoidale

approssimerà la forma d’onda desiderata, pur non riuscendo acostruirne una identica a quella analogica (fig. 59).In Pd l’oscillatore digitale è implementato nell’oggetto osc∼.Nella patch in figura 60 l’oscillatore produce una sinusoide di 440

hz che l’oggetto dac∼ converte in segnale analogico, in modo dapoter essere inviata agli altoparlanti.In genere comunque oscillatori digitali non calcolano i valori del-la funzione sinusoidale in tempo reale, ma usano un sistema cherende le cose più veloci. Piuttosto che fare 44100 calcoli di fun-zioni sinusoidali al secondo è preferibile leggere delle tabelle chehanno i valori di una funzione sinuoidali già pronti. Piuttostoche calcolare, leggere dei dati è un’operazione molto più rapida.Nella wavetable quindi c’è l’elenco dei valori di ampiezza indiciz-zati di un ciclo di forma d’onda, l’oscillatore non deve fare altroche leggerli uno ad uno, iniziando dal primo (0) fino all’ultimo.La tabella può avere dimensioni arbitrarie: più è alto il numerodei punti più accurata è l’onda risultante. In figura 61 è mostra-ta la rappresentazione grafica di una wavetable: sull’asse delleascisse c’è l’indice, su quella delle ordinate il valore di ampiez-za. Nella memoria del vettore che contiene il grafico ci sarannoquindi delle coppie di valori (indice, ampiezza). In questo casoavremo (0, 0), (1, 0.3125), (2, 0.5748), (3, 0.6885), . . .

69

Page 70: Inventare il suono

8.1 L’OSCILLATORE

Sinusoide digitale

tempo

ampiezza

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figura 59: il grafico di una funzione sinusoidale prodotta da uncalcolatore

L’oggetto osc∼ legge una cosinusoide scritta in una wavetabledi 512 punti. La cosinusoide graficamente è identica ad unasinusoide, con l’unica differenza che la sinusoide ha come primovalore 0, mentre la cosinusoide 1, quindi è sfasata rispetto allaprima di π

2 (vedi fig. 62).L’oggetto tabosc4∼ implementa un lettore di wavetable gener-iche, dove è possibile disegnare una forma d’onda qualunque esceglierne la dimensione. Di tale oggetto si farà larghissimo usonelle sezioni successive del presente manuale.

8.1.1 FREQUENZA E AMPIEZZA DEL SEGNALE

L’onda sinusoidale è un’onda periodica perché la sua forma siripete identica ad intervalli di tempo regolari. Il periodo è quindiil tempo necessario affinché l’onda compia un intero ciclo. Leoscillazioni dell’onda si alternano fra il campo positivo e quellonegativo. Se prendiamo come punto di riferimento il picco positi-vo dell’onda, la lunghezza d’onda sarà la distanza (λ) fra tale piccoe il successivo. Questo valore è inversamente proporzionale al-la frequenza dell’onda, maggiore sarà λ, minore sarà la frequenza,

70

Page 71: Inventare il suono

8.1 L’OSCILLATORE

osc~ 440

dac~

Figura 60: l’oscillatore di Pd

●●

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

Figura 61: una cosinusoide

ovvero il numero di cicli completi dell’onda per secondo. Questovalore si misura in hertz (vedi fig. 63).Perché generi un segnale udibile dall’orecchio umano, l’ondadeve avere una frequenza compresa circa fra 20 e 20000 hertz.Tale range costituisce la banda udibile.Quando si parla genericamente dell’ampiezza del segnale si in-tende invece il picco massimo di ampiezza raggiunto dall’onda,cioè la distanza maggiore dal punto di quiete (ovvero zero). Piùspecificamente si tratta dell’ampiezza di picco dell’onda, mentresi parla di ampiezza istantanea quando si tratta di un campionequalsiasi dell’onda. La massima ampiezza di un segnale è 1,

71

Page 72: Inventare il suono

8.1 L’OSCILLATORE

Cosinusoide

tempo

ampiezza

−1.0

−0.5

0.0

0.5

1.0

−1.0

−0.5

0.0

0.5

1.0

Figura 62: una cosinusoide

➤❘

➤❘

Parametri di una sinusoide

tempo

ampiezza

τ

A

λ

−2

−1

01

2

−2

−1

01

2

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

superato tale limite il segnale distorce.La frequenza è responsabile della percezione dell’altezza, mentrel’ampiezza dell’intensità del segnale.

72

Page 73: Inventare il suono

8.1 L’OSCILLATORE

8.1.2 osc∼

L’object box osc∼ implementa un oscillatore digitale. Accettacome argomento interno la frequenza (fig. 60) il cui valore può an-che essere variato dall’inlet di sinistra (fig. 64). Come vedremosuccessivamente oltre che dati, l’inlet di sinistra accetta anchesegnali per controllare la frequenza.

osc~ 200

dac~

242

Figura 64: l’oggetto osc∼ con frequenza controllata da una number box

Nella patch in figura 65 un oggetto line permette di realizzareun glissando, cioè uno scivolamento da una frequenza ad un’altra,facendo udire tutte le frequenze intermedie. In questo caso ilglissando parte da 20 hz e giunge a 1000 hz in 5 secondi.

dac~

line

20, 1000 5000

osc~ 20

Figura 65: la realizzazione di un glissando con l’oggetto line

Volendo invece intervenire sull’ampiezza del segnale, è neces-sario utilizzare un moltiplicatore, come un oggetto *∼, per molti-plicare l’ampiezza istantanea del segnale per un fattore costante

73

Page 74: Inventare il suono

8.1 L’OSCILLATORE

(o variabile). In figura 66 l’oggetto *∼ moltiplica per 0.5 il seg-nale in entrata, dimezzandone l’ampiezza. L’ampiezza di piccodel segnale in uscita sarà quindi di 0.5. In figura 67 è mostrataun’onda con ampiezza di picco 1, e una con ampiezza di picco0.5.

dac~

osc~ 440

*~ 0.5

Figura 66: la realizzazione di un glissando con l’oggetto line

Come per la frequenza, si può controllare l’ampiezza interattiva-mente, con dati o segnali di controllo. Nel caso in figura 68 unaslider verticale emette valori compresi fra 0 e 1, i quali entrano inline. line emette i valori in entrata scivolando con rampe di 20 mil-lisecondi fra un valore e il precedente per evitare che l’ampiezzacambi troppo repentinamente producendo un effetto scalino.

8.1.3 tabwrite∼

Un oggetto molto utile è tabwrite∼ che consente di scrivere ivalori di un segnale in una tabella. In questo caso lo utilizzi-amo per mostrare la forma d’onda di un segnale al variare del-l’ampiezza e della frequenza. In figura 69 l’oggetto tabwrite∼scrive i valori ricevuti in una tabella (amp) ogni volta che riceveun bang. metro emette un bang ogni 100 millisecondi producen-do l’impressione dell’onda in movimento. Gli oggetti send∼e receive∼ sono come send e receive per i dati, ma inviano ericevono segnale.

8.1.4 LA RAPPRESENTAZIONE DEL SUONO

Attraverso l’oggetto tabwrite∼ possiamo avere una rappresen-tazione del segnale nel dominio del tempo, ovvero in ogni is-tante di tempo viene disegnato un punto in corrispondenza del-

74

Page 75: Inventare il suono

8.1 L’OSCILLATORE

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

Figura 67: la realizzazione di un glissando con l’oggetto line

dac~

osc~ 440

*~ 0.5

amp

$1 20

line

Figura 68: la realizzazione di un glissando con l’oggetto line

l’ampiezza del segnale. Il risultato di tale operazione permettedi visualizzare la forma d’onda.In figura 70 è rappresentato un ciclo di un’onda periodica comp-lessa, formata dalla somma di 3 sinusoidi. Come già detto ques-

75

Page 76: Inventare il suono

8.1 L’OSCILLATORE

dac~

osc~ 440

*~ 0.5

amp

$1 20

line

tabwrite~ amp

r~ sig

send~ sig

amp

metro 100

883

Figura 69: la realizzazione di un glissando con l’oggetto line

ta rappresentazione mostra l’ampiezza in funzione del tempo,ma non da alcuna informazione riguardo la frequenza del seg-nale. Per ottenere informazioni su un suono complesso è neces-sario scomporlo nelle sue componenti semplici e rappresentareogni singola frequenza. Attraverso algoritmi che operano taliscomposizioni è possibile analizzare lo spettro di un suono, cioèla sua rappresentazione nel dominio della frequenza. L’analisidello spettro può essere visualizzata in modi molto diversi, anchese fondamentalmente ci sono 2 tipi di analizzatori di spettro:

- gli analizzatori di ampiezza in funzione della frequenza

- gli analizzatori di ampiezza e frequenza in funzione deltempo

Nel primo caso (fig. 71) si ha un grafico bidimensionale nel qualevengono rappresentate la frequenza e l’ampiezza del suono inun dato momento. Questa rappresentazione ha il limite di nonpoter dare una visione del suono nella dimensione temporale,ma si riferisce ha un istante di tempo oppure ad un suono chenon varia in funzione del tempo. L’invariabilità del suono infunzione del tempo esiste solo nei segnali prodotti digitalmente(probabilmente nemmeno un suono elettrico analogico resta sem-pre identico a se stesso). Nel mondo reale i suoni variano contin-uamente, quindi una rappreentazione che non tenga conto dellafunzione tempo ha valore solo in determinate circostanze.

76

Page 77: Inventare il suono

8.1 L’OSCILLATORE

Rappresentazione della forma d’onda

tempo

ampiezza

−0.5

0.0

0.5

−0.5

0.0

0.5

Figura 70: forma d’ondarisultante dalla somma di 3 sinusoidi

Spettrogramma ampiezza/frequenza

frequenza

ampiezza

0 100 200 300 400 500 600 700 800 900 1000

Figura 71: analizzatore di spettro bidimensionale, sull’asse delle as-cisse c’è la frequenza, su quella delle ordinate l’ampiezza.Il suono è costituito dalla somma di onde di frequenza paria 400, 700 e 800 hz

77

Page 78: Inventare il suono

8.2 LE FORME D’ONDA

Gli analizzatori del secondo tipo permettono di dare una vi-sione più dettagliata e pertinente del suono perché rappresen-tano l’ampiezza e la frequenza in funzione del tempo. La ne-cessità di rappresentare 3 parametri obbliga ad usare un grafi-co tridimensionale oppure a gestire uno dei tre parametri inmodo diverso. Nel caso mostrato in figura 72 c’è il tempo sul-l’asse delle ascisse e la frequenza su quella delle ordinate, men-tre l’ampiezza è rappresentata dal colore delle linee: nero perla massima ampiezza e varie tonalità di grigio per ampiezzaminore, fino al bianco, quando c’è assenza di suono.

Spettrogramma ampiezza/frequenza/tempo

tempo

frequenza

0200

400

600

800

1000

0200

400

600

800

1000

Figura 72: l’ampiezza delle sinusoidi è rappresentata dal-ìintensità delcolore delle linee

8.2 LE FORME D’ONDA

Oltre alla forma d’onda più semplice, quella sinusoidale, che ab-biamo esaminato nella sezione precedente, esistono altre formed’onda periodiche. Il numero di esse è teoricamente infinito, an-che se esistono alcune forme d’onda classiche che si possono ot-tenere dalla somma di sinusoidi semplici in rapporto armonicofra loro.Forme d’onda classiche sono l’onda quadra, l’onda triangolare el’onda a dente di sega che esamineremo fra poco.

78

Page 79: Inventare il suono

8.2 LE FORME D’ONDA

8.2.1 tabosc4∼

Nella sezione 8.1 abbiamo menzionato l’oggetto tabosc∼ chelegge la forma d’onda da una tabella-vettore. Questo oggetto cipermette di trasformare in segnale dei vettori che contengonoforme d’onda diverse dalla sinusoide ordinaria. Per mettere infunzione tabosc∼ è necessario:

- creare un vettore di 2n + 3 punti

- riempire il vettore con i valori desiderati

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

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

Per i primi due punti si rimanda al capitolo 4. Per il resto siesamini la patch in figura 73: l’oggetto tabosc∼ legge i dati dalvettore chiamato sinead una frequenza di 400 hz e invia tuttoa dac∼, ma anche a tabwrite∼ che mostra la forma d’ondaottenuta.Nei prossimi paragrafi mostreremo l’uso di tabosc∼ per formed’onda diverse.

8.2.2 ONDA QUADRA

Quella quadra è una forma d’onda che alterna solo due valori,generalmente 1 e -1, ma anche 1 e 0 se si usa come segnale dicontrollo.Secondo il Teorema di Fourier, un qualsiasi suono complesso pe-riodico può essere ottenuto dalla somma di sinusoidi in rappor-to armonico fra loro. Come abbiamo imparato dal capitolo suivettori (4 possiamo disegnare in un vettore una forma d’ondaottenuta dalla somma di sinusoidi tramite il comando sinesum.L’onda quadra si ottiene dalla somma degli armonici disparicon ampiezza inversamente proporzionale al numero d’ordinedell’armonico, schematizzando:L’oggetto tabosc4∼ può essere usato per implementare un’ondaquadra scritta in un vettore tramite il comando sinesum. E’ suf-ficiente usare una message box con il comando sinesum e scriveretutti i valori di ampiezza delle varie armoniche. In alternativa

79

Page 80: Inventare il suono

8.2 LE FORME D’ONDA

0

frq

metro 100

start

dac~

tabosc4~ sine

tabwrite~ wave

*~

amp

line

$1 20wave

sine

Figura 73: l’uso di tabosc∼ per leggere un vettore con una formad’onda sinusoidale

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

1 013 0

15 0

17

è possibile costruire un algoritmo per disegnare la forma d’on-da nel vettore. In figura 75 ci sono 3 forme d’onda diverse, duerealizzate con il comando sinesum, una con un algoritmo. Il risul-tato visivo sono 3 onde diverse, le prime sono due forme d’ondaquadra approssimativa, infatti nel caso del vettore quadra9 sonostati usati 9 armonici, nel secondo caso 40: più aumenta il nu-mero degli armonici, maggiore sarà la precisione della formadell’onda. Nel terzo caso l’onda è perfettamente quadrata.Se si ascoltano le 3 onde (il messaggio set seguito dal nome diun’array consente di cambiare il vettore da leggere con tabosc∼)si noteranno delle differenze. Nel caso del vettore quadra9 ilsuono sarà meno ricco di armonici di quello di quadra40, che asua volta è meno ricco di quello di quadralg.

80

Page 81: Inventare il suono

8.2 LE FORME D’ONDA

Onda quadra

tempo

ampiezza

−2

−1

01

2

−2

−1

01

2

Figura 74: un’onda quadra che alterna i valori 1 e -1

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

Figura 75: tre tipi diversi di onda quadra

81

Page 82: Inventare il suono

8.2 LE FORME D’ONDA

PULSE WIDTH MODULATION (PWM)

I due modi che abbiamo usato nella sezione precedente per gener-are un’onda quadra non sono gli unici possibili. Un altro sistemainfatti è quello di intervenire direttamente su un segnale sinu-soidale e modificarlo in tempo reale. Nella patch di figura 76 ilsegnale di osc∼ entra in expr∼ che genera un’onda quadra conun semplice ciclo if: se i valori sono positivi, esce 1, altrimentiesce -1.

osc~ 200

150

tabwrite~ wave

metro 100

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

dac~

wave

Figura 76: onda quadra generata mediante intervento diretto su unsegnale sinusoidale

L’oggetto expr∼ è l’omologo di expr per i segnali. Oltre a op-erare sulle solite variabili numeriche ($fn o $in) può processaredirettamente segnale. Il simbolo per le variabili-segnale è $vn.

Questo modo di produrre un’onda quadra non è certo il più eco-nomico dal punto di vista computazionale, ma consente di farequalcosa che con i sistemi precedenti era complicato, cioè inter-venire in tempo reale sulla forma dell’onda. Un’onda quadra èsimmetrica, come del resto quella sinusoidale. Ai valori positivirispondono valori negativi, quindi la parte positiva dell’ondaquadra è controbilanciata da una parte negativa della stessa di-mensione. Se si cambia il rapporto fra la parte positiva e quellanegativa si genera un cambiamento della forma dell’onda cheha rupercussioni sul timbro dell’onda stessa. Questo rapporto èchiamato duty cycle e si misura in genere con un valore compresofra 0 e 1. Un duty cycle di 0.5 rappresenta l’onda quadra mentreun duty cycle di 0.75 significa che la parte positiva è in rapporto

82

Page 83: Inventare il suono

8.2 LE FORME D’ONDA

di 3:1 rispetto a quella negativa.

In figura 77 l’oggetto expr∼ è modificato rispetto a quello dellafigura 76. Se i valori superano il valore in entrata nell’inlet destroemetti segnale 1, altrimenti emetti segnale di -1. Questo implicache possiamo variare il valore-soglia. Mentre prima il valoresoglia era fissato a zero e quindi l’onda risultava simmetrica,ora tale valore può essere cambiato: se avessimo ad esempio unvalore soglia pari a 0.75 (75 nella number box) expr trasformerebbequesto valore in 0.5 e il il costrutto if risulterebbe essere: se ilvalore è maggiore di -0.5 emetti 1, altrimenti 0. Ne risulterebbeun’onda rettangolare con porzione positiva più lunga di quellanegativa.

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

Figura 77: duty cycle dell’onda quadra

Questa modificazione del duty cycle può essere gestita da un seg-nale, generalmente un LFO, un Low Frequency Oscillator, di cuiparleremo più avanti. Basti per ora sapere che un LFO è unnormale oscillatore, specializzato nella generazione di frequenzemolto basse, al di sotto della banda audio (< 30 hz). Usare unsegnale di controllo per modificare il duty cycle realizza la cosid-

83

Page 84: Inventare il suono

8.2 LE FORME D’ONDA

detta Pulse Width Modulation, utilizzata in molti sintetizzatorianalogici negli anni ’70.In figura 78 un oscillatore con frequenza 0.25 controlla il dutycycle dell’onda quadra. L’ampiezza viene moltiplicata per 0.99

in modo che non raggiunga mai 1, poiché con ampiezza 1 il seg-nale è tutto positivo, quindi non c’è alternanza fra parte positivae negativa del segnale. Di conseguenza ci sarebbe assenza dioscillazione, e di suono.

osc~ 200

tabwrite~ wave

metro 100dac~

300

frq

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

*~ 0.99

osc~ 0.25

wave

Figura 78: variazione del duty cycle tramite un segnale di controllo

84

Page 85: Inventare il suono

8.2 LE FORME D’ONDA

8.2.3 ONDA A DENTE DI SEGA

L’onda a dente di sega ha un periodo costituito da un segmentoche va da -1 a 1. Si ottiene sommando tutte le armoniche, conampiezza pari al reciproco del numero d’ordine dell’armonico emoltiplicate per -1:

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 79 ci sono due forme d’onda a dente di sega ottenutel’una con il comando sinesum l’altra con un algoritmo.

;

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

Figura 79: l’onda a dente di sega ottenuta in due modi diversi

85

Page 86: Inventare il suono

8.2 LE FORME D’ONDA

phasor∼

L’onda a dente di sega è utilizzata spessissimo come segnale dicontrollo. In Pd c’è un oggetto che implemente un’onda a dentedi sega nel campo positivo, ovvero con valori che si muovono lin-earmente da 0 a 1. Tale oggetto è phasor∼, utile per moltissimeapplicazioni.

saw

tabwrite~ saw

phasor~ 100

metro 120

Figura 80: l’onda a dente di sega come segnale di controllo, generatacon phasor∼

Uno degli usi di phasor∼ è quello di utilizzarlo come segnaleda modificare con l’oggetto expr∼ in modo molto versatile. Adesempio è possibile costruire una patch per la Pulse Width Mod-ulation con un algoritmo più semplice di quello presentato in8.2.2. La patch si può osservare in figura 81. Il ciclo if è legger-mente diverso da quello precedente. La condizione deve verifi-care semplicemente il rapporto fra il segnale di phasor∼ e quellodi osc∼.

8.2.4 ONDA TRIANGOLARE

Come per l’onda quadra, quella triangolare può essere generatacon diversi metodi. Qui riproponiamo gli stessi della sezioneprecedente:

- vettore e comando sinesum

- vettore disegnato da algoritmo

- intervento diretto sul segnale

86

Page 87: Inventare il suono

8.2 LE FORME D’ONDA

phasor~ 400

dac~

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

osc~ 0.125

expr~ ($v1 * 0.49) + 0.5

Figura 81: l’onda a dente di sega come segnale di controllo, generatacon phasor∼

Nel primo caso dobbiamo usare le armoniche dispari con ampiez-za inversa rispetto al quadrato del numero d’ordine dell’armon-ico e poi moltiplicare le 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 costru-endo tre segmenti attraverso un algoritmo, il primo segmento vada 0 a 1, il secondo da 1 a -1, il terzo da -1 a 0. In figura 82 ci sonole due forme d’onda, la prima approssimata con il comando sine-sum (somma dei primi 19 armonici), la seconda perfetta. Nellafigura successiva (83) è mostrato l’algoritmo per disegnarla.Per l’intervento diretto sul segnale si può utilizzare un oggettophasor∼ 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, altrimentiscrivi una retta da 1 a 0, poi moltiplica per 2 e sottrai uno perriscalare il tutto fra -1 e 1.Anche nel caso dell’onda triangolare esiste il duty cycle che deter-mina la posizione del vertice alto del triangolo. Un duty cycle di0.5 è un’onda triangolare isoscele mentre con un duty cycle ad es-empio di 0.75 il vertice alto del triangolo è spostato verso destra(fig. 85).

87

Page 88: Inventare il suono

8.2 LE FORME D’ONDA

triang triang2

;

triang sinesum 515 1 0 -0.111111 0 0.04 0 -0.020408 0

0.012345 0 -0.008264 0 0.005917 0 -0.044444 0 0.00346 0

-0.00277;

triang normalize 1

pd triang2

Figura 82: nel grafico triang l’onda triangolare è approssimata con lasomma di 19 armonici, mentre in triang2 l’onda è disegnatain modo perfetto

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

Figura 83: l’algoritmo per produrre una forma d’onda triangolare, inuna tabella di 512 + 3 punti

88

Page 89: Inventare il suono

8.2 LE FORME D’ONDA

dac~

tri

tabwrite~ tri

metro 100

phasor~ 200

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

2)-1)) * 2 - 1)

Figura 84

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

Figura 85

89

Page 90: Inventare il suono

9I L PA N N I N G

9.1 L’OGGETTO dac∼

Negli esempi proposti fino ad ora abbiamo sempre inviato ilsegnale in uscita all’oggetto dac∼ che ha il compito di convertireil segnale digitale in analogico, in modo da poterlo ascoltare.Come si può osservare l’oggetto suddetto ha due inlet. In effettiabbiamo sempre inviato il segnale smistandolo in entrambi gliinlet. dac∼ infatti consente di inviare il suono verso due canali,uno sinistro e uno destro. Fino ad ora abbiamo sempre inviatoil segnale verso entrambi i canali ottenendo come risultato che ilsuono sia identico in entrambi, ma potremmo decidere di inviareil segnale verso uno solo dei due.

osc~ 120

dac~

osc~ 120

dac~

*~ 0.25

1 2

Figura 86: in (1) il segnale dell’oscillatore è inviato al solo canale sin-istro, in (2) il segnale viene inviato con massima ampiezzaal canale sinistro, mentre con ampiezza ridotta del 75% alcanale destro

In figura 86(1) il segnale viene inviato solo al canale sinistro,mentre in (2) il segnale avrà un peso maggiore sul canale sinistro

90

Page 91: Inventare il suono

9.2 CONTROLLO DEL panning

poiché prima di essere collegato al canale destro viene ridotto inampiezza.

9.2 CONTROLLO DEL panning

Nella prossima patch realizziamo un semplice algoritmo per con-trollare la posizione 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

Figura 87

In figura 87 è mostrato l’algoritmo di Pd. Attraverso una slid-er orizzontale possiamo posizionare il suono nel campo stereo,se l’indicatore si trova al centro avremo un suono posizionatoesattamente a metà fra i due canali, in alternativa possiamo po-

91

Page 92: Inventare il suono

9.2 CONTROLLO DEL panning

sizionare il suono verso destra o verso sinistra spostando l’indi-catore.La slider è impostata in modo da agire in un range compresofra 0 e 100, il valore in uscita viene diviso per 100 in modo daprodurre un range compreso fra 0.0 e 1.0. Nel caso del canale de-stro questo valore decimale viene collegato con il moltiplicatoreper il canale destro impostando l’ampiezza del segnale lo stessocanale. Per il canale sinistro invece il valore viene sottratto da1.0 in modo da essere il complementare dell’altro. E’ necessarioinoltre calcolare la radice quadrata dei due valori, poiché l’inten-sità del suono percepito è proporzionale al quadrato dell’ampiez-za del segnale stesso. Entrambi i dati in uscita vengono infinepassati per l’oggetto line∼ che rende più graduale il passaggioda un valore all’altro eliminando l’eventuale effetto a scalini chesi produrrebbe.Invece di controllare direttamente la spazializzazione del seg-nale tramite un oggetto grafico, possiamo ultilizzare un oscilla-tore a basse frequenze (LFO) per far muovere il suono fra i duecanali in uscita.

osc~ 120 osc~ 1

expr~ ($v1 * 0.5) + 0.5

expr~ sqrt(1 - $v1)

expr~ sqrt($v1)

*~ *~

dac~

Figura 88

Nella figura 88 è mostrata questa situazione: il segnale dell’oscil-latore di destra viene reso unipolare (vedi paragrafo successi-vo) producendo così un’onda con ampiezza compresa fra 0 e1. Subendo le stesse operazioni della figura precedente (fig.

92

Page 93: Inventare il suono

9.2 CONTROLLO DEL panning

87) produce un’oscillazione del segnale fra il canale sinistro eil canale destro. Analogamente possiamo controllare il panningattraverso un’onda quadra che alterni valori di 0 e 1 (fig. 89)

osc~ 120 osc~ 1

expr~ sqrt(1 - $v1)

expr~ sqrt($v1)

*~ *~

dac~

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

Figura 89

9.2.1 SEGNALI BIPOLARI E UNIPOLARI

Nella patch in figura 88 abbiamo usato un particolare tipo disegnale, detto unipolare. Fino ad ora tutti i segnali che abbiamoincontrato erano bipolari, perché la loro forma d’onda oscilla frai valori positivi e i valori negativi. Per realizzare algoritmi incui ci sono segnali che controllano altri segnali, come nel casodel panning o del tremolo è necessario avere a disposizione deisegnali unipolari, ovvero segnali con valori che oscillano solo frai valori positivi (fig. 90).

9.2.2 IL DC OFFSET

Per ottenere un’onda unipolare è necessario operare una vari-azione su un’onda bipolare. Questa variazione si realizza ag-giungendo al segnale bipolare un valore costante detto DC offset.Se ad una sinusoide che oscilla fra -1 e 1 si aggiunge il valorecostante 1, si otterrà una nuova sinusoide oscillante fra 0 e 2,questo perché la distanza fra l’ampiezza massima e quella mini-ma della sinusoide equivale a e (1-(-1) = 2). In figura 102 si può

93

Page 94: Inventare il suono

9.2 CONTROLLO DEL panning

Segnale bipolare e unipolare

a)

b)

Figura 90: L’ampiezza del segnale (a) oscilla fra valori positivi enegativi, mentre (b) è polarizzato nel campo positivo

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 oltre all’aggiunta della costante, è necessario dividere ilsegnale per 2 o, meglio, moltiplicarlo per 0.5 (le moltiplicazioniper il calcolatore sono più veloci delle 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 103 è mostrato un segnale bipolaretrasformato in un segnale unipolare tramite l’oggetto expr∼.

94

Page 95: Inventare il suono

9.2 CONTROLLO DEL panning

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

Figura 91: la distanza massima fra l’ampiezza positiva e quella nega-tiva del segnale bipolare (a) è doppia rispetto a quella delsegnale (b)

95

Page 96: Inventare il suono

9.2 CONTROLLO DEL panning

osc~ 200

expr~ ($v1 * 0.5) + 0.5

dac~

tabwrite~ bipolare

metro 100

tabwrite~ unipolare

bipolare

unipolare

Figura 92: l’oggetto expr∼ permette facilmente di effettuare le dueoperazioni sul segnale per trasformarlo trasformano dabipolare a unipolare

96

Page 97: Inventare il suono

10S I N T E S I A D D I T I VA , S I N T E S I TA B E L L A R E ES I N T E S I V E T TO R I A L E

10.1 OPERATORI DI SEGNALE

10.1.1 expr∼

10.2 SINTESI ADDITIVA

Definizione: Date n onde, si ha sintesi additiva quando si som-mano tali onde.Risultato: La somma di onde sinusoidali produce suoni comp-lessi estremamente eterogenei.

10.2.1 SINTESI ADDITIVA A SPETTRO ARMONICO

10.2.2 SINTESI ADDITIVA A SPETTRO NON ARMONICO

10.2.3 SPETTRO FISSO

10.2.4 SPETTRO VARIABILE

10.3 SINTESI VETTORIALE

10.3.1 DISSOLVENZA INCROCIATA AUTOMATICA FRA DUE TABELLE

10.3.2 DISSOLVENZA INCROCIATA AUTOMATICA FRA PIÙ TABELLE

10.3.3 ALGORITMO DI SELEZIONE PER IL crossfading FRA TABELLE

10.3.4 CONTROLLO DEL crossfading ATTRAVERSO grid

97

Page 98: Inventare il suono

11S 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 sinu-soidi per ottenere spettri complessi, la sintesi sottrattiva insistesu spettri molto complessi per ottenere suoni più semplici. Persottrarre frequenze da un suono complesso si usano dei dispos-itivi software detti filtri, che si applicano su suoni che hannouno spettro estremamente ricco, come i rumori. Schematizzando,il suono sorgente prima di essere inviato agli altoparlanti passaattraverso un filtro, che realizza certe condizioni richieste (fig.93).

filtro

segnale in usci ta

segna le in en t ra ta

Figura 93: schema di un filtraggio di segnale semplice

11.1.1 IL RUMORE

In generale si intende per rumore un suono non desiderato chedisturba la percezione di un’informazione sonora. In musica

98

Page 99: Inventare il suono

11.1 LA SINTESI SOTTRATTIVA

elettronica un rumore è una sequenza di oscillazioni casuali. Sidistinguono vari tipi di rumori. Il rumore bianco è quello costi-tuito da frequenza uniformemente distribuite, prodotte alla ve-locità della frequenza di campionamento. In altre parole, se ci siopera alla frequenza di campionamento di 44100 hertz, il rumorebianco è costituito da frequenze casuali (con ampiezza casuale)emesse ogni 1

44100 di secondo. Lo spettro del rumore bianco sipresenta come in figura 94: le frequenze occupano tutta la bandaaudio.

Rumore bianco

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figura 94: spettro del rumore bianco

Il rumore rosa ha una distribuzione spettrale diversa dal prece-dente: via via che le frequenza sono più alte l’ampiezza mediadel segnale si abbassa, per la precisione si abbassa di 3 db ogniottava (fig. 95).

In Pd questi due tipi di rumore sono implementati rispettiva-mente dagli oggetti noise∼ e pink∼ che non accettano nessuntipo di argomento. L’oggetto rand∼ invece genera un rumorelimitato in banda, questo significa che il generatore produce unabanda di rumore che va da 0 alla frequenza impostata, succes-sivamente produce delle bande secondarie larghe quanto la fre-quenza impostata ma di ampiezza sempre minore. L’esempio infigura (96) mostra lo spettro prodotto da rand∼ con frequenza2500 hz.

99

Page 100: Inventare il suono

11.1 LA SINTESI SOTTRATTIVA

Rumore rosa

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figura 95: spettro del rumore rosa

Rumore band limited

x

0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

Figura 96: spettro di rumore band-limited con frequenza di 2500 hz

Nella patch in figura 97 l’oggetto polygate∼ consente di sceglierequale generatore inviare a dac∼. Accetta come argomento il nu-mero dei segnali in entrata e il tempo con cui passare da unoall’altro. Il messaggio choice consente di effettuare la scelta.

I rumori con il loro spettro ricchissimo sono ideali per poteressere filtrati e costituiscono i segnali sorgenti privilegiati per lasintesi sottrattiva.

100

Page 101: Inventare il suono

11.2 I FILTRI

25000

noise~ pink~

dac~

rand~choice $1

polygate~ 3 100

Figura 97: selezione del tipo di rumore tramite l’oggetto polygate∼

11.2 I FILTRI

I filtri sono algoritmi deputati a processare un segnale in entrata,attenuando determinate frequenze o esaltandone altre. In baseal tipo di tagli sulle frequenze che effettuano se ne distinguonoquattro tipi:

- filtri passa-alto

- filtri passa-basso

- filtri passa-banda

- filtri escludi-banda

11.2.1 FILTRI PASSA-ALTO

Un filtro passa-alto attenua le frequenze al di sotto di un valore-soglia, detto frequenza di taglio (cutoff frequency).

11.2.2 FILTRI PASSA-BASSO

11.2.3 FILTRI PASSA-BANDA

11.2.4 FILTRI ESCLUDI-BANDA

11.2.5 GLI ORDINI DEI FILTRI

101

Page 102: Inventare il suono

12M O U L A Z I O N E A D A N E L LO ( R M ) , T R E M O LO,M O D U L A Z I O N E D ’A M P I E Z Z A ( A M )

12.1 LA MODULAZIONE AD ANELLO

Definizione: Dati due segnali, si ha la modulazione ad anello(Ring Modulation, RM) quando si moltiplicano l’uno per l’altronel dominio dell’ampiezza:

RM = sigα ∗ sigβ

Risultato: La RM produce un suono complesso, formato datutte le frequenze ottenute dalla somma e dalla differenza deidue segnali. Nel caso più semplice, con due sinusoidi, avremoquindi:

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

In termini matematici, la seconda regola di Werner esprime pro-prio questa identità:

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

Quando i due segnali sono suoni complessi, il risultato dellamodulazione ad anello sarà l’insieme delle somme e differenzefra tutte le frequenze dei due suoni. Nella patch in figura 100

si ha una doppia modulazione ad anello, con le sinusoidi difrequenza 2000, 500 e 650 hertz. Il risultato della prima RM dafrequenze di 2500 e 1500 hertz che vengono modulati con la terzasinusoide (650 hz), producendo un suono finale formato dallasomma di 4 onde: 3150, 1850, 2150, 850 hertz (vedi lo spettro infigura 101. Schematizzando:

102

Page 103: Inventare il suono

12.1 LA MODULAZIONE AD ANELLO

Modulazione ad anello

x

0 1000 2000 3000

Figura 98: lo spettro risultante di una modulazione ad anello. Le fre-quenze delle sinusoidi sono di 2000 Hz e 500 hz. Il risultatoè un suono composto da frequenze di 2500 hz e 1500 hz

osc~ 2000

*~

dac~

osc~ 500

Figura 99: la patch di Pd che implementa la Modulazione ad anellodello spettro in figura 98

Dati i segnali α(2000hz), β(500hz), γ(650hz), si applica la modu-lazione ad anello ai primi due e il risultato si ring-modula con ilterzo:

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

103

Page 104: Inventare il suono

12.1 LA MODULAZIONE AD ANELLO

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

- RM1 = 2500, 500

- RM2 = RM1 f ∗ γ f

- 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

Figura 100: doppia modulazione ad anello: 2 segnali vengono ring-modulati fra loro e successivamente con un terzo

Storicamente la Modulazione ad anello è stata utilizzata permodificare il timbro degli strumenti tradizionali. In quel casoun suono complesso viene ring-modulato con un suono di sintesi,una sinusoide ad esempio. Tecnicamente non c’è alcuna differen-za con la modulazione vista qui sopra, ma si preferisce in questecircostanze parlare di suoni che vengono modificati con altrisuoni: il suono da modulare viene definito Portante (Carrier),mentre il segnale che modula è detto Modulante (Modulator).

104

Page 105: Inventare il suono

12.2 SEGNALI BIPOLARI E UNIPOLARI

Modulazione ad anello doppia

x

0 1000 2000 3000 4000

Figura 101: lo spettro risultante dalla doppia modulazione ad anello

12.2 SEGNALI BIPOLARI E UNIPOLARI

Per ottenere un’onda unipolare è necessario operare una vari-azione su un’onda bipolare. Questa variazione si realizza ag-giungendo al segnale bipolare un valore costante detto DC offset.Se ad una sinusoide che oscilla fra -1 e 1 si aggiunge il valorecostante 1, si otterrà una nuova sinusoide oscillante fra 0 e 2,questo perché la distanza fra l’ampiezza massima e quella mini-ma della sinusoide equivale a e (1-(-1) = 2). In figura 102 si può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 oltre all’aggiunta della costante, è necessario dividere ilsegnale per 2 o, meglio, moltiplicarlo per 0.5 (le moltiplicazioniper il calcolatore sono più veloci delle 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 103 è mostrato un segnale bipolaretrasformato in un segnale unipolare tramite l’oggetto expr∼.

105

Page 106: Inventare il suono

12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO

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

Figura 102: la distanza massima fra l’ampiezza positiva e quella nega-tiva del segnale bipolare (a) è doppia rispetto a quella delsegnale (b)

12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO

Definizione: Dato un segnale bipolare e uno sinusoidale unipo-lare, ha luogo un tremolo quando il segnale unipolare, a bassefrequenze, modula l’ampiezza di quello bipolare.

Risultato: il tremolo non è altro che una variazione dell’ampiez-za di un segnale prodotta da un altro segnale. L’oscillatore chemodula l’ampiezza della Portante deve necessariamente emet-tere basse frequenze, per non interferire con la frequenza delsuono modulato. Inoltre una frequenza troppo alta non perme-tterebbe di percepire l’effetto tremolo desiderato. Tradizional-

106

Page 107: Inventare il suono

12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO

osc~ 200

expr~ ($v1 * 0.5) + 0.5

dac~

tabwrite~ bipolare

metro 100

tabwrite~ unipolare

bipolare

unipolare

Figura 103: l’oggetto expr∼ permette facilmente di effettuare le dueoperazioni sul segnale per trasformarlo trasformano dabipolare a unipolare

mente esistevano degli oscillatori specializzati nella generazionedi basse frequenza, sotto i 30 hertz circa, utilizzati proprio comestrumenti di controllo di altri oscillatori. Gli LFO (Low FrequencyOscillator) in Pd possono essere sostituiti dai normali oscillatori,che generano qualsivoglia frequenza.La patch in figura ?? realizza un tremolo semplice. Si può control-lare interattivamente la frequenza del tremolo con la number boxin alto e l’ampiezza del segnale in uscita con la slider orizzontale.Come si intuisce l’oscillatore modulante determina la frequenzadella variazione d’ampiezza, ma non l’escursione dell’ampiezzastessa, che oscilla sempre fra 0 e 1. La figura 105 mostra proprioquesta situazione, il segnale (a) viene modulato in ampiezza da(b) e il risultato (c) è un’oscillazione percepibile dell’ampiezzafra 0 e 1.Con la prossima patch un algoritmo più articolato del prece-dente realizza un tremolo controllabile in frequenza, ma anche

107

Page 108: Inventare il suono

12.3 SEGNALE DI CONTROLLO DELL’AMPIEZZA: IL TREMOLO

*~

osc~ 1

expr~ ($v1 * 0.5) + 0.5

2

controllo_tremolo

dac~

*~

line~

$1 20

osc~ 800

Figura 104: con la number box si può aumentare o diminuire lafrequenza del tremolo

Tremolo

a)

b)

c)

Figura 105: il segnale (a) viene moltiplicato per il segnale (b)generando il tremolo rappresentato in (c)

108

Page 109: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

Tremolo controllato in ampiezza

a)

b)

c)

Figura 106: il segnale (b) varia in ampiezza generando una variazionedell’ampiezza di (c)

in ampiezza, in modo da poter decidere anche l’escursione deltremolo. La figura 106 mostra proprio questa situazione. L’onda(b) varia l’ampiezza producendo in (c) un cambiamento grad-uale dell’entità del tremolo. In figura 107 la patch di Pd cheimplementa l’algoritmo relativo. Le due number box consentonodi intervenire interattivamente sulla frequenza e sull’ampiezzadel tremolo. La frequenza agisce esattamente come in figura 104

mentre per l’ampiezza il numero in entrata dalla number box didestra ha un range compreso fra 0 e 50 e in uscita viene divisoper 100, in modo da emettere un range fra 0 e 0.5. Il segnaleviene moltiplicato per quel valore e il risultato viene sommato alrisultato di 1 meno il valore in entrata.

12.4 LA MODULAZIONE D’AMPIEZZA

Definizione: Dato un segnale bipolare, detto Portante, e unounipolare, detto Modulante, ha luogo una modulazione d’ampiez-za (AM) quando il segnale unipolare modula l’ampiezza di quel-

109

Page 110: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

*~

osc~ 1

1

frequenza

dac~

*~

line~

$1 20

wave

tabwrite~ wave

metro 25

37

ampiezza

/ 100

osc~ 1600

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

Figura 107: con la number box a destra si può controllare l’ampiezzadel tremolo

lo bipolare.

Risultato: La modulazione d’ampiezza produce un suono conuno spettro in cui è presente la frequenza Portante e tutte lefrequenza somma e differenza fra Portante e Modulante. Tecni-camente la Modulazione d’ampiezza è molto simile al tremolo,con la differenza che per il tremolo il segnale Modulante è costi-tuito da un segnale di frequenza molto bassa. Nell’AM invece lafrequenza Modulante è compresa nella banda audio. Dal puntodi vista trigonometrico abbiamo:

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

110

Page 111: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

Rispetto alla Modulazione ad anello, nello spettro è quindi pre-sente anche il segnale Portante. In figura 108 viene mostrato lospettro di una modulazione d’ampiezza con Portante di 800 hze modulante 160 hz. Lo spettro sarà quindi:

(Pf ), (Pf + M f ), (Pf −M f ) =800, (800 + 160), (800− 160) =800, 960, 640

Modulazione d’ampiezza semplice

x

0 500 1000 1500 2000

Figura 108: Il segnale portante ha frequenza di 800 hz, mentre ilmodulante ha frequenza di 160 hz

Come nel caso della modulazione ad anello, nella Modulazioned’ampiezza i segnali possono essere costituiti da suoni comp-lessi. Lo spettro risultante sarà sempre l’insieme delle sommee differenze fra le frequenze della portante e della modulante ein più le frequenze della portante. La patch in figura 111 mostrauna doppia modulazione d’ampiezza. La portante di 1500 hzviene modulata con un segnale di 500 hz. Il risultato di talemodulazione è la portante di una nuova modulazione con unsegnale di 300 hz. Schematizzando:

(Pf ∗M1) ∗M2 =[1500, (1500 + 500), (1500− 500)] ∗M2 =(1500, 2000, 1000) ∗M2 =

111

Page 112: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

osc~ 800 osc~ 160

Figura 109: la patch che produce lo spettro della figura precedente

(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 111.

12.4.1 L’INDICE DI MODULAZIONE

La patch in figura 109 genera una semplice modulazione d’ampiez-za dove la Portante e le frequenze laterali hanno la stessa ampiez-za. Oltretutto impostare a zero la frequenza o l’ampiezza dellaModulante porterebbe a zero anche l’ampiezza della Portante,poiché il segnale Portante sarebbe moltiplicato per zero. At-traverso un indice di modulazione è possibile controllare il rap-porto fra l’ampiezza della Portante e quella della Modulante.

112

Page 113: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

expr~ ($v1 * 0.5) + 0.5

*~

osc~ 1500

osc~ 500

osc~ 300

Figura 110: la patch realizza una modulazione d’ampiezza con duemodulanti

L’algoritmo per implementare l’indice di modulazione deve as-sicurare che l’ampiezza in uscita dall’AM sia sempre pari a 1,quindi al diminuire dell’ampiezza della modulante ci sarà unaumento della costante che si somma all’ampiezza della Modu-lante e che si moltiplica alla Portante. I figura 112 c’è lo spettrodi una modulazione con Portante a 800 hz e Modulante a 160 hz.Nella figura 113 c’è la relativa patch di Pd.

113

Page 114: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

Modulazione di ampiezza con 2 modulanti

x

0 1000 2000 3000

Figura 111: la patch che produce lo spettro della figura precedente

Indice di modulazione 0.25

x

0 500 1000 1500

Figura 112: spettro di modulazione di ampiezza con indice dimodulazione pari a 0.25

114

Page 115: Inventare il suono

12.4 LA MODULAZIONE D’AMPIEZZA

*~

expr~ ($v1 * 0.5) + 0.5

dac~

*~

line~

$1 20

osc~ 800

line~

$1 20

osc~ 160

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

Figura 113: la slider verticale a destra controlla l’indice di modu-lazione, con range da 0 a 1

115

Page 116: Inventare il suono

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

13.1 SEGNALE DI CONTROLLO DELLA FREQUENZA: IL

VIBRATO

Prima di trattare della Modulazione d’ampiezza avevamo vis-to che con un’oscillazione a basse frequenze è possibile mod-ulare l’ampiezza di un onda producendo un effetto di tremo-lo. Analogamente, agendo sulla frequenza del segnale con unLFO possiamo modulare la frequenza dell’oscillatore producen-do 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

Figura 114

116

Page 117: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

Nella patch in figura 114 il segnale bipolare dell’LFO sarà molti-plicato per 40, producendo un’onda che varierà in ampiezza fra-40 e 40 hz. Questo segnale modulerà la frequenza dell’oscilla-tore di sinistra che ha una frequenza 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 luo-go una modulazione di frequenza (FM) quando il segnale Mod-ulante modula la frequenza di quello Portante.

Risultato: La FM produce uno spettro molto ricco costituito dalsegnale Portante e da un certo numero di parziali con frequenzapari alla distanza fra la Portante e un multiplo intero della Mod-ulante. 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 del-la FM è simmetrico rispetto all’asse della frequenza Portante,ma contiene un numero di bande laterali dipendendente dalladeviazione di picco.La deviazione di picco è ”il massimo mutamento di frequenza chel’oscillatore portante subisce”1. La deviazione di picco si stabilisceattraverso un indice di modulazione secondo la formula:

I = DM f

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

D = I ∗M f

Più elevato è il valore dell’indice di modulazione, maggiore saràla deviazione di picco, più numerose le componenti della portantemodulata in frequenza. In figura 115 è mostrata una patch per la

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

117

Page 118: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

modulazione di frequenza semplice. Fa uso di tre subpatch cheesaminiamo una alla volta.

dac~

pd modulante

200

freq

1000

indice

10

Deviazione

2000

pd uscita

pd portante

4000

freq

Figura 115: la patch per la modulazione di frequenza semplice

In figura 116 è raffigurata la subpatch per la portante. L’inletriceve il segnale prodotto dalla modulante, che viene sommatoalla frequenza della portante, che si può impostare con la numberbox in alto.In figura 117 si può osservare che la number box a sinistra impos-ta la frequenza dell’oscillatore modulante. Tale frequenza viene

118

Page 119: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

osc~

+~

0

freq

inlet~

outlet~

Figura 116: la subpatch per il segnale portante

anche moltiplicata per l’indice di modulazione. Il prodotto di talemoltiplicazione determina la deviazione di picco, quindi l’ampiez-za dell’oscillatore modulante. Il segnale in uscita dall’outlet entranell’inlet della Portante.

Sulla patch per l’uscita (fig. 118) non c’è molto da dire: una sliderverticale controlla l’ampiezza del segnale prodotto dalla FM.Maggiore è la deviazione di picco, maggiore sarà il numero di com-ponenti presenti nello spettro. In figura 119 l’indice di modu-lazione pari a 0.1 determina una deviazione di picco di 20 hz (0.1* M f , ovvero 0.1 * 200 = 20) quindi un numero esiguo di com-ponenti spettrali. In figura 120 l’indice pari a 10 determina unadevizione di 2000 hz, quindi uno spettro molto più ricco: nellabanda di frequenza compresa fra (Pf − D) e (Pf + D) (2000 -6000) le ampiezze grosso modo si equivalgono mentre al di sottoe al di sopra di tali limiti inizia una diminuzione graduale delleampiezze.

13.2.1 L’INVILUPPO

Fino ad ora il risultato delle operazioni ha sempre prodotto seg-nali continui. Non ci siamo occupati di definire un evento neldominio del tempo, che fosse provvisto di un inizio e di una fine,

119

Page 120: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

*~

osc~ 200 $1 20

line~

$1 20

line~

*~

200

freq

1000

indice

outlet~

/ 100

10

Deviazione

2000

*

t b f

Figura 117: la subpatch per il segnale modulante

come invece accade per ogni suono reale. Con gli strumenti dig-itali abbiamo la possibilità di creare suoni di durata indefinita,ma anche di definire la loro durata nel tempo.Per disegnare un suono definito nel dominio del tempo abbiamobisogno di un inviluppo, ovvero di un profilo che determini laforma che il suono assume rispetto al tempo. In figura 121 sipuò osservare la forma d’onda prodotta da un suono di trombadella durata di circa 6 decimi di secondo. Approssimando moltosi può distinguere una fase (attacco in cui l’onda passa da unostato di quiete ad uno di massima ampiezza, una seconda fase incui c’è un calo dell’ampiezza (decadimento), una terza fase in cuiil suono si mantiene più o meno costante (sostegno) e un’ultimafase (rilascio) in cui l’onda torna allo stato di quiete. Queste

120

Page 121: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

*~

$1 20

line~

outlet~

inlet~

Figura 118: la subpatch per l’uscita

Spettro FM indice 0.1

x

0 1000 2000 3000 4000 5000 6000 7000 8000

Figura 119: FM con frequenza portante di 4000 hz, modulante di 200

hz e indice di modulazione 0.1

quattro fasi, a volte indicate con l’acronimo ADSR, costituisconol’inviluppo del suono.Naturalmente l’ADSR costituisce un’approssimazione, ci sononella realtà dei suoni che non hanno la fasi di sostegno o quel-la di decadimento, ad esempio alcuni suoni percussivi. Sicura-mente però l’attacco e il rilascio del suono sono nei suoni realisempre presenti. Nella musica elettronica un esempio tipico di

121

Page 122: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

Spettro FM indice 10

x

0 1000 2000 3000 4000 5000 6000 7000 8000

Figura 120: FM con frequenza portante di 4000 hz, modulante di 200

hz e indice di modulazione 10

Inviluppo di tromba

tempo

ampiezza

Figura 121

inviluppo è quello mostrato in figura 122(b), che viene applicatoal segnale (a), producendo la forma d’onda mostrata in (c).Uno degli strumenti per generare inviluppi in Pd è l’oggetto en-vgen che ci consente di disegnare inviluppi costituiti da segmenti.L’output dell’oggetto è un messaggio leggibile con line (fig. 123).Nella prossima sezione faremo uso di generatori di inviluppo

122

Page 123: Inventare il suono

13.2 MODULAZIONE DI FREQUENZA

a)

b)

c)

Figura 122: l’inviluppo disegnato in (b) ha valori compresi fra 0 e 1.L’onda (a) viene inviluppata da (b), ovvero istante per is-tante le ampiezze istantanee di (a) vengono moltiplicateper i relativi valori di (b), producendo (c)

nella modulazione di frequenza.

13.2.2 FM A SPETTRO VARIABILE

Un uso interessante della modulazione di frequenza è quello diusare degli inviluppi per creare spettri variabili. Con la prossimapatch generiamo una sequenza di suoni brevi che simulano iltimbro di un woodblock, secondo un algoritmo proposto da JohnChowning2.L’algoritmo è semplice: una FM con portante di 80 hz e modu-lante di 55 hz. Un indice di modulazione gestito da un inviluppo

2

123

Page 124: Inventare il suono

13.3 PORTANTI MULTIPLE

Figura 123: l’oggetto envgen

con una punta massima di 25 e un altro inviluppo per l’ampiez-za del suono. In figura 124 c’è l’intero algoritmo. La durata diun evento è di 200 millisecondi. La subpatch pd indexenv servesemplicemente a rescalare i valori in uscita dell’oggetto envgenche emette solo valori di ampiezza compresi fra 0 e 1 (fig. 125.La subpatch envamp invece memorizza i dati del’altro envgen e lispedisce a line senza alcun riscalamento.Infine in figura 127 c’è il sequencer per la generazione dei bangper innescare gli eventi sonori. L’oggetto list-idx riceve una listadi 0 e 1, 1 laddove l’evento deve essere on, 0 quando dev0essereoff. metro collegato a un contatore costringe list-idx ad emet-tere uno ad uno i valori della lista, quando il valore è ugualea uno la patch invia un bang agli inviluppi, creando la sequenzadesiderata.

13.2.3 ALGORITMO PER IL CONTROLLO random DEI PARAMETRI

13.3 PORTANTI MULTIPLE

13.4 MODULANTI MULTIPLE

124

Page 125: Inventare il suono

13.4 MODULANTI MULTIPLE

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

Figura 124: la patch per l’FM semplice di Chowning

125

Page 126: Inventare il suono

13.4 MODULANTI MULTIPLE

unpack f f

pack f f

outlet~

inlet

s envindex

inlet

prepend set

1 16 0 184 0

loadbang* 25

line~ 0 5

Figura 125: La subpatch per il riscalamento dei valori di envgen. Leampiezze vengono scalate in un range fra 0 e 25. La partedestra della patch serve a memorizzare i dati disegnati inenvgen. L’help dell’oggetto spiega 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

Figura 126: la subpatch envamp

126

Page 127: Inventare il suono

13.4 MODULANTI MULTIPLE

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

Figura 127: la subpatch seqz

127

Page 128: Inventare il suono

14S I N T E S I P E R D I S TO R S I O N E N O N L I N E A R E( D N L )

14.1 ANCORA SULLE TABELLE

14.2 TEORIA DELLA SINTESI PER DISTORSIONE NON LINEARE

14.3 SINTESI PER DISTORSIONE NON LINEARE

128

Page 129: Inventare il suono

15I N T R O D U Z I O N E A L L A S I N T E S I G R A N U L A R E

15.1 TEORIA DELLA SINTESI GRANULARE

15.1.1 PANORAMICA DEI TIPI DI SINTESI GRANULARE

15.2 ALGORITMO PER LA SINTESI Pulsar

129

Page 130: Inventare il suono

16A LT R E A P P L I C A Z I O N I D I P U R E DATA

16.1 GEM E IL VIDEO

16.1.1 UN ESEMPIO CON GEM

16.2 ARDUINO

16.2.1 pduino

16.3 IL PROTOCOLLO osc

16.3.1 netsend E netreceive

16.4 IL Live coding

16.4.1 SUONARE IN RETE: oggcast∼

130

Page 131: Inventare il suono

C O N C L U S I O N E

131

Page 132: Inventare il suono

I N D I C E A N A L I T I C O

object box, 17

object box, 16, 17

print, 16

132