Em uma seção anterior, nós vimos como podemos usar o comando sleep
para controlar quando o som será disparado. Entretato, ainda não fomos capazes de controlar a duração dos nossos sons.
Para nos dar um meio simples, mas ainda assim poderoso, de controlar a duração de nossos sons, o Sonic Pi fornece a noção de um envelope de amplitude ADSR (vamos explicar o que ADSR significa mais à frente nesta seção). Um envelope de amplitude oferece dois aspectos úteis de controle:
A duração é o tempo que o som permanece tocando. Uma duração mais longa significa que você ouve o som por mais tempo. Todos os sons do Sonic Pi possuem um envelope de amplitude controlável e a duração deste envelope é a duração do som. Portanto, controlando o envelope, você controla a duração.
O envelope ADSR não só controla a duração, ele também te dá controle fino sobre a amplitude do som. Todos os sons começa e terminam no silêncio e contém algumas partes não silenciosas no meio. Envelope te permitem deslizar e manter a amplitude das partes não silenciosas do som. É como dar a alguém instruções de como aumentar e diminuir o volume de um amplificador de guitarra. Por exemplo: você pode pedir para alguém para “iniciar no silêncio, aumentar o volume devagar, mantê-lo por um pouco e então voltar rapidamente para o silêncio”. O Sonic Pi te permite programar exatamente este comportamento através de envelopes.
Recapitulando, como vimos antes, uma amplitude de 0 é silêncio e uma amplitude de 1 é volume normal.
Agora, vamos ver em sequencia cada uma das partes das curvas de envelope.
A única parte do envelope que é usada por padrão é o período de Release (extinção ou relaxamento). Este é o tempo que o som do sintetizador leva para desaparecer. Todos os sintetizadores possuem um tempo de extinção de 1, que significa que, por padrão, eles duram 1 batida (que no BPM padrão de 60 é 1 segundo):
play 70
A nota será audível por 1 segundo. Vá em frente e cronometre:-) Esta é a versão curta da versão mais longa e explícita:
play 70, release: 1
Note como isso soa exatamente o mesmo (o som dura 1 segundo). Entretanto, agora é muito fácil modificar a duração modificando o valor da opção release:
:
play 60, release: 2
Podemos fazer com que o sintetizador soe por um período muito pequeno usando um valor bem pequeno para release:
:
play 60, release: 0.2
A duração deste esmaecimento do som é chamada de fase de release e por padrão é uma transição linear (isto é: uma reta). O diagrama a seguir ilustra esta transição:
A linha vertical bem a esquerda mostra que o som começa com amplitude 0, mas aumenta até a amplitude total imediatamente (esta é a fase de ataque, que cobriremos em seguida). Uma vez na amplitude total, em seguida se move em linha reta até zero, levando o tempo especificado por release:
. Fases de release mais longas produzem fade outs mais longos para o sintetizador.
Você pode, portanto, mudar a duração do seu som mudando o tempo de release. Brinque adicionando tempos de release à sua música.
Por padrão, a fase de ataque é 0 para todos os sintetizadores, o que significa que eles vão da amplitude 0 para 1 imediatamente. Isso dá aos sintetizadores um som inicial percussivo. Entretanto, você pode querer um som com início gradual. Isso pode ser atingido com a opção attack:
. Tente um início gradual (fade in) em alguns sons:
play 60, attack: 2
sleep 3
play 65, attack: 0.5
Você pode utilizar múltiplas opções ao mesmo tempo. Por exemplo, para um ataque curto e repouso longo, tente:
play 60, attack: 0.7, release: 4
Este envelopamento (ataque curto e repouso longo) é ilustrado no seguinte diagrama:
Claro que você pode inverter as coisas. Tente um ataque longo e repouso curto:
play 60, attack: 4, release: 0.7
Finalmente, você pode ter também os tempos, tanto de ataque quanto de release, curtos para obter sons mais curtos.
play 60, attack: 0.5, release: 0.5
Além de especificar os tempos de ataque e release, você também pode especificar um tempo para controlar a fase de sustain (sustentação). Este é o tempo durante o qual o som é mantido em sua amplitude total, entre as fase de ataque e release.
play 60, attack: 0.3, sustain: 1, release: 1
O tempo de sustentação é útil para quando você deseja aumentar a presença do som, antes de entrar na fase de release opcional. Claro, é completamente válido configurar as opções de attack:
e release:
com valor 0 e usar somente o sustain, ficando totalmente sem fade in ou fade out no som. Porém, fique avisado, um release igual a 0 pode produzir clicks no áudio e geralmente é preferível usar um valor pequeno, como 0.2.
Para um nível extra de controle, você também pode especificar um tempo de decaimento. Esta é a fase do envelope que se encaixa entre o ataque e o sustain e especifica um tempo para que a amplitude caia de attack_level:
atédecay_level:
(que, a não ser que você configure explicitamente, será igual ao sustain_level:
). Por padrão, a opção decay:
é 0 e ambos os níveis de ataque e de sustain são 1. Desta forma, você precisa especificá-los para que o tempo de decaimento faça algum efeito:
play 60, attack: 0.1, attack_level: 1, decay: 0.2, sustain_level: 0.4, sustain: 1, release: 0.5
Um último truque é que apesar do valor padrão da opção decay_level:
ser o mesmo valor de sustain_level:
, você pode configurá-los explicitamente com valores diferentes para ter controle total sobre o envelope. Isto te permite criar envolventes como o seguinte:
play 60, attack: 0.1, attack_level: 1, decay: 0.2, decay_level: 0.3, sustain: 1, sustain_level: 0.4, release: 0.5
Também é possível configurar decay_level:
para ser maior que o sustain_level:
:
play 60, attack: 0.1, attack_level: 0.1, decay: 0.2, decay_level: 1, sustain: 0.5, sustain_level: 0.8, release: 1.5
Para resumir, os envelopes ASDR do Sonic Pi possuem as seguintes fases:
attack_level:
attack_level:
até decay_level:
decay_level:
até sustain_level:
sustain_level:
até 0 (extinção do som)É importante notar que a duração de um som é a somatória dos tempos de cada uma destas fases. Portanto, o seguinte som terá uma duração de 0.5 + 1 + 2 + 0.5 = 4 tempos:
play 60, attack: 0.5, attack_level: 1, decay: 1, sustain_level: 0.4, sustain: 2, release: 0.5
Agora vá e se divirta adicionando curvas de envelope aos seus sons…