# 1 - Benvenuto amico :-)

Benvenuto in Sonic Pi. Probabilmente non vedi l’ora di cominciare a fare strani suoni almeno quanto io sono impaziente di mostrarti come si fa. Sarà un viaggio veramente divertente nel quale imparerai tutto su musica, sintesi, programmazione, composizione, performance e altro.

Un momento, non mi sono nemmeno presentato! Sono Sam Aaron - il tipo che ha realizzato Sonic Pi. Mi puoi trovare su Twitter @samaaron e mi farà molto piacere conoscerti. Magari ti interessa sapere qualcosa di più anche delle mie Live Coding Performances dove scrivo codice dal vivo con Sonic PI davanti al pubblico.

Se hai qualche suggerimento o idea per migliorare Sonic PI, mi raccomando, fammela sapere: il tuo feedback è un aiuto importante. Non si può mai sapere, la tua idea potrebbe essere la prossima “big feature”!

Questo tutorial è suddiviso in sezioni raggruppate in categorie. Anche se l’ho pensato per un apprendimento facile e progressivo dall’inizio alla fine, sentiti libero di passare da un argomento all’altro senza seguire necessariamente l’ordine del tutorial. Se pensi che manchi qualcosa, fammelo sapere e io prenderò in considerazione il tuo suggerimento per una prossima versione.

Infine, guardare gli altri che fanno live code è un ottimo sistema per imparare. Mi trovi spesso su livecoding.tv/samaaron quindi lasciami un messaggio e fammi tante domande :-)

Ok, possiamo cominciare…

# 1.1 - Live Coding

Uno degli aspetti più divertenti di Sonic Pi è che ti permette di scrivere e modificare codice live per fare musica, proprio come se suonassi una chitarra dal vivo. Questo significa che dopo un po’ di pratica puoi salire sul palco ed esibirti con Sonic Pi.

## Libera la tua mente

Prima di entrare nel vivo del funzionamento di Sonic Pi, vorrei farti capire meglio cosa vuol dire live code. Per il momento non ti preoccupare se non capisci molto (o anche nulla) di quello che vedremo. Mettiti solo comodo e divertiti…

## Un live loop

Allora cominciamo, copia il codice qui di seguito in uno dei workspace che trovi qui sopra:

    live_loop :flibble do
    sample :bd_haus, rate: 1
    sleep 0.5
    end

Ora premi il tasto `Run` e sentirai un bel suono di cassa che batte il tempo. Per fermare il suono basta premere sul tasto `Stop`. Però, per il momento, non premerlo ancora… Segui invece questi passaggi:

1. Assicurati che il suono della cassa sia ancora attivo.
2. Cambia il valore di `sleep` da `0.5` a qualcosa di più grande di `1`.
3. Premi di nuovo il tasto `Run`.
4. Nota come è cambiata la velocità della batteria.
5. Infine, ricorda questo momento: questa è la prima volta che hai fatto live coding con Sonic Pi ed è probabile che non sarà l’ultima…

Ok, fin qui era abbastanza semplice. Adesso aggiungi qualcos’altro al mix. Sopra `sample :bd_haus` aggiungi l’istruzione `sample :ambi_choir, rate: 0.3`. Il tuo codice dovrebbe apparire così:

    live_loop :flibble do
    sample :ambi_choir, rate: 0.3
    sample :bd_haus, rate: 1
    sleep 1
    end

E adesso, sbizzarrisciti. Cambia il parametro `rate:` - cosa succede se usi valori grandi, o piccoli, o negativi? Guarda cosa succede se cambi il valore di `rate:` del campione `:ambi_choir` anche di pochissimo (diciamo 0.29). E che succede se scegli un valore molto piccolo per `sleep`? Guarda se riesci a farlo così veloce da provocare un errore perché il computer non riesce a stargli dietro. (Se succede, basta scegliere un valore di `sleep`più grande e premere di nuovo `Run`)

