Apesar de parecerem relativamente simples exteriormente, os efeitos são uma besta realmente complexa internamente. A sua simplicidade faz com que as pessoas os usem demasiado nas suas peças. Isto pode não ter importância se tiverem uma maquina poderosa mas se - tal como eu - usares uma Rasperry Pi para tocar, terás de ter atenção à quantidade de trabalho que pedes para fazer de forma a garantir que a batida continue a correr.
Considera este código:
loop do
with_fx :reverb do
play 60, release: 0.1
sleep 0.125
end
end
Neste código estamos a tocar a nota 60 com um muito pequeno tempo de release, é uma nota curta. Também queremos reverb assim embrulhamos num bloco de reverb. Até aqui tudo bem. Excepto…
Vamos ver o que este código faz. Primeiro temos um loop
que significa que tudo dentro dele é repetido para sempre. A seguir temos um bloco with_fx
. Isto significa que criamos um efeito de reverb cada vez que repetimos. Isto é como ter um pedal de reverb para cada vez que tocamos na corda da guitarra. É muito cool que se possa fazer isso, mas não é sempre o que quer fazer. Por exemplo, este código terá dificuldade em correr bem no Raspberry Pi. Todo o trabalho de criar o reverb e depois esperar até que tenha que ser parado e removido é tratado por with_fx
por ti, mas isso requer poder de CPU que pode ser precioso.
Como o tornamos mais similar ao setup tradicional em que o guitarrista tem apenas um pedal de reverb e todo o som passa por ele? Simples:
with_fx :reverb do
loop do
play 60, release: 0.1
sleep 0.125
end
end
Colocamos o nosso loop dentro do bloco with_fx
. Desta forma apenas criamos um simples reverb para todas as notas do nosso loop. Este código é muito mais eficiente e executa bem num Raspberry Pi.
Um compromisso é usar with_fx
numa iteração dentro do loop:
loop do
with_fx :reverb do
16.times do
play 60, release: 0.1
sleep 0.125
end
end
end
Desta forma tiramos o with_fx
fora da parte interior do loop
e criamos um novo reverb a cada 16 notas.
Este é um padrão muitos comum que o with_fx
suporta uma opção que faz exactamente isto mas sem ter de escrever o bloco 16.times
.
loop do
with_fx :reverb, reps: 16 do
play 60, release: 0.1
sleep 0.125
end
end
Tanto o exemplo reps: 16
como o 16.times do
irão se comportar de forma idêntica. O resp: 16
essencialmente repete o código no bloco do/end
16 vezes assim podes usar um ou outro conforme preferires.
Lembra-te não existem erros, apenas possibilidades. No entanto, algumas destas abordagens terão diferentes sons e características de performance diferentes. Brinca com isso e usa a abordagem que soa melhor para ti trabalhando na performance dentro dos constrangimentos da tua plataforma.