Gå til indholdet

Lydcollage

En lydcollage bestående af samples, sammensat på kryds og tværs uden skelen til gængse konventioner for rytmik, kan være en interessant, abstrakt kompositionstilgang. Ved at fremstille en fleksibel SynthDef til sample-afspilning og anvende den til komposition med patterns, kan vi skabe interessante lydcollager, teksturer og klangflader.

Forberedelse

Som forberedelse skal vi indrette en passende SynthDef samt udvælge og indlæse samplemateriale.

SynthDef til samplebaseret lydcollage

Når vi skal skabe en lydcollage, er det nyttigt at indrette vores SynthDef, så at den passer til de teknikker, vi vil bruge i vores collage-komposition. Herunder findes en SynthDef, som minder om de SynthDefs, vi tidligere har udviklet til sampleafspilning. Men den skiller sig alligevel ud på en række egenskaber, fordi den er særligt indrettet til lydcollage:

  • Det er en central del af lydcollage-teknikken at kunne styre, hvor mange samtidigt klingende samples, der afspilles. Med andre ord bør vi kunne styre, hvor mængden af overlap, hvilket vi som tidligere nævnt kan gøre med Pbind-nøglen \legato. Det kræver imidlertid, at vi er nødt til at indrette vores SynthDef således, at afspilningen indhegnes af en vedvarende envelope. Afspilningens varighed styres dermed af en envelope (frem for samplets egen varighed). Som udgangspunkt indstiller vi derfor PlayBuf til at loope samplet, så det klinger i hele envelopens tidsrum.
  • Vi indfører også et SynthDef-argument kaldet startPos, der angiver en position mellem 0 og 1, som angiver hvor i bufferen, læsningen af et sample skal starte. Dette betyder, at vi kan starte et vilkårligt stykke inde i et
  • I stedet for at styre afspilningshastigheden direkte, er det mere relevant at kunne transponere et antal halvtoner op eller ned. Derfor bruger SynthDef'en .midiratio på argumentet transpose til dette formål. Når vi angiver en transponeringsafstand frem for afspilningshastighed, mister vi evnen til at afspille samplet baglæns (idet transponering blot går ud på at skalere afspilningshastigheden op eller ned).
  • For at kunne afspille baglæns, opretter vi et andet argument, direction, hvor vi i SynthDef'en ved hjælp af method'en .sign registrerer, om der er tale om et negativt eller et positivt tal. Negative tal fører til baglæns afspilning, positive tal giver forlæns afspilning, og tallets størrelse gør ingen forskel.
SynthDef til sampleafspilning
SynthDef(\collage, {
    arg amp = 0.1, out = 0, pan = 0,
    transpose = 0, startPos = 0, direction = 1,
    buf, loop = 1, t_reset = 1,
    drive = 0, cutoff = 20000, rq = 1,
    atk = 0.005, sus = 1, rel = 0.2, gate = 1;
    var env = EnvGen.kr(Env.asr(atk, sus, rel), gate, doneAction: 2);
    var sig = PlayBuf.ar(
        numChannels: 1,
        bufnum: buf,
        rate: transpose.midiratio * BufRateScale.kr(buf) * direction.sign,
        trigger: t_reset,
        startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buf) - 2),
        loop: loop
    );
    sig = (sig * drive.linexp(0, 1, 1, 100)).tanh; // drive/distortion
    sig = RLPF.ar(sig, cutoff, rq) * env;
    sig = Pan2.ar(sig, pan, amp);
    Out.ar(out, sig);
}).add;

Bemærk, at ovenstående SynthDef er beregnet til mono-samples. Hvis du i stedet ønsker at bruge samples, som er i stereoformat, har du to valgmuligheder:

  1. Tilpas SynthDef'en, så PlayBuf læser 2 kanaler i stedet for 1, og der anvendes Balance2 i stedet for Pan2 til panorering (se hertil den relevante dokumentation).
  2. Indlæs kun én af de to kanaler, når du indlæser dine samples.

