Gå til indholdet

Øvelse: Granular syntese

I denne øvelse arbejder du med granulering af samples ved hjælp af UGen'en GrainBuf.

Valg og indlæsning af sample

Til brug i denne øvelse skal der indlæses et sample. Du kan bruge din egen lydfil, den skal blot:

  • Vare maksimalt 10 sekunder.
  • Være trimmet, så der ikke er stilhed i begyndelsen eller slutningen af samplet.
  • Indlæses i mono.

Som forberedelse til de øvrige opgaver herunder:

  1. Indlæs et sample i en buffer gemt under variablen ~buffer.
  2. Hvis din lydfil er i stereo, kan du indlæse den første kanal med .readChannel - se kodeblokken herunder.
  3. Hvis du ikke har en lydfil klar selv, kan du bruge den nederste linje herunder, som indlæser et indbygget sample fra SuperCollider.
Indlæsning af sample
// Udfyld her med dit eget mono-sample
~buffer = Buffer.read(s,      );

// Brug .readChannel, hvis dit sample er i stereo
~buffer = Buffer.readChannel(s, channels: [0], path:   );

// Hvis du ikke har en lydfil klar, kan du bruge et indbygget sample i stedet:
~buffer = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");

Grainvarighed, tæthed og triggerfrekvens

  1. Undersøg ved hjælp af nedenstående kodeblok og din mus/touchpad (se hvilke parametre MouseX og MouseY styrer herunder), hvordan den automatiske udregning af triggerfrekvens fungerer ved forskellige kombinationer af grainvarighed og mængden af tæthed.
Grainvarighed, tæthed og triggerfrekvens
{
    var grainDur = MouseX.kr(0.01, 0.2, \linear).poll(label: \grainDur);
    var density = MouseY.kr(0.5, 20, \exponential).poll(label: \density);
    var trigFreq = (density / grainDur).poll(label: \trigFreq);

    GrainBuf.ar(
        numChannels: 2,
        trigger: Dust.ar(trigFreq),
        dur: grainDur,
        sndbuf: ~kalimba,
        rate: 1,
        pos: LFSaw.ar(0.5, 1).unipolar,
        pan: 0
    );
}.play;

Modulation af granular syntese

Justér nedenstående kodeblok, således at:

  1. Der kommer overlap mellem de enkelte grains, dvs. relativt høj tæthed.
  2. Følgende parametre moduleres af LFO'er, fx SinOsc, XLine, EnvGen, LFNoise, LFTri etc.:
    1. dur
    2. rate
    3. pos
    4. pan
  3. Dust anvendes som trigger i stedet for Impulse.
  4. Overvej: Hvordan påvirker disse parametre og modulationer lyden? Hvilke æstetiske muligheder kan du se i denne form for sample-manipulation?
Modulation af GrainBuf-parametre
{
    GrainBuf.ar(
        numChannels: 2,
        trigger: Impulse.ar(10),
        dur: 0.025,
        sndbuf: ~buffer,
        rate: BufRateScale.kr(~buffer) * 1,
        pos: 0.5,
        pan: 0
    )
}.play;