# 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.