3.4 Curvas de Envelope de Amostras

# Curvas de Envelope de Amostras (ou simplesmente Envelopes de Amostras)

Também é possível modificar a *duração* e a *amplitude* de um sample usando um pacote ADSR. Entretanto, isso funciona um pouco diferente dos pacotes ADSR disponíveis em sintetizadores. Envelopes de samples permitem apenas a redução da amplitude e da duração de um sample - e nunca seu incremento. O sample irá parar de tocar quando o sample chegar ao fim ou quando o envelope se completar - O que vier primeiro. Então, se você usar um `release:`comprido, isso não irá extender a duração do sample.

## Envelopes Amen

Vamos voltar ao nosso fiel amigo Amen Break:

```
sample :loop_amen
```

Sem opts, nós ouvimos o sample com a amplitude máxima. Se quisermos fazer um fade com mais de 1 segundo, podemos usar o parâmetro `attack:`:

```
sample :loop_amen, attack: 1
```

Para um fade in mais curto, escolha um valor menor de attack:

```
sample :loop_amen, attack: 0.3
```

## Sustain Automático

Onde o envelope ADSR tem um comportamento diferente dos sintetizadores é no valor de *sustain*. Em um envelope padrão de sintetizador, o sustain tem um valor 0 por padrão, a não ser que outro valor seja definido manualmente. Com samples, o sustain é definido com um valor  *automágico* - o tempo de duração da sample. É por isso que ouvimos toda a sample quando não passamos nenhum valor. Se os valores de attack, decay, sustain e release fossem todos 0, nós não ouviríamos nem um pio. Portanto, o Sonic Pi calcula a duração da sample, deduz qualquer tempo de attack, decay e release, e usa o resultado como tempo de sustain. Se os valores de attack, decay e release somarem mais do que a duração da sample, o sustain é definido como 0.

## Fade Outs

Para explorarmos isso, vamos analisar nosso Amen Break em mais detalhes. Se perguntarmos ao Sonic Pi qual é a duração do sample:

```
print sample_duration :loop_amen
```

Irá exibir o valor `1.753310657596372`, que é a duração da sample em segundos. Vamos arredondar isso para `1.75` por conveniência. Agora, se definirmos o valor de release para `0.75`, algo surpreendente acontece:

```
sample :loop_amen, release: 0.75
```

Primeiro, ele ira tocar o primeiro segundo do sample na amplitude máxima, e depois fará um fading out por um período de 0,75 segundos. Esse é o *auto sustain* em ação. Por padrão, o release sempre trabalha com o final do sample. Se o nosso sample tiver 10,75 segundos de duração, ele ira tocar os primeiros 10 segundos na amplitude máxima antes do fading out de 0,75 segundos.

Este envelopamento (ataque curto e repouso longo) é ilustrado no seguinte diagrama:

## Fade In e Fade Out

Nós podemos usar ambos `attack:` e `release:` em conjunto com o auto sustain  para fazer o fade-in e o fade-out na duração do sample:

```
sample :loop_amen, attack: 0.75, release: 0.75
```

Como a duração completa do sample é de 1.75s e nossas fases de ataque e release somam 1.5s, o sustain é automaticamente ajustado para 0.25s. Isso nos permite fazer facilmente um fade in e out no sample.

## Sustentação (sustain) explícito

Nós podemos facilmente voltar para o comportamento normal do nosso sintetizador ASDR, configurando manualmente o `sustain:` para um valor como 0:

```
sample :loop_amen, sustain: 0, release: 0.75
```

Agora, nosso sample toca apenas durante 0.75 segundos no total. Com os valores padrão de `attack:` e `decay:` em 0, o sample pula direto para a amplitude máxima, permanece (sustain) lá por 0s e volta (release) para amplitude 0 durante o tempo de release -0.75s.

## Pratos percussivos

Nós podemos utilizar esse comportamento a nosso favor para tornar samples longos em versões mais curtas e percussivas. Considere o sample `:drum_cymbal_open`:

```
sample :drum_cymbal_open
```

Você pode ouvir os pratos soando por um período de tempo. Entretanto, nós podemos utilizar nosso envelope para fazê-lo soar mais percussivo:

```
sample :drum_cymbal_open, attack: 0.01, sustain: 0, release: 0.1
```

Você pode emular o tocar e amortecer do prato aumentanto o período de sustain:

```
sample :drum_cymbal_open, attack: 0.01, sustain: 0.3, release: 0.1
```

Agora vá e divirta-se colocando envelopes sobre os samples. Tente modificar também a taxa para resultados realmente interessantes.
