Efeitos na pratica

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_fxnuma 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_fxfora da parte interior do loope 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.