Prova a inserire all’inizio di una delle istruzioni `sample` un `#`:

    live_loop :flibble do
    sample :ambi_choir, rate: 0.3
    #  sample :bd_haus, rate: 1
    sleep 1
    end

Fai caso a come il `#` dice al computer di ignorare quello che c’è scritto dopo, e di conseguenza non sentiamo più il campione. In Sonic Pi possiamo usare i commenti per togliere o reinserire elementi al mix.

Infine, ecco qualcosa di divertente con cui giocare. Prendi il codice qui sotto e copialo in un workspace vuoto. Poi, non cercare di capire altro, se non che ci sono due loop - due cose che suonano nello stesso tempo. Quindi, fai quello che sai fare meglio: provare e sperimentare. Ecco alcuni suggerimenti:

- Prova a cambiare i valori scritti in blu di `rate:` e ascolta il suono del campione che cambia.
- Prova a cambiare i tempi di `sleep` e senti come tutti e due i loop possono girare a differenti velocità.
- Prova a “s-commentare” l’istruzione sample (togli il `#`) e goditi il suono della chitarra al contrario.
- Prova a cambiare uno qualsiasi dei valori scritti in blu di `mix` con numeri che vanno da `0` (tutto fuori dal mix) a `1` (tutto nell mix).

Ricordati di premere `Run` e sentirai il cambiamento non appena il loop viene suonato di nuovo. Se fai qualche errore, non preoccuparti: premi `stop`, cancelli il codice nel workspace, copi di nuovo il codice originale e sei pronto per ricominciare. Sbagliare è il modo più veloce per imparare.

    live_loop :guit do
    with_fx :echo, mix: 0.3, phase: 0.25 do
    sample :guit_em9, rate: 0.5
    end
    #  sample :guit_em9, rate: -0.5
    sleep 8
    end

    live_loop :boom do
    with_fx :reverb, room: 1 do
    sample :bd_boom, amp: 10, rate: 1
    end
    sleep 8
    end

Suona e fai esperimenti finché non avrai soddisfatto la tua curiosità su come funziona tutto questo e avrai cominciato a chiederti che altro ci puoi fare. A quel punto sei pronto per continuare a leggere il tutorial.

Allora, che aspetti?

# 1.2 - L’interfaccia di Sonic Pi

Sonic Pi ha un’interfaccia molto semplice per programmare la musica. Diamogli un’occhiata.

- A - Controlli di riproduzione
- B - Controlli di modifica
- C - Info e Help
- D - Editor del codice
- E - Pannello preferenze
- F - Visualizzatore Messaggi
- G - Help System

## A. Controlli di riproduzione

Questi tasti rosa sono i controlli principali per far partire o fermare i suoni. Il tasto Run esegue il codice che hai scritto nell’editor, Stop per fermare tutto il codice in esecuzione, Save per salvare il codice in un file esterno e Record per registrare (in un file WAV) i suoni prodotti.

## B. Controlli di modifica

Questi tasti arancione ti permettono di modificare l’aspetto del codice nell’editor. I tasti Size + e Size - rendono il testo più grande o più piccolo. Il tasto Align mette in ordine il codice per renderlo più professionale.

## C. Info e Help

Questi tasti blu ti danno accesso alle informazioni, all’help e alle opzioni. Il tasto Info apre la finestra delle informazioni che contiene le notizie su Sonic Pi, il team di sviluppo, la storia, i collaboratori e la community. Il tasto Help apre e chiude l’help (F) e il tasto Prefs apre e chiude la finestra delle opzioni che ti permette di modificare alcune impostazioni di base del programma.

## D. Editor del codice

Questa è l’area dove scriverai il tuo codice e comporrai/eseguirai la tua musica. E’ un semplice editor di testo dove puoi scrivere le tue istruzioni, cancellarle, copiarle e incollarle etc. Pensalo come una versione molto elementare di Word o Google Docs. L’editor cambia il colore delle parole sulla base del loro significato nel linguaggio. Questo all’inizio può sembrare strano, ma presto ti accorgerai che è molto utile. Per esempio, qualunque testo colorato di blu è sicuramente un numero.

