;------------------------------------------------------------------------- ; ; Drift Dhikr II (or, Heraclitus Takes It to the Bridge) ; by Dave Seidel (dave at mysterybear dot net) ; see http://mysterybear.net ; ; Copyright 2006, Dave Seidel. Some rights reserved. ; This work is licensed under a Creative Commons "Attribution" License. ; http://creativecommons.org/licenses/by/2.5/ ; ; Tested with Csound 5.01.1 on Windows XP. ; ; Instruments based on instruments designed by by Anthony Kozar (fmscape.orc) ; http://www.ruccas.org/index.php?Anthony%20Kozar ; ;------------------------------------------------------------------------- -g --expression-opt -f -W -o DriftDhikr2.wav sr = 48000 kr = 4800 ksmps = 10 nchnls = 2 ; ; sine wave ; giSine ftgen 0, 0, 65536, 10, 1 ; ; global channels ; gaFMmod init 0 ; combined modulator signals gaModEnv init 0 ; combined modulator envelopes gaFMmod2 init 0 ; combined modulator signals gaModEnv2 init 0 ; combined modulator envelopes ; ; modulator, writes gaFMmod and gaModEnv ; instr 1 idur = p3 iamp = p4 ifreq = p5 iampbeg = p6 ; percent amplitude at note beginning iampend = p7 ; percent amplitude at note end iattack = p8 ; amp env attack time irelease = p9 ; amp env release time print ifreq ; note amplitude isustain = idur - iattack - irelease aampline line iampbeg, idur, iampend aenv linseg 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0 aamp = aampline * aenv ; create sound aosc poscil aamp, ifreq, giSine ; and accumulate results vincr gaFMmod, aosc maxaccum gaModEnv, aamp endin ; ; modulator, writes gaFMmod2 and gaModEnv2 ; instr 2 idur = p3 iamp = p4 ifreq = p5 iampbeg = p6 ; percent amplitude at note beginning iampend = p7 ; percent amplitude at note end iattack = p8 ; amp env attack time irelease = p9 ; amp env release time print ifreq ; note amplitude isustain = idur - iattack - irelease aampline line iampbeg, idur, iampend aenv linseg 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0 aamp = aampline * aenv ; create sound aosc poscil aamp, ifreq, giSine ; and accumulate results vincr gaFMmod2, aosc maxaccum gaModEnv2, aamp endin ; ; carrier, reads gaMonEnv and gaFMmod ; instr 3 idur = p3 iamp = p4 ifreq = p5 ifreq2 = p6 imodidx = p7 ileftdel = p8 ; left channel delay time irightdel = p9 ; right channel delay time irevbtime = p10 ; reverberation time print ifreq ; pitch glide envelope kpch expseg ifreq, 7, ifreq, idur-16, ifreq2, 9, ifreq2 ; generate carrier signal kmodamt = k(imodidx) * kpch / 16 ; 16 for four octaves? acarr poscil gaModEnv, kpch + (kmodamt * gaFMmod), giSine ; add some spatial depth adelayL delay acarr, ileftdel adelayR delay acarr, irightdel areverbL reverb .5*(adelayL+acarr), irevbtime areverbR reverb .5*(adelayR+acarr), irevbtime arL, arR reverbsc areverbL, areverbR, .92, 7680, sr/1.5, .2, 0 ; composite signals a1 = iamp*(arL+(acarr*.4)) a2 = iamp*(arR+(acarr*.4)) ; filter a3 butterbr a1, 16000, 2000 a4 butterbr a2, 16000, 2000 a5 = (a1*.20)+(a3*.80) a6 = (a2*.20)+(a4*.80) ; Compression acL dam a5, 3000, 0.5, 1, 0.2, 0.1 acR dam a6, 3000, 0.5, 1, 0.2, 0.1 ; DC filter aL dcblock acL aR dcblock acR outs aL, aR ; clear out globals clear gaFMmod, gaModEnv endin ; ; carrier, reads gaMonEnv2 and gaFMmod2 ; instr 4 idur = p3 iamp = p4 ifreq = p5 ; starting frequency ifreq2 = p6 ; ending frequency imodidx = p7 ; modulation index ileftdel = p8 ; left channel delay time irightdel = p9 ; right channel delay time irevbtime = p10 ; reverberation time print ifreq ; pitch glide envelope kpch expseg ifreq, 7, ifreq, idur-16, ifreq2, 9, ifreq2 ; generate carrier signal kmodamt = k(imodidx) * kpch / 16 ; 16 for four octaves? acarr poscil gaModEnv2, kpch + (kmodamt * gaFMmod2), giSine ; add some spatial depth adelayL delay acarr, ileftdel adelayR delay acarr, irightdel areverbL reverb .5*(adelayL+acarr), irevbtime areverbR reverb .5*(adelayR+acarr), irevbtime arL, arR reverbsc areverbL, areverbR, .92, 7680, sr/1.5, .2, 0 ; composite signals a1 = iamp*(arL+(acarr*.4)) a2 = iamp*(arR+(acarr*.4)) ; filter a3 butterbr a1, 16000, 2000 a4 butterbr a2, 16000, 2000 a5 = (a1*.20)+(a3*.80) a6 = (a2*.20)+(a4*.80) ; Compression acL dam a5, 3000, 0.5, 1, 0.2, 0.1 acR dam a6, 3000, 0.5, 1, 0.2, 0.1 ; DC filter aL dcblock acL aR dcblock acR outs aL, aR ; clear out globals clear gaFMmod2, gaModEnv2 endin #define BASE #30# #define OCT(O) #[ $BASE. * (2^$O.) ]# #define PCH(O'M'N) #[ $OCT.($O.) * ($M./$N.) ]# #define MUL(O'N) #[ $OCT.($O.) * $N. ]# ; descending carrier: 2/1 -> 3/2 i 3 0 300 1500 $OCT(3). [$OCT(2).*(3/2)] 16 0.111 0.123 2.500 ; modulater for descender: primes >= 3 i 1 0 295 3000 $MUL(2'3) 1 1 5 5 i 1 . . . $MUL(2'5) . . . . i 1 . . . $MUL(2'7) . . . . i 1 . . . $MUL(2'11) . . . . i 1 . . . $MUL(2'13) . . . . i 1 . . . $MUL(2'17) . . . . i 1 . . . $MUL(2'19) . . . . i 1 . . . $MUL(2'23) . . . . i 1 . . . $MUL(2'29) . . . . i 1 . . . $MUL(2'31) . . . . i 1 . . . $MUL(2'37) . . . . ; ascending carrier: 1/1 -> 3/2 i 4 0 300 1500 $OCT(2). [$OCT(2).*(3/2)] 16 0.111 0.123 2.500 ; modulater for ascender: primes >= 3 i 2 0 295 3000 $MUL(2'3) 1 1 5 5 i 2 . . . $MUL(2'5) . . . . i 2 . . . $MUL(2'7) . . . . i 2 . . . $MUL(2'11) . . . . i 2 . . . $MUL(2'13) . . . . i 2 . . . $MUL(2'17) . . . . i 2 . . . $MUL(2'19) . . . . i 2 . . . $MUL(2'23) . . . . i 2 . . . $MUL(2'29) . . . . i 2 . . . $MUL(2'31) . . . . i 2 . . . $MUL(2'37) . . . . e