Øvelse: Envelopes
I denne øvelse arbejder du med at anvende og designe dine egne envelopes og LFO'er.
Brug af indbyggede envelopes
- Tag udgangspunkt i nedenstående kildekode, og brug følgende envelopes:
- Indbyggede envelopes med standardværdier for attack, release mm.
Env.perc
Env.linen
Env.sine
Env.triangle
- Indbyggede envelopes med specifikke indstillinger
Env.perc
med attack-tid på 200 milisekunder og release-tid på 3 sekunderEnv.linen
med sustain-tid på 2 sekunderEnv.sine
med varighed på 0.1 sekund
- Indbyggede envelopes med standardværdier for attack, release mm.
- Modificér dernæst koden, således at vi også modulerer
Pulse
-oscillatorens frekvens med envelope-generatoren, skaleret med.exprange
til intervallet 55-440.
Justér kun på de markerede linjer i kodeblokken herunder.
{
var env = EnvGen.kr( , doneAction: Done.freeSelf);
var freq = 440;
Pulse.ar(freq) * env * 0.1;
}.play;
Husk, at .plot
kan være en nyttig hjælp: Env.perc(1, 3).plot
Simpel lilletrommelyd
Du skal her fremstille en simpel lilletrommelyd. De centrale lydlige egenskaber ved trommelyde varierer meget hurtigt over tid, hvilket du kan simulere ved hjælp af envelopes.
Skriv tre envelopes:
- body: En
XLine
, som bevæger sig fra 220 til 110 over 275 ms. - sweep: En
XLine
, som bevæger sig fra 8000 til 2500 over 10 ms. - vol: En
Env.perc
, hvor attack-segmentet varer 0.5 ms(!) og release-segmentet varer 150 ms.
Prøv efterfølgende at justere på parametrene i de forskellige envelopes og bemærk hvordan selv mindre ændringer påvirker det lydlige resultat.
{
var body = ;
var sweep = ;
var vol = ;
// justér ikke herunder
var resonance = VarSaw.ar(body);
var seiding = WhiteNoise.ar;
var sig = resonance + seiding;
sig = LPF.ar(sig, sweep);
sig = sig * EnvGen.ar(vol, doneAction: Done.freeSelf);
Out.ar(0, sig.dup);
}.play;
Lilletrommen dannes på følgende måde (Pejrolo & Metcalfe, 2017, pp. 121--122)1:
- Resonansen i trommens krop, dvs. dens "tone", simuleres med en trekantformet lydbølge. Vi kan således "stemme" trommen ved at justere start- og slutværdier for envelopen.
- Trommens seiding (metaltråde monteret på undersiden) simuleres med hvid støj.
- Med et dynamisk low pass filter simulerer vi trommens klanglige forandring over tid (mere højfrekvent støj i starten).
I næste kapitel gennemgås et mere elaboreret bud på dannelse af lilletrommelyd.
En unik envelope til tonehøjde
Definér din egen envelope, som overholder følgende krav:
- Envelopen skal bestå af mindst to segmenter.
- Værdierne i envelopen (linje 3 i kodeblokken herunder) skal ligge mellem 220 og 880.
- Tidsintervallerne (linje 4 i kodeblokken herunder) vælges frit (husk, at der skal være ét tidsinterval færre end antallet af trin).
Justér kun på de markerede linjer i kodeblokken herunder.
~frekvensEnvelope = Env(
[ ],
[ ],
\exp
);
// Vis envelopen grafisk
~frekvensEnvelope.plot;
// Test envelopen med lyd
{
var freq = EnvGen.kr(~frekvensEnvelope);
var vol = EnvGen.kr(
Env.sine(~frekvensEnvelope.duration),
doneAction: Done.freeSelf
);
SinOsc.ar(freq) * vol * 0.1;
}.play;
Hjemmestrikket LFO
- Modificér SynthDef'en herunder, således at LFO'en modulerer mindst to forskellige, lydlige parametre (fx tonehøjde, panorering, lydstyrke, cutoff-frekvens etc.). Husk at skalere outputtet fra LFO'en, så det passer til modulationens formål.
- Design din egen LFO ved hjælp af
Env.circle
. Tag eventuelt udgangspunkt i et tidligere præsenteret eksempel. - Skriv på egen hånd en komposition ved hjælp af
Pbind
ellerPmono
, hvor du demonstrerer mulighederne i SynthDef'en.
SynthDef(\lfo, {
arg freq = 440, pan = 0, amp = 0.1, out = 0, gate = 1;
var lfo = EnvGen.kr(
Env.circle(
[ ],
[ ],
\exp
)
);
var env = EnvGen.kr(Env.asr, gate, doneAction: Done.freeSelf);
var sig = Saw.ar(freq);
// Lavpas-filter med cutoff-frekvens to oktaver over grundtonen
sig = LPF.ar(sig, freq * 4);
sig = Pan2.ar(sig, pan, amp) * env;
Out.ar(out, sig);
}).add;
-
Pejrolo, A., & Metcalfe, S. B. (2017). Creating Sounds from Scratch: A Practical Guide to Music Synthesis for Producers and Composers. Oxford University Press. ↩