SonicPi – Fare musica e creare suoni programmando con Raspberry Pi

Sonic Pi fare musica e creare suoni programmando con Raspberry Pi

Questo articolo introduttivo ha lo scopo di illustrare le funzionalità base dell’applicazione Sonic Pi, un software presente nella distribuzione Raspbian di Raspberry che permette di comporre ed eseguire musica in modo programmatico, cioè attraverso la stesura di un codice. Con una serie di esempi in cui ti verrà mostrato come eseguire semplici melodie, modificare suoni ed aggiungere effetti. Una volta terminato l’articolo comunque sarai in grado di poterti muovere all’interno del programma con familiarità, portando avanti i tuoi progetti musicali in piena autonomia.

Sonic Pi make music and create sound by programming with Raspberry Pi m

Sonic Pi

Sonic Pi non è una semplice applicazione ma un vero e proprio ambiente di programmazione totalmente open-source. La particolarità di questa applicazione è quella di poter lavorare con la musica in modo programmatico, cioè stato progettato per creare nuovi suoni e melodie utilizzando del codice di programmazione. Sonic Pi è stato sviluppato da Dr Sam Aaron un ricercatore che lavora presso l’Università di Cambridge ed è stata incorporata all’interno della distribuzione ufficiale di Raspbian, il sistema operativo per tutte le schede Raspberry Pi.

Essendo Sonic Pi già inclusa nell’immagine di Raspbian, non dovrebbe in teoria essere necessaria alcuna installazione. Comunque se così non fosse, o se vuoi provarla su un altro sistema è possibile scaricare il software di Sonic Pi dalla home page del sito ufficiale.

SonicPi.net sito per il download del programma

Sulla home page cercate in basso la sezione per il download e poi premete sul pulsante. Il download del pacchetto Debian per l’installazione partirà automaticamente. Poi una volta scaricato, scrivete i seguenti comandi

sudo dpkg -i sonic-pi_1_3.0.1-armhf.deb
sudo apt-get install -f

Primi approcci con Sonic Pi

Apriamo l’applicazione Sonic Pi cliccando sull’icona sul desktop o nel menu principale delle applicazioni.

Appena caricato il programma, vedrete apparire una finestra. L’interfaccia grafica di Sonic Pi è divisa in tre sezioni principali. La più grande a sinistra è il Programming Panel ed è quello dove è possibile inserire il codice. Poi vi è un pannello per l’output che mostra le informazioni correnti riguardo al programma che stai eseguendo. Ed infine vi è il terzo pannello che si aprirà solo premendo il pulsante help in cima alla finestra, questo pannello contiene tutta la documentazione.

SonicPi - help icon and documentation panel

Selezionate il Buffer 1 e digitate

 play 60

Poi premete sul pulsante Play.

Raspberry emetterà un suono. Eicordatevi di inserire delle cuffie o collegare Raspberry ad una cassa….altrimenti non sentirete nulla! 😉

Per potere suonare una nota si utilizza quindi il comando play. Adesso inserite una sequenza più lunga di comandi

  play 60
  play 67
  play 69

Questa volta Raspberry emetterà tre diverse note in sequenza, le note corrispondono ai numeri che abbiamo inserito. Ma le note vengono eseguite in maniera troppo rapida per essere apprezzabili singolarmente. Quindi possiamo aggiungere una pausa dopo ciascuna nota. Lo possiamo fare con il comando sleep.

  play 60
  sleep 1
  play 67
  sleep 1
  play 69

Il parametro passato dopo sleep corrisponde ai secondi di durata della pausa. Adesso che abbiamo compreso il tutto possiamo utilizzare i comandi che conosciamo per inserire una melodia…

Seleziona Buffer 2 e poi inserisci i comandi seguenti.

 play 60
 sleep 0.5
 play 62
 sleep 0.5
 play 64
 sleep 0.5
 play 60
 sleep 0.5

Ma mettiamo il caso volessimo far ripetere per due volte questa sequenza di note? Invece di scrivere nuovamente la sequenza (o copiarla ed incollarla sotto) è meglio utilizzare un loop. Questo è possibile tramite il comando times. Questo comando ha una sintassi particolare

2.times do
  play 60
  sleep 0.5
  play 62
  sleep 0.5
  play 64
  sleep 0.5
  play 60
  sleep 0.5
end

Come potete vedere, il numero delle volte che deve essere ripetuto un ciclo è riportato numericamente prima del comando separato da un punto. La parte di codice da ripetere è racchiusa tra le chiavi do ed end ed il blocco interno è indentato. Questo rende la lettura del codice più semplice.

Poter ripetere in questo modo parti di una melodia ci permette di risparmiare la scrittura di lunghe sequenze di comandi ed è quindi una forma molto comoda da utilizzare nei nostri codici. Se invece volessimo far ripetere all’infinito una sequenza si utilizza il comando loop al posto di times.

loop do
  play 60
  sleep 0.5
  play 62
  sleep 0.5
  play 64
  sleep 0.5
  play 60
  sleep 0.5
end

Le note MIDI

Abbiamo visto nei precedenti esempi che ad ogni nota corrisponde un numero. Questo numero è in realtà il numero della nota MIDI ciascuno dei quali corrisponde ad un tasto di una tastiera.

SonicPi - MIDI note numbers

Quindi vedendo la figura sopra, possiamo vedere che le note della melodia precedente erano

C D E C

o DO RE MI DO

Ma Sonic Pi non accetta solo i numeri MIDI come valori in input per il comando play. Infatti se apri un nuovo buffer come Buffer 3 e immetti i seguenti comandi

  play :c4
  sleep 0.5
  play :d4
  sleep 0.5
  play :e4
  sleep 0.5
  play :c4
  sleep 0.5