## E. Pannello delle preferenze

Attraverso il tasto prefs nel gruppo di tasti Info e Help, puoi accedere alle opzioni di configurazione di Sonic Pi. Il tasto di permette di aprire e chiudere la finestra delle preferenze che possono essere modificate. Per esempio, forzare la modalità mono, invertire i canali stereo, modificare il livello di dettaglio dei messaggi di log e anche un cursore per il livello del suono in uscita e un selettore audio se stai usando un Raspberry Pi.

## F. Visualizzatore messaggi

Quando i tuoi programmi girano, le informazioni su cosa stiano facendo vengono visualizzate nella finestra di Log. Per default, noterai che c’è un messaggio per ogni suono che generi e che riporta il tempo esatto in cui il suono viene prodotto. Vedrai che questo ti sarà molto utile quando dovrai fare il debug (individuare gli errori) del tuo codice o capire cosa sta facendo il tuo programma.

## G. Help System

Infine, una delle parti più importanti dell’interfaccia di Sonic Pi è l’Help che appare in basso nella finestra del programma. Puoi attivarlo o disattivarlo usando il tasto Help. Il sistema di Help contiene la documentazione e le informazioni su tutti gli aspetti di Sonic Pi compreso questo tutorial, una lista dei sintetizzatori e dei campioni disponibili, esempi, effetti (FX) ed una lista completa di tutte le funzioni e le istruzioni disponibili nel linguaggio di Sonic Pi.

# 1.3 - Imparare suonando

Sonic PI ti incoraggia ad imparare sia l’informatica che la musica suonando e sperimentando. La cosa più importante è che, mentre ti diverti, senza accorgertene impari a programmare, a comporre e a esibirti..

## Non esistono errori.

Già che ne stiamo parlando, permettimi di darti una dritta che ho imparato in anni di live coding in musica: non esistono errori, ma solo opportunità. È una cosa che ho spesso sentito dire a proposito del jazz, ma funziona altrettanto bene con il live coding. Non importa quanto tu sia esperto - un principiante o un Algoraver navigato: ti capiterà sempre di eseguire del codice dal risultato completamente inaspettato. Potrebbe suonare maledettamente bene, e allora vai tranquillo. Ma potrebbe suonare anche totalmente cacofonico e sballato. Non è importante quello che è venuto fuori, ma quello che ci farai subito dopo. Prendi il suono, manipolalo e modellalo fino a farlo diventare qualcosa di spettacolare. Il pubblico impazzirà.

## Comincia dalle cose semplici

Mentre si sta imparando, si è tentati di fare subito cose straordinarie. Metti da parte questo obiettivo e consideralo come qualcosa da raggiungere più in là. Per adesso, pensa piuttosto che la cosa più semplice che potresti scrivere con divertimento e soddisfazione è un piccolo passo verso ciò che hai in mente. Una volta che hai un’idea su quel piccolo passo, prova a realizzarlo, suonalo e vedi quali nuove idee ti suggerisce. Sarai ben presto troppo occupato a divertirti e a fare progressi concreti.

Accertati sempre di condividere il tuo lavoro con gli altri!

# 2 - Synth (Sintetizzatori)

OK, di introduzione ne abbiamo abbastanza - cominciamo a fare qualche suono.

In questa parte vedremo le basi del’utilizzo dei synth. Synth è un’abbreviazione di synthesizer (sintetizzatore) che è una strana parola che serve ad indicare un generatore di suoni. Di solito i synth sono abbastanza complicati da usare - specialmente quelli analogici che hanno molti cavi di collegamento e moduli. Sonic Pi, invece, ti dà molte di quelle potenzialità in modo semplice e intuitivo.

Non farti ingannare dall’apparente semplicità dell’interfaccia di Sonic Pi. Potrai arrivare a padroneggiare tecniche molto potenti di manipolazione del suono, se non ti mancherà la passione. Reggiti forte alla sedia…

