Até agora passamos imenso tempo a olhar para diferentes sons que podemos fazer com blocos play
e sample
. Também aprendemos como lançar esses sons no tempo usando sleep
.
Como provavelmente descobriste, existe muito divertimento que se tem com estes blocos básicos de construção. No entanto, uma dimensão totalmente nova de divertimento abre-se quando começares a usar o poder do código para estruturar a tua musica e composições. Nas próximas secções iremos explorar essas novas poderosas ferramentas. Primeiro iteração e loops.
Escreveste algum código e gostarias de o repetir algumas vezes? Por exemplo, podes ter algo como isto:
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
Se quiseres repetir isto 3 vezes? O que podemos fazer é copiar e colar três vezes:
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
Isso é muito código! O que acontece se quiseres mudar o sample para :elec_plip
? Terás de encontrar todos os locais onde aparece o :elec_blup
original e os mudar. Mais importante, como repetir o código original 50 ou 1000 vezes? Isso é muito código, e muitas linhas de código para alterar se quiseres fazer uma mudança.
De facto, alterar o código deverá ser fácil como dizer faz isto 3 vezes. Na verdade é isso. Lembraste do nosso velho amigo bloco de código? Podemos o usar para marcar o inicio e o fim do código que queremos repetir 3 vezes. Usamos então o código especial 3.times
. Assim, em vez de escrever faz isto 3 vezes, escrevemos 3.time do
- não é difícil. Não te podes esquecer de escrever end
no final do código que queres repetir:
3.times do
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
end
Isto assim é bem mais limpo que cortar e colar. Podemos usar isto para criar elegantes estruturas repetitivas:
4.times do
play 50
sleep 0.5
end
8.times do
play 55, release: 0.2
sleep 0.25
end
4.times do
play 50
sleep 0.5
end
Podemos colocar iterações dentro de iterações e produzir padrões interessantes. Por exemplo:
4.times do
sample :drum_heavy_kick
2.times do
sample :elec_blip2, rate: 2
sleep 0.25
end
sample :elec_snare
4.times do
sample :drum_tom_mid_soft
sleep 0.125
end
end
Se quiseres que algo repita muitas vezes, poderás dar por ti a usar números grandes como 1000.times do
. Neste caso é provavelmente melhor pedir ao Sonic Pi para repetir para sempre (pelo menos até premires o botão stop). Vamos repetir o amen break para sempre:
loop do
sample :loop_amen
sleep sample_duration :loop_amen
end
a coisa importante a saber sobre loops é que eles actuam como buracos negros para o código. Uma vez que o código entra em loop nunca sairá até premires stop - irá repetir para sempre. Isso significa que se tiveres código após o loop nunca o irás ouvir. Por exemplo, o címbalo depois deste loop nunca será tocado:
loop do
play 50
sleep 1
end
sample :drum_cymbal_open
Agora podes estruturar o teu código com iterações e loops!