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
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.
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.
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.