Adskil tempo og tonehøjde
Én af de særligt nyttige egenskaber ved granular syntese er evnen til at adskille varighed og tonehøjde - eller mere teknisk - tids- og frekvensdomænet. Når vi normalvis skruer afspilningshastigheden for et sample op, bevæger tonehøjden sig også op. Men med granular syntese kan vi let skille disse dimensioner ad. Dette skyldes, at vi kan læse de enkelte grains med én hastighed, mens vi bevæger os igennem et sample med en anden hastighed.
Til nedenstående eksempler bruges samplet fra forrige afsnit, som er indlæst under variablen ~kalimba
.
En pointer til at styre tempo
Til at styre bevægelsen gennem en buffer kan vi genere et signal, som vi kalder en pointer. Pointerens funktion minder om en pickup-nål, som aflæser de informationer der er indprentet i en vinylplade ved at bevæge sig rundt i de dertil indrette riller. Pointeren angiver hvor i bufferen, grains skal læses fra.
Som pointer er det oplagt at bruge UGen'en Phasor
, der genererer en lineær bevægelse fra én værdi til en anden. Når vi justerer den hastighed hvormed Phasor
bevæger sig, justerer vi dermed tempoet i afspilningen.
~granulator = {
arg moveRate = 1;
var buf = ~kalimba;
var numFrames = BufFrames.kr(buf);
// Pointeren implementeres med Phasor
var pointer = Phasor.ar(
rate: moveRate,
start: 0,
end: numFrames
) / numFrames;
GrainBuf.ar(
numChannels: 2,
trigger: Dust.kr(100),
dur: 0.100,
sndbuf: buf,
rate: 1,
pos: pointer,
pan: 0
) * 0.1;
}.play;
Når vi har sat ovenstående i gang, kan vi styre tempoet med method'en .set
, fordi vi har et argument i UGen-funktionen kaldet moveRate
.
// halvt tempo
~granulator.set(\moveRate, 0.5)
// tredobbelt tempo
~granulator.set(\moveRate, 3)
// ingen bevægelse
~granulator.set(\moveRate, 0)
// baglæns
~granulator.set(\moveRate, -1)
Fleksibel tonehøjde
Modificerer vi ovenstående ved at tilføje et argument til transponering, kan vi ændre afspilningshastigheden for de enkelte grains via GrainBuf
's argument rate
og dermed ændre på tonehøjden.
~granulator = {
arg moveRate = 1, transpose = 0;
var buf = ~kalimba;
var numFrames = BufFrames.kr(buf);
// Pointeren implementeres med Phasor
var pointer = Phasor.ar(
rate: moveRate,
start: 0,
end: numFrames
) / numFrames;
GrainBuf.ar(
numChannels: 2,
trigger: Dust.kr(100),
dur: 0.1,
sndbuf: buf,
rate: transpose.midiratio,
pos: pointer,
pan: 0
) * 0.1;
}.play;
Vi kan igen justere indstillingerne, når ovenstående er sat i gang. Nu har vi foruden moveRate
adgang til argumentet transpose
.
// en kvint op
~granulator.set(\transpose, 7)
// en oktav ned
~granulator.set(\transpose, -12)
// tempo halveret to gange + en oktav op
~granulator.set(\moveRate, 0.25, \transpose, 12)
Bortset fra, at vi her kan høre tonehøjde og tempo som to helt adskilte parametre, er det interessant at høre en lille detalje ved kildematerialet: På en kalimba skabes lyden af metalstænger i forskellige længder, såkaldte lameller, der sættes i svingninger. Med et udtryk fra organologien (læren om musikinstrumenters karakteristika og historie) kan vi kalde et sådant instrument for en idiofon (Brown & Palmer, 2001)1. Man spiller på lamellerne med fingrene, og idet man rør ved den genstand som vibrerer og skaber lyden, skaber man helt kort en smule støj på grund af den friktion mellem fingeren og lamellen, som sætter lamellen i svingninger. I kvart tempo og oktaveret tonehøjde i slutningen af ovenstående lydeksempel bliver de støjfulde anslag pludselig ganske tydelige. Dette er en af de interessante egenskaber ved granular syntese: Teknikken tillader os fx at zoome helt ind på detaljer, som ellers ikke fremstår så tydeligt.
-
Brown, H. M., & Palmer, F. (2001). Idiophone. In Grove Music Online. https://www.oxfordmusiconline.com/grovemusic/display/10.1093/gmo/9781561592630.001.0001/omo-9781561592630-e-0000050024 ↩