# 2.1 - I tuoi primi Beep

Dai un’occhiata a questa istruzione:

    play 70

È da qui che comincia tutto. Copiala e incollala nella finestra del codice in alto (il grande spazio bianco sotto il tasto Run). Ora, premi Run…

## Beep!

Forte. Premilo ancora. E ancora. E ancora…

Wow, pazzesco, sono sicuro che potresti continuare così per tutto il giorno. Ma aspetta, prima di perderti in un flusso infinito di beep, prova a cambiare il numero:

    play 75

Senti la differenza? Prova con un numero più piccolo:

    play 60

Quindi, numeri più piccoli producono suoni più gravi e numeri più grandi producono suoni più acuti. Proprio come sulla tastiera di un pianoforte, i tasti della parte più bassa (quella della mano sinistra) suonano note più gravi e i tasti della parte più alta (quella della mano destra) suonano note più acute. Infatti, i numeri fanno riferimento proprio alle note del pianoforte, considerando che al primo tasto a sinistra corrisponde il numero 21. Quindi `play 47` vuol dire suona la 26esima nota del pianoforte. Il che significa che `play 48` suona una nota sopra (la nota successiva verso destra). Per esempio, il Do (C, nella notazione inglese) della quarta ottava è il numero 60. Prova a farlo suonare `play 60`.

Non ti preoccupare se ti sembra che non abbia alcun senso: nemmeno per me lo aveva quando ho cominciato. Tutto quello che ti serve di sapere per ora è che numeri piccoli fanno beep più gravi e numeri grandi fanno beep più acuti.

## Accordi

Suonare una nota è divertente, ma suonarne tante contemporaneamente può esserlo anche di più. Prova:

    play 72
    play 75
    play 79

Forte! Quindi, quando scrivi tanti `play`, suonano tutti contemporaneamente. Prova da solo: quali numeri suonano bene insieme? Quali invece stridono? Sperimenta, esplora e scopri da solo.

## Melodia

Quindi, suonare note e accordi è divertente, ma che ne dici di provare con una melodia? Ovvero, come si fa a far suonare una nota dopo l’altra e non tutte insieme? Beh, è facile, basta fare una sosta (`sleep`) tra le note:

    play 72
    sleep 1
    play 75
    sleep 1
    play 79

Che bello, un piccolo arpeggio. Ma che significa quell’ `1` in `sleep 1`? Quel numero indica la durata dello sleep. Vuol dire “aspetta per un beat”, ma per il momento pensiamo che significhi uno stop di un secondo. E se invece volessimo suonare il nostro arpeggio un po’ più velocemente? Basta usare valori più piccoli per l’istruzione `sleep`. Che ne dici della metà, `0.5`?

    play 72
    sleep 0.5
    play 75
    sleep 0.5
    play 79

Hai notato che suona più veloce? Ora prova, da solo, a cambiare note e tempi.

Una cosa che puoi provare sono i valori intermedi per le note, come `play 52.3` oppure `play 52.63`. Non c’è nessun bisogno, infatti, di limitarsi ai valori interi delle note. Divertiti a provare da solo.

## Nomi letterali delle note

(N.d.T. in inglese le note si chiamano con le lettere dell’alfabeto e cominciano dal La invece che dal Do. Quindi A = La, B = Si, C = Do, D = Re, E = Mi, F = Fa, G = Sol.) Se già conosci un po’ di notazione musicale (se non la conosci non ti preoccupare, per il momento non è necessaria per divertirsi) potresti voler scrivere una melodia usando i nomi delle note come C e F# invece dei numeri. Sonic Pi ha pensato anche a questo. Puoi fare così:

    play :C
    sleep 0.5
    play :D
    sleep 0.5
    play :E

