Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie
Hogeschool Gent - Departement Muziek en Drama
Naar vorig hoofstuk: Digitale klankbewerking: pitch shift en time-stretch
Naar Digitale Filters
Naar inhoudstafel: <Index Kursus>
1153:
Tot de eenvoudigste transformaties en bewerkingen die we kunnen uitvoeren op samples behoren wel al die technieken die op de amplitude van de signalen betrekking hebben. Het volstaat immers bij weergave de numerieke waarde van een sample op een moment t met een volumekoefficient (0 tot 1) te vermenigvuldigen.
Een volume regelaar bij weergave van samples kan bijvoorbeeld worden geimplementeerd alsvolgt:
Volume = 0.77
FOR i=1 TO 64
t= TIMER + Period
Uit DAC_adres, (Samp(i) * Volume)
DO: LOOP UNTIL TIMER>= t
NEXT i
Een 'fade-in' ziet er bvb. uit alsvolgt:
FOR Volume = 0 TO 1 STEP 1/64
FOR i=1 TO 64
t= TIMER + Period
Uit DAC_adres, (Samp(i) * Volume)
DO: LOOP UNTIL TIMER>= t
NEXT i
NEXT Volume
Een 'fade-out' wordt:
FOR Volume = 1 TO 0 STEP -1/64
FOR i=1 TO 64
t= TIMER + Period
Uit DAC_adres, (Samp(i) * Volume)
DO: LOOP UNTIL TIMER>= t
NEXT i
NEXT Volume
Het gelijktijdig afspelen van verschillende samples -het mixen- verloopt door de momentane waarden van beide samples bij weergave op te tellen en deze som te delen door het aantal te mengen samples. Deze deling is nodig omdat we anders clipping kunnen krijgen in het somsignaal. Vergeet immers nooit dat de konditie voor samples van een bepaalde resolutie n in bits erin bestaat dat hun bereik beperkt moet zijn tot het trajekt 0 tot 2^n. Dit is ten andere ook de reden waarom we in de vorige voorbeelden de volumecoefficient lieten varieren in het bereik 0 tot 1.
Een pseudo-kode voorbeeld waarbij 2 samples worden gemengd ziet eruit alsvolgt:
FOR i=1 TO 64
t= TIMER + Period
Uit DAC_adres, (Samp1(i) * Samp2(i)/2)
DO: LOOP UNTIL TIMER>= t
NEXT i
Willen we bvb. een 'cross-fade' realizeren tussen twee verschillende samples van gelijke duur, dan zouden we onze kode kunnen opzetten alsvolgt:
FOR Volume = 0 TO 1 STEP 1/64
FOR i=1 TO 64
t= TIMER + Period
Uit DAC_adres, (Samp1(i)* Volume + Samp2(i) * (1-Volume)/ 2)
DO: LOOP UNTIL TIMER>= t
NEXT i
NEXT Volume
Uiteraard kunnen we andere dan lineaire volume-karakteristieken implementeren, kunnen we samples op willekeurige momenten laten starten en stoppen...
Verdere klankkompositorisch bijzonder boeiende rezultaten kunnen bekomen worden door uitgaande van diverse samples, andere bewerkingen uit te voeren dan de eenvoudige optelling. Zo kan een digitale ringmodulator worden opgezet door de optelling in de mixer te vervangen door een onderlinge vermenigvuldiging van de individuele samplewaarden.
Naar inhoudstafel: <Index Kursus>
Naar: Digitale klankbewerking: pitch shift en time-stretch
Naar <Digitale Mixers>
Naar Digitale Filters
Naar homepage dr.Godfried-Willem Raes