Gå til indholdet

Øvelse: Envelopes

I denne øvelse arbejder du med at anvende og designe dine egne envelopes og LFO'er.

Brug af indbyggede envelopes

  1. Tag udgangspunkt i nedenstående kildekode, og brug følgende envelopes:
    1. Indbyggede envelopes med standardværdier for attack, release mm.
      1. Env.perc
      2. Env.linen
      3. Env.sine
      4. Env.triangle
    2. Indbyggede envelopes med specifikke indstillinger
      1. Env.perc med attack-tid på 200 milisekunder og release-tid på 3 sekunder
      2. Env.linen med sustain-tid på 2 sekunder
      3. Env.sine med varighed på 0.1 sekund
  2. 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.

Øvelse med indbyggede envelopes
{
    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:

  1. body: En XLine, som bevæger sig fra 220 til 110 over 275 ms.
  2. sweep: En XLine, som bevæger sig fra 8000 til 2500 over 10 ms.
  3. 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.

Simpel lilletrommelyd
{
    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:

  1. Envelopen skal bestå af mindst to segmenter.
  2. Værdierne i envelopen (linje 3 i kodeblokken herunder) skal ligge mellem 220 og 880.
  3. 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.

Unikke envelopes
~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

  1. 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.
  2. Design din egen LFO ved hjælp af Env.circle. Tag eventuelt udgangspunkt i et tidligere præsenteret eksempel.
  3. Skriv på egen hånd en komposition ved hjælp af Pbind eller Pmono, hvor du demonstrerer mulighederne i SynthDef'en.
SynthDef med hjemmelavet LFO
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;

  1. Pejrolo, A., & Metcalfe, S. B. (2017). Creating Sounds from Scratch: A Practical Guide to Music Synthesis for Producers and Composers. Oxford University Press.