Gå til indholdet

Øvelse: SynthDefs

SynthDef-skrivning er måske et lidt tørt, teknisk emne. Men med lidt øvelse er det nøglen til at åbne de mange fantastiske variationsmuligheder, som interfacet mellem SynthDef og Pbind lægger op til. Du må i denne øvelse gerne skele til cheat sheet'et om SynthDefs og andre relevante afsnit, men du skal i denne øvelse skrive SynthDef-kildekoden selv. Det får du nemlig mest ud af.

Min første SynthDef

  1. Skriv en SynthDef, som overholder følgende krav:
    1. SynthDef'ens navn skal være \hello.
    2. Som lydkilde skal SynthDef'en indeholde en oscillator efter eget valg.
    3. Oscillatorens frekvens kan styres med et SynthDef-argument kaldet freq, defaultværdi 440.
    4. Oscillatorens lydstyrke over tid styres af en envelope kaldet Env.linen.
  2. Test, at freq-argumentet i din SynthDef fungerer.
    1. Brug en kommando som Synth(\hello, [\freq, 1000]);, hvor du ændrer på frekvensen.
  3. Justér SynthDef'en, så der kan ændres på lydstyrken.
    1. Indfør et nyt SynthDef-argument kaldet amp med defaultværdi 0.1.
    2. Sørg for, at amplituden for lydsignalet bliver ganget med amp, før det sendes ud med Out.
  4. Test din SynthDef med nedenstående Pbind.
Test af SynthDef
Pbind(
    \instrument, \hello,
    \degree, Pwhite(0, 7),
    \octave, Pwhite(3, 6),
    \dur, 0.25,
).play;

En SynthDef med firkantede bølgeformer

  1. Skriv en SynthDef, som overholder følgende krav:
    1. SynthDef'ens navn skal være \firkant.
    2. Lydkilden er en Pulse-UGen hvis frekvens kan styres med et SynthDef-argument kaldet freq, defaultværdi 220.
    3. Lydstyrken kan styres med et SynthDef-argument kaldet amp, defaultværdi 0.1.
    4. Lydstyrken moduleres af en slagtøjsagtig envelope (Env.perc), hvor attack og release kan styres med SynthDef-argumenter attack og release.
    5. Bredden af firkanten i Pulse-oscillatoren (2. argument til Pulse.ar) kan styres med et SynthDef-argument kaldet width.
  2. Test din SynthDef med nedenstående Pbind. Den bør give et resultat, der minder om lydeksemplet herunder.
Test af SynthDef
TempoClock.tempo = 130 / 60;
Pbind(
    \instrument, \firkant,
    \degree, [0, 2, 4, 6],
    \scale, Scale.minor,
    \octave, 4,
    \mtranspose, Pwhite(-2, 2).stutter(Phprand(2, 20).asStream),
    \db, Pseries(-25, Pwhite(3, 4).asStream, 4).repeat,
    \attack, 0.001,
    \release, Pgeom(0.1, 1.03, 100),
    \dur, Pwrand([1/8, 1/4, Rest(1/8)], [0.8, 0.15, 0.05], inf) * 4,
    \strum, Pexprand(0.0001, 0.01),
    \width, Pseries(0.2, 0.005, 100)
).play;

SynthDef med vedvarende envelope

  1. Justér nedenstående SynthDef, så den anvender en vedvarende envelope i stedet for en selv-afsluttende envelope. OBS: Dette kræver, at du tilføjer et gate-argument til EnvGen.
  2. Skriv en Pmono-baseret komposition, hvor du varierer \degree, \lfoFreq og \lfoDepth ved hjælp af patterns, fx tilfældighedsgeneratorer. Der findes en kodeblok herunder, som du kan tage udgangspunkt i.

Justér kun på de markerede linjer i kodeblokkene herunder.

SynthDef med glissando
SynthDef(\gliss, {
    arg freq = 440, pan = 0, amp = 0.1, out = 0,
    lfoFreq = 1, lfoDepth = 0.025;

    var env = EnvGen.kr(Env.perc, doneAction: Done.freeSelf);

    var sig = Pulse.ar(
        freq.lag(0.01) *
        LFTri.kr(lfoFreq).bipolar(lfoDepth).midiratio
    );

    sig = Pan2.ar(sig, pan, amp) * env;

    Out.ar(out, sig);
}).add;

Afsæt for komposition med Pmono ses herunder.

Glidende komposition med Pmono
Pmono(\gliss,
    \degree,    ,
    \lfoFreq,    ,
    \lfoDepth,    ,
    \dur, 0.4,
).play;