Non dimenticare i due punti `:` prima del nome della nota in modo che diventi rosa. Puoi anche specificare l’ottava indicando un numero dopo il nome della nota:

    play :C3
    sleep 0.5
    play :D3
    sleep 0.5
    play :E4

Se ti serve una nota col diesis (in inglese sharp), aggiungi una `s` dopo il nome della nota come in `play :Fs3` o se ti serve col bemolle (in inglese flat) aggiungi una `b` come in `play :Eb3`.

Ora puoi sbizzarrirti a far suonare note, accordi e melodie.

# 2.2 - Paramentri dei Synth: Amp e Pan

Oltre a permetterti di controllare quale nota o quale campione suonare, Sonic Pi fornisce un insieme completo di parametri per inventare e controllare il suono. Ne incontreremo molti in questo tutorial e puoi trovare una trattazione completa nell’help. Per il momento, però, ne introdurremo due tra i più utili: ampiezza e bilanciamento (in inglese amplitude e pan). Prima di tutto diamo un’occhiata a cosa sono effettivamente i parametri.

## Parametri

Sonic Pi usa il concetto di parametro per i suoi synth. I parametri sono quantità che vengono passati all’istruzione `play` e che controllano e modificano caratteristiche del suono che ascolti. Ogni synth ha il suo gruppo di parametri per controllare in modo dettagliato il suono generato, ma comunque molti synth hanno in comune alcuni parametri come per esempio `amp:` e quelli che riguardano l’inviluppo (trattati in un paragrafo successivo). I parametri hanno due parti, il nome (ovvero il nome del controllo) e il valore (il valore a cui vuoi impostare il controllo). Per esempio, potresti avere un parametro che si chiama `cheese:` e volerlo impostare al valore `1`.

I parametri sono passati alle istruzioni `play` usando una virgola `,` seguita dal nome del parametro, per esempio `amp:` (non dimenticare i due punti `:`) e quindi da uno spazio e dal valore del parametro. Per esempio:

    play 50, cheese: 1

(Nota bene che `cheese:` non è un parametro valido, è solo per fare un esempio).

Puoi passare più parametri in una volta separandoli con una virgola:

    play 50, cheese: 1, beans: 0.5

L’ordine dei parametri non conta, quindi questa istruzione ha lo stesso effetto di quella precedente:

    play 50, beans: 0.5, cheese: 1

I parametri che non sono riconosciuti dal synth vengono ignorati (come `cheese` e `beans` che sono ovviamente nomi assurdi per dei parametri!)

Se per sbaglio usi lo stesso parametro due volte con diversi valori, l’ultimo vince. Per esempio `beans` in questa istruzione avrà il valore 2 invece di 0.5:

    play 50, beans: 0.5, cheese: 3, eggs: 0.1, beans: 2

Molte cose in Sonic Pi accettano parametri, quindi passa un po’ di tempo a capire come usarli e sarai pronto! Giochiamo un po’ con il nostro primo parametro `amp:`

## Ampiezza

L’ampiezza è una rappresentazione digitale del volume di un suono. Un’ampiezza elevata produce un suono forte mentre un valore basso di ampiezza produce un suono debole. Come Sonic Pi usa numeri per rappresentare il tempo e le note, allo stesso modo usa numeri per rappresentare anche l’ampiezza. Un’ampiezza di valore 0 equivale al silenzio (non si sentirà nulla) mentre un’ampiezza di valore 1 equivale al volume normale. Puoi anche forzare l’ampiezza a valori più alti (2, 10, 100), ma vedrai che quando l’ampiezza complessiva di tutti i suoni diventa troppo alta, Sonic Pi usa il cosiddetto compressore per riportarla di nuovo a valori tali da non risultare troppo alti per le orecchie. Ciò può rendere il suono confuso e strano. Perciò prova ad usare ampiezze basse, diciamo tra 0 e 0.5, per evitare la compressione.

## Amp-lificato…!

Per cambiare l’ampiezza di un suono, puoi usare il parametro `amp:`. Ad esempio, per suonare a metà ampiezza, dai un valore di 0.5: ~~~~ play 60, amp: 0.5 ~~~~