Samplemateriale

Til vores lydcollage skal vi naturligvis bruge ét eller flere samples. For enkelhedens skyld nøjes vi her med ét sample, og jeg har valgt samplet Emin 9 guitar chord interup.wav1 af freesound.org-brugeren 'Sub-d' (2008)2. Samplet indeholder lyden af en akkordbrydning på en elguitar samt til sidst en telefon, der ringer.

Det valgte sample indeholder en stabil, tonal sekvens, klinger kontinuerligt uden lange pauser, og varer flere sekunder. Dette gør samplet relevant til æstetikken i en lydcollage, hvor vi kan lægge lag på lag.

Indlæsning af det udvalgte beat
~guitar = Buffer.read(s, "C:/lydfiler/guitar.wav");
~guitar.play;

Collage med patterns

Der findes selvsagt mange forskellige muligheder for at fremstille en lydcollage med samples og patterns. Herunder udforsker vi to: Et udtryk, hvor lange, udstrakte udsnit af samplet væver sig ind og ud af hinanden, samt et udtryk, hvor kortere udklip støder sammen i et mere kaotisk collageunivers.

En kontinuerlig strøm af lyd

Undersøg selv effekten af de forskellige patterns herunder. Bemærk, at det samlede antal sampleafspilninger afhænger af den sekvensen, som defineres under \drive-nøglen.

Lydcollage med patterns
TempoClock.tempo = 60/60;
Pbind(
    \instrument, \collage,

    // PlayBuf-indstillinger
    \buf, ~guitar,
    \transpose, Prand([12, 7, 0, -12], inf).clump(3),
    \direction, -1,
    \startPos, Pbrown(0.0, 1.0, 0.2),
    \loop, 1,

    // Rytmik/timing
    \strum, 0.25,
    \dur, Pwhite(1.0, 3.0),
    \legato, Pexprand(2.5, 3.5),

    // Klang
    \cutoff, Pexprand(500, 3000),
    \drive, Pseq(Array.interpolation(10, 0.1, 0.8).mirror),

    // Panorering, envelope, amplitude
    \pan, Pgauss(0, 0.4),
    \atk, 2, \rel, 3,
    \db, -30,
).play;

Tiltagende kaotisk collage

Hvis vi vil gå efter et mere abrupt udtryk, kan vi reducere mængden af overlap med \legato-nøglen. Genne Pbind giver desuden en klar, gradvis udvikling qua de mange indlejrede Pseries og Pgeom. Undersøg selv kildekoden med .trace-method'en, hvis du er usikker på, hvordan de forskellige patterns bidrager til kompositionen.

Tiltagende kaotisk lydcollage
TempoClock.tempo = 120 / 60;
Pbind(
    \instrument, \collage,

    \buf, ~guitar,
    \transpose, Pxrand([12, 24, 0, 7, -5, -12], inf) + Pgauss(0, Pseries(0, 0.020)).round,
    \direction, Prand([1, -1], inf),
    \startPos, Pgauss(0.4, 0.1),
    \loop, 1,

    \dur, Pgeom(1, 0.983),
    \lag, Pgauss(0, 0.01),
    \legato, Pgeom(1, 0.99),
    \atk, 0.002, \rel, 0.010,

    \cutoff, Pexprand(500, 3000),
    \rq, Pexprand(0.1, 0.5),
    \drive, Pexprand(0.01, 0.2) + Pseries(0, 0.003),

    \pan, Pgauss(0, Pseries(0, 0.005).asStream),
    \db, Pseries(-20, 0.1, 150),
).play;


  1. Emin 9 guitar chord interup.wav er udgivet til det offentlige domæne under Creative Commons-licensen CC0 1.0 og kan findes via platformen freesound

  2. Sub-d. (2008). Emin 9 guitar chord interup.wav. In Freesound. https://freesound.org/people/Sub-d/sounds/46992/