Pomimo, że na pierwszy rzut oka wyglądają one na zwodniczo łatwe, to od środka efekty są tak naprawde bardzo złożonymi bestiami. Ich prostota bardzo często kusi ludzi by naduzywać ich w swoich kawałkach. Może to być w porządku jeśli masz dobry i wydajny komputer, ale jeśli - tak jak ja - korzystasz z Raspberry Pi do jam’owania, musisz być wtedy bardzo ostrożny z tym ile pracy mu zlecisz do wykonania, jeśli chcesz być pewny, że beat zachowa swą płynność.
Rozważ taki kawałek kodu:
loop do
with_fx :reverb do
play 60, release: 0.1
sleep 0.125
end
end
W powyższym kawałku kodu zagraliśmy nutę 60 z bardzo krótkim czasem zanikania (release), więc jest to bardzo krótka nuta. Chemy również nałożyć na nią efekt reverb, więc opakowaliśmy ją w blok reverb. Jak na razie wszystko w porządku. Z wyjątkiem…
Przyjrzyjmy się co ten kod tak naprawdę robi. Na początku mamy
pętlę loop
co oznacza, że wszystko wewnątrz niej będzie powtarzane
w nieskończoność. Następnie mamy blok with_fx
. Oznacza to, że utworzymy
nowych efekt FX dla każdej iteracji pętli loop
. To tak jakbyśmy
chcieli mieć odzielny efekt gitarowowy reverb przy każdym jednym uderzeniu
w strunę gitary. Fajnie, że możemy tak zrobić, ale nie zawsze jest to
coś co chciałbyś osiągnąć. Na przykład, ten kawałek kodu czeka niezła
walka aby został on ładnie uruchomiony na Raspberry Pi. Cała praca
potrzebna do stworzenia efektu reverb a potem czekanie do momentu,
w którym będzie wymagał zatrzymania i usunięcia jest obsługiwana
za Ciebie przez funkcję with_fx
, zajmie to jednak sporo mocy
procesora (CPU), która może okazać się bardzo cenna.
A co jeśli sprawimy, by ten kod był bardziej podobny do tradycyjnego zestawu, gdzie nasz gitarzysta posiada tylko jeden efekt reverb i to przez niego przechodzą wszystkie dźwięki? Łatwizna:
with_fx :reverb do
loop do
play 60, release: 0.1
sleep 0.125
end
end
Umieściliśmy naszą pętęlę wewnątrz bloku with_fx
. W ten sposób
tworzymy tylko jeden efekt reverb dla wszystkich nut, które zostaną
zagrane w naszej pętli. Taki kod jest dużo bardziej wydajny i na pewno
będzie działał w porządku na Raspberry Pi.
Kompromisem może też być użycie efektu with_fx
wewnątrz pętli loop,
ale powyżej iteracji wewnętrznej:
loop do
with_fx :reverb do
16.times do
play 60, release: 0.1
sleep 0.125
end
end
end
W ten sposób przenieśliśmy efekt with_fx
na zewnątrz wewnętrznej części
pętli loop
i teraz tworzymy nowy efekt reverb tylko co 16 zagranych
nut.
Pamiętaj jedno - błędów nie ma, sa tylko nowe możliwości. Jednakże, każdy z powyższych podejść będzie miał inne brzmienie oraz inną charakterystykę wydajności. Staraj się więc używać takiego podejścia, które będzie brzmiało najlepiej mając jednocześnie na uwadze fakt pracy z ograniczeniami wydajnościowymi twojego komputera/platformy na której pracujesz.