Anche se dall’esterno possono sembrare semplici, gli effetti sono, in realtà, molto complessi al loro interno. Data la loro semplicità di utilizzo, spesso le persone ne abusano. Questo potrebbe non essere un problema se hai una macchina potente ma se, come me, usi un Rasberry Pi, devi fare attenzione a quante risorse chiedi alla macchina se vuoi essere sicuro che non ci siano interruzioni.
Guarda questo esempio:
loop do
with_fx :reverb do
play 60, release: 0.1
sleep 0.125
end
end
Con questo codice suoniamo la nota 60 con un tempo di rilascio molto breve. Siccome vogliamo del riverbero, abbiamo aggiunto un blocco di codice. Fin qui tutto bene, anche se…
Proviamo a vedere cosa fa esattamente il codice. Per prima cosa abbiamo un loop
che significa che tutto quello che c’è al suo interno viene ripetuto all’infinito. Poi abbiamo un blocco with_fx
. Questo significa che verrà creato un nuovo riverbero ogni ripetizione del loop. È come, sulla chitarra, avere un pedale del riverbero diverso per ogni corda. È figo poterlo fare ma non sempre è quello che vogliamo. Per esempio questo codice fa fatica a girare su un Raspberry Pi. La creazione del riverbero, l’utilizzo e il suo spegnimento sono gestiti da with_fx
e questo potrebbe consumare preziosa potenza di calcolo.
Come possiamo fare per rendere il setup simile a quello dei chitarristi che hanno un pedale di riverbero dentro cui passa tutto il segnale? Molto semplice:
with_fx :reverb do
loop do
play 60, release: 0.1
sleep 0.125
end
end
Dobbiamo spostare il loop dentro il blocco with_fx
. In questo modo creiamo un solo riverbero per tutte le note suonate nel nostro loop. Questo codice è molto più efficiente e funziona a meraviglia su un Rasberry Pi.
Un compromesso potrebbe essere usare with_fx
in un’iterazione dentro a un loop:
loop do
with_fx :reverb do
16.times do
play 60, release: 0.1
sleep 0.125
end
end
end
In questo modo abbiamo tolto with_fx
dalla parte interna del loop
e creiamo un riverbero ogni 16 note.
Questo è un modo di fare talmente comune che with_fx
lo supporta come opzione senza la necessità di scrivere un blocco di ripetizione 16.times
:
loop do
with_fx :reverb, reps: 16 do
play 60, release: 0.1
sleep 0.125
end
end
I blocchi di codice con reps: 16
e 16.times do
funzionano allo stesso modo. Quello con reps: 16
in pratica ripete il codice nel blocco do/end
16 volte per cui puoi usare entrambi i sistemi in modo intercambiabile scegliendo quello che preferisci.
Ricorda: non ci sono errori, solo possibilità. Tuttavia alcuni di questi approcci genereranno suoni e performance differenti. Fai un po’ di prove e trova l’approccio che, secondo te, suona meglio tenendo sempre in considerazione la questione delle performance della tua piattaforma.