Duração com Envolventes

Numa secção anterior vimos como podemos usar o comando sleep para controlar quando tocar os nossos sons. Mas ainda não sabemos como controlar a duração dos nossos sons.

Para termos um meio simples, mas eficaz, de controlar a duração dos nossos sons, o Sonic Pi possibilita o control de uma curva de envolvente do tipo ADSR (vamos falar sobre o que ADSR significa mais à frente nesta secção). Uma curva de envolvente de amplitude oferece dois aspectos úteis de controlo:

Duração

Duração é o tempo que durante o qual conseguimos ouvir o som. Uma duração mais longa faz com que ouçamos o som durante mais tempo. Todos os sons no Sonic Pi têm uma envolvente de amplitude controlável, e a duração total dessa envolvente é a duração do som. Portanto, controlando a envolvente, controlas não só a sua duração, como a curva de forma de onde do som

Amplitude

Além de controlar a duração, a envolvente ADSR também oferece um controlo excelente sobre a amplitude do som. Todos os sons audíveis começam e acabam com silêncio e contêm uma parte não silenciosa no meio. Os envolventes permitem deslizar e manter a amplitude das partes não silenciosas do som. É como dar instruções de como aumentar e diminuir o volume de um amplificador de guitarra. Por exemplo, podes pedir a alguém para “começar com silêncio, aumentar o volume lentamente até ao máximo, manter durante um bocado e depois diminuir rapidamente até silêncio”. O Sonic Pi permite programar este comportamento com curvas de envolvente.

Para recapitular, como vimos antes, uma amplitude de 0 é silêncio e uma amplitude de 1 é volume normal.

Agora, vamos ver cada uma das partes das curvas de envolvente.

fase de extinção

A única parte a envolvente que é usada por defeito é o tempo de extinsão do som (ou relaxamento). Isto é o tempo que o som de um sintetizador leva até desaparecer completamente. Todos os synths têm, por defeito, um tempo de extinsão de 1, o que significa que duram uma batida (que é 1 segundo, para BPM de 60):

play 70

Esta nota vai-se ouvir durante 1 segundo. Segue em frente e contabiliza a duração :-) Isto é a versão curta para a versão mais longa e explicita:

play 70, release: 1

Nota como soam exactamente iguais (o som dura 1 segundo). No entanto, agora é muito fácil alterar a duração mudando o valor da opt release::

play 60, release: 2

Podemos fazer com que o som dure muito pouco tempo usando um valor mais baixo para release::

play 60, release: 0.2

A duração do repouso do som chama-se fase de extinsão (ou repouso) e por defeito é uma transição linear (isto é, uma linha recta). O diagrama seguinte ilustra esta transição:

curva de envolvente da fase de extinção do som Copiar →↵…«»“”-–—

A linha vertical à esquerda do diagrama mostra que o som começa com amplitude 0, mas vai até a um nível de amplitude máximo imediatamente (isto é a fase de ataque, tal como vamos analisar de seguir). Tendo em conta a amplitude máxima, esta volta a baixar numa linha recta até 0, levando o tempo especificado pela opt release:. Tempos de repouso mais longos produzem fade outs mais longos.

Podes então mudar a duração do teu som ao mudar o tempo de repouso. Experimenta mudar os tempos de repouso da tua música.

Fase de Ataque

Por defeito, a fase de ataque é 0 para todos os synths, o que significa que a amplitude sobe de 0 para 1 imediatamente. Isto resulta num som inicialmente mais percursivo. No entanto, podes querer que o teu som tenha um fade in. Isto pode ser feito com a opt attack:. Experimenta usar fade in em alguns sons:

play 60, attack: 2
sleep 3
play 65, attack: 0.5

Pode querer usar váras opts ao mesmo tempo. Por exemplo, para um ataque curto e repouso longo, experimenta:

play 60, attack: 0.7, release: 4

Esta ataque curto e repouso longo está ilustrado no diagrama seguinte:

envolvente de ataque e extinção de um som Copiar →↵…«»“”-–—

Claro que podes é possível trocar. Tenta um ataque longo e repouso curto:

play 60, attack: 4, release: 0.7

Envolvente de Ataque Longo, com Tempo de Extenção Curto Copiar →↵…«»“”-–—

Finalmente, também é possível tirar proveito tanto um tempo de ataque como de extinção curtos para sons curtos.

play 60, attack: 0.5, release: 0.5

Envolvente de attune e extinção curtos Copiar →↵…«»“”-–—

Fase de Sustentação

Além de especificar os tempos de ataque e repouso, também podes mudar o tempo de sustentação para controlar a fase de sustentação. Isto é o tempo a que a amplitude se vai manter no máximo, entre as fases de ataque e repouso.

play 60, attack: 0.3, sustain: 1, release: 1

envolvente  deASR Copiar →↵…«»“”-–—

O tempo de sustentação é útil quando se pretende criar sons com mais presença na mistura, antes de entrar na fase de decaimento e extinção. Claro, é válido dar o valor de 0 às opts attack: e release: e usar só a sustentação para o som não ter nenhum fade in ou fade out. No entanto, deixamos o aviso, um tempo de repouso de 0 pode produzir clicks no som sendo melhor usar um valor muito baixo como 0.2.

Fase de Decaimento

Para um nível extra de controlo, também é possível especificar um tempo de decaimento. Esta é a fase do envelope que fica entre as fases de ataque e sustentação e especifica o tempo em que a amplitude vai baixar do attack_level: para o decay_level: (que, a não ser que o mudes explicitamente, vai ser o mesmo que o sustain_level:). Por defeito, a opt decay: é 0 e tanto o ataque (attack_leve:) como a sustentação (sustain_level:) são 1, portanto precisas de especificá-los para o tempo de decaimento fazer efeito:

play 60, attack: 0.1, attack_level: 1, decay: 0.2, sustain_level: 0.4, sustain: 1, release: 0.5

envolvente de ADSR Copiar →↵…«»“”-–—

Nível de Decaimento

Um último truque é que apesar da opt decay_level:, por defeito, ser igual ao sustain_level: podes dar-lhes valores diferentes para controlo total sobre o envelope. Isto permite-lhe criar envolventes como a 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

envolvente de ASR Copiar →↵…«»“”-–—

Também é possível contar um decay_level:, com um valor superior ao do 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

curva de envolvente envolvente ASR Copiar →↵…«»“”-–—

Curvas de Envolvente ADSR

Em suma, curvas de envolvente do tipo ADSR no Sonic Pi têm as seguintes fases:

  1. ataque - tempo de amplitude 0 até ao attack_level:
  2. decaimento - tempo para mudar a amplitude de attack_level: até sustain_level:
  3. sustentação - tempo para mudar a amplitude de decay_level: até sustain_level:
  4. extinção - tempo para mudar a amplitude de sustain_leve: até 0

É importante notar que a duração de um som é a soma dos tempos de cada uma das fases. Portanto, o seguinte som vai durar 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 vamos experimentar usar curvos de envolventes com os teus sons…