From a7ca4de15d747140c0cd3756200434fd89b860c0 Mon Sep 17 00:00:00 2001 From: severak Date: Sun, 7 Jun 2020 14:39:39 +0200 Subject: [PATCH] Horowitz Duo finished. --- cabbages/horowitz_duo.csd | 82 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/cabbages/horowitz_duo.csd b/cabbages/horowitz_duo.csd index 4d52142..df4618c 100644 --- a/cabbages/horowitz_duo.csd +++ b/cabbages/horowitz_duo.csd @@ -46,6 +46,51 @@ nchnls = 2 giSplit[] fillarray 0, 59, 64, 20, 109 +;Author: Iain McCurdy (2012) +;http://iainmccurdy.org/csound.html + +opcode StChorus,aa,aakkakk + ainL,ainR,krate,kdepth,aoffset,kwidth,kmix xin ;READ IN INPUT ARGUMENTS + ilfoshape ftgentmp 0, 0, 131072, 19, 1, 0.5, 0, 0.5 ;POSITIVE DOMAIN ONLY SINE WAVE + kporttime linseg 0,0.001,0.02 ;RAMPING UP PORTAMENTO VARIABLE + kChoDepth portk kdepth*0.01, kporttime ;SMOOTH VARIABLE CHANGES WITH PORTK + aChoDepth interp kChoDepth ;INTERPOLATE TO CREATE A-RATE VERSION OF K-RATE VARIABLE + amodL osciliktp krate, ilfoshape, 0 ;LEFT CHANNEL LFO + amodR osciliktp krate, ilfoshape, kwidth*0.5 ;THE PHASE OF THE RIGHT CHANNEL LFO IS ADJUSTABLE + amodL = (amodL*aChoDepth)+aoffset ;RESCALE AND OFFSET LFO (LEFT CHANNEL) + amodR = (amodR*aChoDepth)+aoffset ;RESCALE AND OFFSET LFO (RIGHT CHANNEL) + aChoL vdelay ainL, amodL*1000, 1.2*1000 ;CREATE VARYING DELAYED / CHORUSED SIGNAL (LEFT CHANNEL) + aChoR vdelay ainR, amodR*1000, 1.2*1000 ;CREATE VARYING DELAYED / CHORUSED SIGNAL (RIGHT CHANNEL) + aoutL ntrpol ainL*0.6, aChoL*0.6, kmix ;MIX DRY AND WET SIGNAL (LEFT CHANNEL) + aoutR ntrpol ainR*0.6, aChoR*0.6, kmix ;MIX DRY AND WET SIGNAL (RIGHT CHANNEL) + xout aoutL,aoutR ;SEND AUDIO BACK TO CALLER INSTRUMENT +endop + +opcode StChorusRspline,aa,aakkkkkk + ainL,ainR,krate,kdereg,kdepth,koffset,kwidth,kmix xin ;READ IN INPUT ARGUMENTS + kporttime linseg 0,0.001,0.02 ;RAMPING UP PORTAMENTO VARIABLE + kChoDepth portk kdepth*0.01, kporttime ;SMOOTH VARIABLE CHANGES WITH PORTK + kmod1 rspline koffset,kChoDepth, krate*4+0.01, ((krate*4*kdereg)+0.01) + kmod2 rspline kChoDepth,koffset, krate*4+0.01, ((krate*4*kdereg)+0.01) + kmod1 limit kmod1,0.0001,1.2 + kmod2 limit kmod2,0.0001,1.2 + amod1 interp kmod1 + amod2 interp kmod2 + aCho1 vdelay ainL, amod1*1000, 1.2*1000 ;CREATE VARYING DELAYED / CHORUSED SIGNAL (LEFT CHANNEL) + aCho2 vdelay ainR, amod2*1000, 1.2*1000 ;CREATE VARYING DELAYED / CHORUSED SIGNAL (RIGHT CHANNEL) + kpan rspline 0,1,krate,2*krate*kdereg ;PANNING + kpan limit kpan,0,1 + apan interp kpan + aChoL = (aCho1*apan)+(aCho2*(1-apan)) + aChoR = (aCho2*apan)+(aCho1*(1-apan)) + aChoL ntrpol aChoL,aCho1,kwidth ;WIDTH PROCESSING BETWEEN AUTO-PANNED AND HARD-PANNED + aChoR ntrpol aChoR,aCho2,kwidth + aoutL ntrpol ainL*0.6, aChoL*0.6, kmix ;MIX DRY AND WET SIGNAL (LEFT CHANNEL) + aoutR ntrpol ainR*0.6, aChoR*0.6, kmix ;MIX DRY AND WET SIGNAL (RIGHT CHANNEL) + xout aoutL,aoutR ;SEND AUDIO BACK TO CALLER INSTRUMENT +endop + + ;instrument will be triggered by keyboard widget instr 1 irawsplit chnget "split" @@ -100,16 +145,51 @@ instr 1 if inotnum>isplit then kVol chnget "hi_volume" + chnmix aOut*kEnv*kVol, "ahi" else kVol chnget "lo_volume" + chnmix aOut*kEnv*kVol, "alo" endif - outs aOut*kEnv*kVol, aOut*kEnv*kVol + ;outs aOut*kEnv*kVol, aOut*kEnv*kVol endin +instr 2 + khi_chorus chnget "hi_chorus" + klo_chorus chnget "lo_chorus" + + aHi chnget "ahi" + aLo chnget "alo" + krate = 0.5 + kdereg = 0 + kdepth = 0.2 + koffset = 0.001 + kwidth = 0.75 + + ; TODO - reverse engineer this part + kporttime linseg 0,0.001,0.05 + koffset portk koffset,kporttime*0.5 + aoffset interp koffset + + kdereg rspline -kdereg, kdereg, 0.1, 0.5 + ktrem rspline 0,-1,0.1,0.5 + ktrem pow 2,ktrem + + + aHiL,aHiR StChorus aHi,aHi,krate*octave(kdereg),kdepth*ktrem,aoffset,kwidth,khi_chorus + aLoL,aLoR StChorus aLo,aLo,krate*octave(kdereg),kdepth*ktrem,aoffset,kwidth,klo_chorus + + outs aHiL + aLoL, aHiR + aLoR + + chnclear "ahi" + chnclear "alo" +endin + + ;causes Csound to run for about 7000 years... f0 z +i2 0 -1