Per suonare ad ampiezza doppia, dai un valore di 2

    play 60, amp: 2

Il parametro `amp:` modifica soltanto la chiamata a `play` a cui è associato. Così, ad esempio, la prima chiamata a `play` è a metà volume, mentre la seconda è di nuovo sul valore di default:

    play 60, amp: 0.5
    sleep 0.5
    play 65

Naturalmente puoi usare differenti valori per `amp:` per ogni play:

    play 50, amp: 0.1
    sleep 0.25
    play 55, amp: 0.2
    sleep 0.25
    play 57, amp: 0.4
    sleep 0.25
    play 62, amp: 1

## Panning

Un altro parametro divertente è `pan:`, che controlla la collocazione del suono (panning) sul fronte stereofonico. In Sonic Pi usiamo un -1 per posizionare il suono tutto a sinistra, 0 per posizionare il suono al centro e 1 per posizionare il suono tutto a destra.

Facciamo suonare un beep dall’altoparlante a sinistra:

    play 60, pan: -1

Ora, dall’altoparlante a destra:

    play 60, pan: 1

Infine, facciamolo suonare al centro (che è la posizione di default):

    play 60, pan: 0

E adesso divertiti a cambiare le ampiezze e il panning dei tuoi suoni!

# 2.3 - Muoversi fra i Synth

Finora ci siamo divertiti un sacco con i beep. Ma probabilmente questi semplici beep staranno cominciando ad annoiarti. È tutto qui quello che Sonic Pi ha da offrire? Ci sarà qualcosa di più nel live coding che suonare dei beep! Certo che c’è, e in questa sezione esploriamo la vasta gamma di suoni che offre Sonic Pi.

## Synth

Sonic Pi offre una ampia gamma di strumenti chiamati synth, forma abbreviata per sintetizzatori. Mentre i sample contengono suoni pre-registrati, i synth sono in grado di generare nuovi suoni in base a come li controlli (cosa che esploreremo più in là nel tutorial). I synth di Sonic Pi sono molto potenti ed espressivi e ti divertirai molto nell’esplorarne le possibilità e nel suonarli. Per prima cosa, impariamo a selezionare il synth da suonare.

## Denti di sega e profeti

Un suono divertente è il dente di sega. Proviamolo:

    use_synth :saw
    play 38
    sleep 0.25
    play 50
    sleep 0.25
    play 62
    sleep 0.25

Adesso proviamo un altro suono - il prophet:

    use_synth :prophet
    play 38
    sleep 0.25
    play 50
    sleep 0.25
    play 62
    sleep 0.25

E se combinassimo insieme due suoni? Prima uno dietro l’altro:

    use_synth :saw
    play 38
    sleep 0.25
    play 50
    sleep 0.25
    use_synth :prophet
    play 57
    sleep 0.25

Ora, tutti insieme

    use_synth :tb303
    play 38
    sleep 0.25
    use_synth :dsaw
    play 50
    sleep 0.25
    use_synth :prophet
    play 57
    sleep 0.25

Nota che il comando `use_synth` influenza soltanto le chiamate seguenti a `play`. Pensalo come un grande switch - le nuove chiamate a `play` useranno qualsiasi sintetizzatore sia in uso in quel momento. Puoi regolare lo switch su un nuovo synth con l’istruzione `use_synth`.

## Alla scoperta dei Synth

Per vedere quali sintetizzatori Sonic Pi mette a tua disposizione, dai un’occhiata all’opzione Synths (prima di Fx) nel menu verticale in basso a sinistra. Ce ne sono più di 20 tra cui scegliere. Ecco qui sotto soltanto alcuni dei miei preferiti:

- `:prophet`
- `:dsaw`
- `:fm`
- `:tb303`
- `:pulse`

Ora divertiti a cambiare i synth mentre fai la tua musica. Divertiti a combinare i synth per fare nuovi suoni e ad usare synth differenti in diverse sezioni della tua musica.

