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.
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
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.
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:
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
As the full duration of the sample is 1.75s and our attack and release phases add up to 1.5s, the sustain is automatically set to 0.25s. This allows us to easily fade the sample in and out.
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
Now, our sample only plays for 0.75 seconds in total. With the default for attack:
and decay:
at 0, the sample jumps straight to full amplitude, sustains there for 0s then releases back down to 0 amplitude over the release period - 0.75s.
We can use this behaviour to good effect to turn longer sounding samples into shorter, more percussive versions. Consider the sample :drum_cymbal_open
:
sample :drum_cymbal_open
You can hear the cymbal sound ringing out over a period of time. However, we can use our envelope to make it more percussive:
sample :drum_cymbal_open, attack: 0.01, sustain: 0, release: 0.1
You can then emulate hitting the cymbal and then dampening it by increasing the sustain period:
sample :drum_cymbal_open, attack: 0.01, sustain: 0.3, release: 0.1
Now go and have fun putting envelopes over the samples. Try changing the rate too for really interesting results.