6.2 Efectele in viata reala

# Efectele in viata reala

Desi par simple vazute din afara, efectele sunt niste unelte foarte complexe la interior. Simplitatea lor determina adesea utilizatorii sa exagereze cu folosirea lor in piese. Asta nu e o mare problema daca ai o masina puternica, dar daca folosesti ca mine un Raspberry Pi pentru improvizatii pe scena, trebuie sa ai grija cat de multe ii ceri daca vrei sa fii sigur ca poate tine pasul.

Sa ne uitam la codul de mai jos:

```
loop do
  with_fx :reverb do
    play 60, release: 0.1
    sleep 0.125
  end
end
```

Aici redam nota 60 cu un release foarte scurt, deci este o nota scurta. Vrem sa aiba reverberatie, deci am inclus-o intr-un bloc reverb. Toate bune pana aici. Numai ca...

Sa privim ce face codul. Mai intai avem o bucla ('loop'), ceea ce inseamna ca tot ce se afla in interiorul ei este repetat la nesfarsit. Apoi avem un bloc 'with_fx'. Asta inseamna ca vom crea un nou efect reverb *de fiecare data cand bucla se reia*. E ca si cand ai avea o pedala de efecte separata pentru fiecare ciupire a corzii unei chitare. E tare ca poti face asta, dar nu e ce-ti doresti intotdeauna. De exemplu, acest cod va fi redat cu dificultate de un Raspberry Pi. Toata munca de crearea a efectului reverb si apoi asteptarea pana cand trebuie oprit si anulat este gestionata de 'with_fx' pentru tine, dar consuma din timpul pretios al procesorului.

Cum putem face sa se comporte similar cu o configuratie uzuala in care chitaristul are *o singura* pedala pentru reverb care controleaza toate sunetele? Simplu:

```
with_fx :reverb do
  loop do
    play 60, release: 0.1
    sleep 0.125
  end
end
```

Punem bucla *in interiorul* blocului 'with_fx'. In felul asta cream un singur reverb pentru toate notele redate in bucla. Acest cod este mult mai eficient si va functiona fara probleme pe un Raspberry Pi.

O solutie de compromis este sa folosim 'with_fx' cu un bloc de iteratii in cadrul unei bucle:

```
loop do
  with_fx :reverb do
    16.times do
      play 60, release: 0.1
      sleep 0.125
    end
  end
end
```

In felul asta am ridicat cu un nivel 'with_fx' din interiorul buclei si cream un reverb nou la fiecare 16 note.

Este un lucru atat de des intalnit, incat 'with_fx' ofera suport pentru un parametru care face exact asta, fara a fi nevoie sa scrii blocul '16.times':

```
loop do
  with_fx :reverb, reps: 16 do
    play 60, release: 0.1
    sleep 0.125
  end
end
```

Ambele exemple, cel cu `reps: 16` si cel cu `16.times do`, se comporta la fel. In mare, `reps: 16`codul din blocul do/end de 16 ori, deci poti folosi oricare dintre cele doua forme in functie de preferintele personale.

Cum spuneam, nu exista greseli, ci doar posibilitati. Totusi, unele dintre abodari pot crea sunete diferite si pot avea un impact diferit asupra performantelor. Deci te poti juca incercand sa gasesti metoda care suna cel mai bine pentru tine, tinand cont in acelasi timp de constrangerile legate de performantele sistemului.