# 2.4 - Durate e inviluppi

Nelle sezioni precedenti, abbiamo visto come usare il comando `sleep` per controllare l’attacco della nota, ma non siamo ancora in grado di controllare la durata dei suoni.

Per dotarci di uno strumento semplice ma potente per controllare le durate dei suoni, Sonic Pi implementa il concetto di inviluppo ADSR (ci occuperemo più oltre in questa stessa sezione di cosa voglia dire ADSR). Un inviluppo di ampiezza permette di gestire due utili aspetti del controllo: * controllo della durata di un suono * controllo dell’ampiezza

## Durata

La durata è il tempo che un suono…dura! Una durata più lunga significa che sentirai il suono per un tempo più lungo. Tutti i suoni in Sonic Pi hanno un inviluppo di ampiezza controllabile, e la durata di tale inviluppo corrisponde alla durata del suono. Quindi, controllando l’inviluppo, controlli allo stesso tempo la durata.

## Ampiezza

L’inviluppo ADSR non controlla soltanto la durata, ma fornisce anche un controllo accurato dell’ampiezza del suono. Tutti i suoni udibili iniziano dal silenzio e finiscono nel silenzio, e contengono una parte non-silenziosa nel mezzo. Gli inviluppi ti permettono di variare e mantenere l’ampiezza della parte non-silenziosa del suono. È come dare a qualcuno istruzioni su come e quanto alzare e abbassare il volume dell’amplificatore della chitarra. Per esempio, potresti chiedere a questa persona di iniziare dal silenzio, alzare il volume lentamente fino al massimo, mantenerlo per un po’ e riabbassarlo di colpo. Sonic Pi ti permette di controllare con precisione questo tipo di comportamento mediante gli inviluppi.

Tanto per riassumere: come abbiamo visto prima, una ampiezza di 0 equivale a silenzio e un’ampiezza 1 è il volume normale (cioè il volume massimo che il computer può esprimere senza distorcere il segnale).. Ora, diamo un’occhiata alle parti da cui l’inviluppo è composto.

## Fase di rilascio (Release)

L’unica parte dell’inviluppo che viene usata di default è il rilascio (release). Si tratta del tempo che il suono di un synth impiega a dissolvere. Tutti i synth hanno un tempo di rilascio impostato a 1, il che vuol dire che, di default, hanno la durata di 1 beat (che a sua volta, al tempo di default di 60BPM, equivale a 1 secondo):

    play 70

La nota resterà udibile per 1 secondo. Prova a verificare tu stesso. Questa era la forma breve in luogo di quella più lunga ed esplicita:

    play 70, release: 1

Nota come il suono abbia esattamente la stessa durata di prima (il suono dura un secondo). Ma ora è molto facile cambiare la durata modificando il valore dell’opzione `release:`

    play 60, release: 2

Possiamo anche far suonare il synth per una durata molto breve usando un valore molto piccolo del tempo di rilascio:

    play 60, release: 0.2

La durata del rilascio di un suono è chiamata fase di rilascio e, di default, è una transizione lineare (cioè segue una linea retta), Il seguente diagramma illustra questa transizione:

La linea verticale sulla sinistra del diagramma indica che il suono comincia ad ampiezza 0, ma sale ad ampiezza massima immediatamente (questa è la fase di attacco, di cui ci occuperemo dopo). Raggiunta l’ampiezza massima, scende con una linea diritta fino a zero, e per fare questo impiega esattamente il tempo specificato da `release:`. Valori di release più lunghi producono dissolvenze più lente.

Ora poi cambiare la durata dei suoni cambiando il tempo di rilascio. Divertiti ad aggiungere i tempi di rilascio alle note della tua musica.

## Fase d’attacco