premendo play otterrai la stessa melodia precedente. Questa volta abbiamo inserito le note.

Suonare gli accordi

Ma la melodia non è fatta solo di semplici note, ma a volte è necessario suonare degli interi accordi ( composti da tre o più note ).

Per eseguire degli accordi si usa la funzione chord() che come argomenti accetta l’accordo da eseguire e la scala.

play chord(:a3, :minor)
SonicPi - chords

Modificare i suoni

Adesso che abbiamo visto come creare delle semplici melodie è giunto il momento di cambiare il suono. Il suono di default utilizzato da Sonic viene chiamato beep. Per utilizzare un diverso suono è necessario aggiungere una riga di comando all’inizio del nostro codice utilizzando il comando use_synth seguito dal nome del suono da impostare.

use_synth :fm
2.times do
  play 60
  sleep 0.5
  play 67
  sleep 0.5
end

dove fm è il nome del suono scelto.

Esistono diversi suoni inclusi all’interno di Sonic PI. Per vedere la lista dei nomi dei suoni disponibili, clicca sull’icona help nella parte alta dello schermo per aprire la documentazione. Poi seleziona Synths dalla tabella per vedere l’elenco dei suoni.

SonicPi - application for tunes and music

Utilizzare i campioni

Con Sonic Pi non solo è possibile creare delle melodie inserendo una sequenza di note, ma è possibile utilizzare anche dei campioni. I campioni (samples) sono dei suoni pre-registrati che possono essere inseriti nella musica. (Avete mai sentito parlare di musica campionata e campionatori?). In questo modo si possono ottenere effetti e suoni spettacolari!

Per poter utilizzare un campione esiste il comando sample seguito dal nome del campione da utilizzare.

Prova questi comandi.

2.times do
  sample :loop_amen
  sleep 1.753
end

Come per i suoni esistono molti campioni già inclusi all’interno di Sonic Pi. Per conoscere l’elenco dei campioni clicca sull’icona help e seleziona samples.

Suonare due melodie contemporaneamente

La musica è composta da più tracce diverse, ciascuna che segue una sua sequenza di note specifica. Vediamo quindi come sia possibile con Sonic Pi suonare due melodie contemporaneamente.

Apri un nuovo buffer, per esempio Buffer 4. Poi racchiudiamo la sequenza di note da esegure contemporaneamente all’interno dei comandi in_thread do e end.

 in_thread do
   loop do
     sample :loop_amen
     sleep 1.753
   end
 end       

Il primo thread edeguirà la melodia della musica, mentre per quanto riguarda la base, scrivi:

 in_thread do
   16.times do
     play 75
     sleep 1.753
     play 74
     sleep 0.25
   end
end

Premendo Play, sentirai le due melodie eseguite contemporaneamente.

Modificare il codice mentre Sonic Pi suona

Sonic Pi offre anche la possibilità di modificare il codice in tempo reale, vediamo con un esempio.

Apriamo un nuovo buffer, per esempio Buffer 5. Inseriamo il codice seguente

  define :play_my_synth do
    use_synth :prophet
          play 50, attack: 0.2, release: 1.3
    sleep 0.5
  end
    
  loop do
    play_my_synth
  end

Premi play per eseguire le note.

Mentre Sonic Pi è in esecuzione, commenta le ultime tre righe aggiungendo il simbolo # all’inizio di ciascuna di esse.

# loop do
  #   play_my_synth
  # end

Come potrai vedere la melodia che era messa in ciclo infinito si interromperà, tenendo conto in tempo reale delle modifiche apportate al codice.

Questo apre nuove prospettive se pensiamo al fatto che possiamo aggiungere e togliere note in tempo reale, aggiustando così la melodia mentre questa viene eseguita. Buono no?

SonicPi - sound effects

Gli effetti sonori

Tutti i sintetizzatori hanno la possibilità di modificare il suono base aggiungendo degli effetti. Anche Sonic Pi permette di aggiungere i classici effetti come il riverbero, l’eco e la distorsione.

Per aggiungere l’effetto ad un particolare sample dobbiamo utilizzare il comando with_fx seguito dal nome dell’effetto e racchiudere il campione all’interno di do ed end. Per esempio.

  with_fx :reverb do
    sample :guit_e_fifths
  end

Si possono utilizzare più effetti contemporaneamente:

  with_fx :reverb do
    with_fx :distortion do
      sample :guit_e_fifths
    end  
  end

Aggiungere dei parametri alle note

Finora abbiamo visto i comandi per eseguire melodie e controllare i suoni nella modalità base. Questo è stato fatto per semplicità e per scopi illustrativi. In realtà ogni comando accetta una serie di parametri che arricchiscono il comportamento di ciascuno di essi. Per esempio si possono aggiungere dei parametri al comando play.

 play 60, attack: 1, release: 3

Con questi parametri la modalità della nota emessa è diversa da quella standard. Esistono una ulteriore serie di parametri che si possono applicare all’esecuzione di una singola nota come cutoff:, pan:, rate: e amp:.

Consiglio comunque di andarsi a guardare la documentazione cliccando sull’icona Help.

Musica random

Negli argomenti inclusi in questo articolo, c’è anche la possibilità di eseguire musica random, cioè melodie eseguite sfruttando dei parametri casuali che rendono ogni volta diversa l’esecuzione di un comando. Questo grazie alla funzione rrand(min, max) che permette di generare numeri casuali compresi tra il valore min e max passati come argomenti della funzione. Questa funzione può essere inserita in qualsiasi parte del codice, sia per eseguire note casuali, o sia per eseguire determinate note con parametri casuali.

Provate il pezzo seguente

  loop do
    play chord(:a3, :minor).choose, attack: 0, release: 0.3, cutoff: rrand(40, 120)
    sleep 0.2
  end

Lascia un commento