Det er også mulig å endre samplets varighet og amplitude ved å bruke et ADSR-omslag. Men dette virker litt annerledes for ADSR-omslaget som er tilgjengelig for synter. Sampelomsalgene tillater deg bare å redusere amplituden og varigheten for et sampel - men aldri å øke dem. Samplet vil stoppe når sampler er ferdig med å spille eller omslaget er fullført - uavhengig av hvilket som kommer først. Så hvis du bruker en svært lang versjon
, vil det ikke forlenge samplets varighet.
La oss gå tilbake til vår gode venn Amen Break:
sample :loop_amen
Uten ops, hører vi hele samlet med full amplitude. Hvis vi vil fade dette ut i mer enn ett sekund, kan vi bruke ‘attack:’ param:
sample :loop_amen, attack: 1
For en kortere utfasing velger du en kortere angrepsverdi:
sample :loop_amen, attack: 0.3
ADSR-omslag avviker fra standard synt-omslag i sustain-verdien. I synth-omslaget, er varigheten (sustain) som standard satt til 0, om du ikke angir verdien manuelt. I sampler, er sustain-verdien som standard en automagisk verdi - tiden som er igjen for å spille resten av samplet. Det er derfor vi hører det hele samplet når vi ikke gir noen forhåndsinnstillinger. Hvis attac, decay-, sustain- og release-verdiene alle er 0 vil vil aldri høre et pip. Sonic Pi beregner derfor hvor langt samplet er, trekker fra eventuelle attack-, decay- and release-tider og bruker resultatet som varigheten. Hvis attac-, decay- og release verdiene tilsammen blir mer enn varigheten av samplet, blir varigheten helt enkelt satt til 0.
For å utforske dette, la oss se på vår Amen Break mer i detalj. Hvis vi spør Sonic Pi hvor langt samplet er:
print sample_duration :loop_amen
Det vil skrive ut “1.753310657596372” som er lengden på samplet i sekunder. La oss her bare avrunde det til ‘1.75’ for enkelhets skyld. Nå, hvis vi setter versjonen til ‘0,75’, vil det skje noe overraskende:
sample :loop_amen, release: 0.75
It will play the first second of the sample at full amplitude before then fading out over a period of 0.75 seconds. This is the auto sustain in action. By default, the release always works from the end of the sample. If our sample was 10.75 seconds long, it would play the first 10 seconds at full amplitude before fading out over 0.75s.
Remember: by default, release:
fades out at the end of a sample.
We can use both attack:
and release:
together with the auto sustain behaviour to fade both in and out over the duration of the 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.
We can easily get back to our normal synth ADSR behaviour by manually setting sustain:
to a value such as 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.