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:

Digitale Mixers

 

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