Duração com Envelopes

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:

Duração

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.

Amplitude

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.

Fase de Release (extinção)

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:

envelope - fase de release

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.

Fase de Ataque

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:

envelope de ataque e repouso

Claro que você pode inverter as coisas. Tente um ataque longo e repouso curto:

play 60, attack: 4, release: 0.7

envelope ataque longo repouso curto

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

envelope attack e release curtos

Fase de Sustentação

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

envelope ASR

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.

Fase de Decaimento (Decay)

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

envelope ADSR

Nível de Decaimento

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

envelope ASR

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

envelope ASR

Curvas de Envelope ADSR

Para resumir, os envelopes ASDR do Sonic Pi possuem as seguintes fases:

  1. ataque - tempo para a amplitude ir 0 até o attack_level:
  2. decaimento (decay) - tempo para a amplitude ir de attack_level: até decay_level:
  3. sustentação (sustain) - tempo para a amplitude ir de decay_level: até sustain_level:
  4. extinção (release) - tempo para a amplitude ir de 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…