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 é 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
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.
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:
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.
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:
Copiar →↵…«»“”-–—
Claro que podes é possível trocar. Tenta um ataque longo e repouso curto:
play 60, attack: 4, release: 0.7
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
Copiar →↵…«»“”-–—
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
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
.
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
Copiar →↵…«»“”-–—
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
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
Copiar →↵…«»“”-–—
Em suma, curvas de envolvente do tipo ADSR no Sonic Pi têm as seguintes fases:
attack_level:
attack_level:
até sustain_level:
decay_level:
até sustain_level:
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…