Di default, la fase d’attacco è 0 per tutti i synth, il che significa che questi salgono da ampiezza 0 a 1 immediatamente. Ciò conferisce ai synth un timbro percussivo. Tuttavia, potresti volere che il suono raggiunga l’ampiezza 1 più lentamente (fade in). Puoi ottenere questo risultato con l’opzione `attack:`

    play 60, attack: 2
    sleep 3
    play 65, attack: 0.5

Puoi usare opzioni multiple contemporaneamente. Per esempio, per un attacco corto e un rilascio lungo, prova così:

    play 60, attack: 0.7, release: 4

Un inviluppo con attacco corto e rilascio lungo è illustrato nel diagramma seguente:

È ovvio che puoi fare anche l’inverso. Prova un attacco lungo e un rilascio corto:

    play 60, attack: 4, release: 0.7

Infine, puoi anche impostare un tempo corto sia per l’attacco che per il rilascio, per avere suoni più brevi:

    play 60, attack: 0.5, release: 0.5

## Fase di sostegno (Sustain)

Oltre ai tempi di attacco e rilascio, puoi specificare anche un tempo di sostegno (sustain) per controllare la fase di sostegno. Essa corrisponde al tempo in cui il suono è mantenuto ad ampiezza fissa dopo l’attacco e prima del rilascio:

    play 60, attack: 0.3, sustain: 1, release: 1

Il tempo di sostegno è utile per suoni a cui vuoi dare maggior presenza nel mix prima di inserire una fase, opzionale, di rilascio. Naturalmente, è del tutto valido anche impostare sia l’attacco che il rilascio a 0 per non avere alcun tipo di dissolvenza né in entrata né in uscita. Bada però che un tempo di rilascio uguale a 0 genera dei click, ed è meglio usare valori molto piccoli come 0.2.

## Decay Phase

## Fase di decadimento (Decay)

Per un ulteriore livello di controllo, puoi specificare anche un tempo di decadimento. Si tratta di una fase dell’inviluppo che si trova tra attacco e sostegno e specifica il tempo in cui l’ampiezza cade da `attack_level:` (livello d’attacco) a `decay_level:` (livello di decadimento). Di default, l’opzione `decay:` ha valore 0 e sia il livello di attacco che il livello di sostegno sono impostati su 1, e ciò significa che dovrai impostarne il valore in modo esplicito se vuoi che il tempo di decadimento sortisca qualche effetto:

    play 60, attack: 0.1, attack_level: 1, decay: 0.2, sustain_level: 0.4, sustain: 1, release: 0.5

## Livello di decadimento

Un’altra possibilità è impostare esplicitamente i valori di `decay_level:` e `sustain_level:` (anche se di default sono uguali) per avere pieno controllo sull’inviluppo. Ciò consente di creare inviluppi nel modo seguente: ~~~~ play 60, attack: 0.1, attack_level: 1, decay: 0.2, decay_level: 0.3, sustain: 1, sustain_level: 0.4, release: 0.5 ~~~~

È possibile anche impostare un `decay_level:` più alto del `sustain_level:` ~~~~ play 60, attack: 0.1, attack_level: 0.1, decay: 0.2, decay_level: 1, sustain: 0.5, sustain_level: 0.8, release: 1.5 ~~~~

## ADSR Envelopes

Riassumendo, gli inviluppi di Sonic Pi hanno le seguenti fasi:

1. tempo di attacco per transitare da ampiezza 0 a `attack_level`,
2. tempo di decadimento per transitare da `attack_level` a `decay_level`,
3. tempo di sostegno per transitare da `decay_level` a `sustain_level`,
4. tempo di rilascio per transitare da `sustain_level` a 0

È importante sottolineare che la durata di un suono è pari alla somma dei tempi di ciascuna di queste quattro fasi. Quindi, il suono seguente avrà una durata pari a 0.5 + 1 + 2 + 0.5 beat:

    play 60, attack: 0.5, attack_level: 1, decay: 1, sustain_level: 0.4, sustain: 2, release: 0.5

E adesso datti da fare ad aggiungere gli inviluppi ai tuoi suoni…