Automation Experiment Jacob Joaquin July 1, 2010 jacobjoaquin@gmail.com csoundblog.com sr = 44100 kr = 44100 ksmps = 1 nchnls = 2 0dbfs = 1.0 ; Instruments # define Machine # 1 # # define Fx # 2 # ; Tables # define t_sine # 1 # itemp ftgen $t_sine, 0, 2 ^ 16, 10, 1 gafx init 0 opcode PortX, k, kkkk kmin, \ ; Minimum port value kmax, \ ; Maximum port value kcps, \ ; Frequency to pick to value khtime \ ; Portamento time xin k1 randh 0.5, kcps, 2 k1 = (k1 + 0.5) * (kmax - kmin) + kmin k1 portk k1, khtime xout k1 endop instr $Machine idur = p3 iamp = p4 ifade = p5 ; Launch Fx instrument event_i "i", $Fx, 0, idur, 1, ifade ; Envelopes kenv line 0.01, idur, 1 kenv_2 linseg 1, idur - ifade, 1, ifade, 100 kenv_3 linseg 1, idur - ifade, 1, ifade, 0.1 kfade expseg 0.5 * iamp, idur - ifade - 0.1, 0.5 * iamp, 0.1, iamp, \ ifade, 0.001 ; Second order PortX modulation kfreq_mod PortX 0.01, 0.3, 0.5 * kenv, 0.1 * kenv_3 kamp_mod PortX 0.01, 0.3, 0.5 * kenv, 0.1 * kenv_3 kndx_mod PortX 0.01, 0.05, 3 * kenv * kenv_2, 0.01 * kenv_3 kmod_mod PortX 0.1, 1, 0.5 * kenv, 0.01 * kenv_3 ; PortX controllers kfreq PortX 0, 1, kenv * kenv_2, kfreq_mod * kenv_3 kamp PortX 0, 1, 16 * kenv_2, kamp_mod * kenv_3 kmod PortX 0, 1, kmod_mod * kenv_2, 0.03 * kenv_3 kndx PortX 0, 1, 3 * kenv * kenv_2, kndx_mod * kenv_3 kpan PortX 0, 1, 0.99 * kenv_2, 0.1 kpan_2 PortX 0, 1, 0.123 * kenv_2, 0.2 kamp_modulator PortX 0, 1, 3 * kenv_2, 0.05 kmix PortX 0, 1, 0.25 * kenv_2, 0.111 ; Scale controllers kfreq = 50 * 5 ^ kfreq kmod = 2 ^ kmod kndx = (17 ^ kndx) - 1 kamp_modulator = 20 ^ kamp_modulator ; Generate FM audio a1 foscil kamp * kfade, kfreq, 1, kmod, kndx, $t_sine ; Amplitude LFO a2 oscil 0.5, kamp_modulator, $t_sine a2 = a2 + 0.5 ; Pan between original signal and amplitude modulated signal a1 = a1 * (sqrt(kpan) + sqrt(1 - kpan) * a2) ; Pan between dry and wet adry = a1 * sqrt(kmix) awet = a1 * sqrt(1 - kmix) ; Output and write to global FX bus out adry * sqrt(1 - kpan_2), adry * sqrt(kpan_2) gafx = awet endin instr $Fx p3 = p3 + 3 ; Extend Fx by 3 seconds idur = p3 ; Duration iamp = p4 ; Amplitude ifade = p5 + 3 ; Extend fade by 3 seconds ; Delay parameters idelay = 500 idelay_fade = 4 imax_delay = idelay_fade * idelay ; Envelopes kenv linseg 1, idur - ifade, 1, ifade, 100 kenv_2 linseg 1, idur - ifade, 1, ifade, idelay_fade ; PortX Controllers kdel_1 PortX 0, 1, 2 * kenv, 0.4 kdel_2 PortX 0, 1, 2.1 * kenv, 0.4 kroom_size PortX 0.2, 0.9, 0.3, 0.3 ; Delays a1 vdelay3 gafx, kdel_1 * idelay * kenv_2, imax_delay a2 vdelay3 gafx, kdel_2 * idelay * kenv_2, imax_delay ; Reverb a1, a2 freeverb a1, a2, kroom_size, 0.5002 ; Output and reset Fx bus out a1, a2 gafx = 0 endin ; Instruments # define Machine # 1 # # define Fx # 2 # i $Machine 0 185 0.808 12