;--------------------------------------------------------- ; Csound sample player ; Coded by Hans Mikelson May 2001 ;--------------------------------------------------------- sr = 44100 ; Sample rate kr = 4410 ; Kontrol rate ksmps = 10 ; Samples/Kontrol period nchnls = 2 ; Normal stereo zakinit 50,50 ; Initialize the zak system ;--------------------------------------------------------- ; sample player ;--------------------------------------------------------- instr 1 idur = p3 ; Duration iamp = p4 ; Amplitude ifqc = cpspch(p5) ; Pitch itd = p6 ; Wavetable Data ipanl = sqrt(p7) ; Pan left ipanr = sqrt(1-p7) ; Pan right itab table 0,itd ; Sample table ibfq table 1,itd ; Base frequency itsz table 2,itd ; Table size ilpi table 3,itd ; Loop start ilpf table 4,itd ; Loop end ifadj = sr*ifqc/ibfq ; sr/TableSize is 1/Time to read table once at sr, next adjust fqc/basefqc ilpd = ilpf-ilpi kdclk linseg 0,.002,1,idur-.022,1,.02,0 ; Declick adclk interp kdclk kenv1 linseg 1,ilpi/ifadj,1,.1,0,.01,0 ; Attack kenv2 linseg 0,ilpi/ifadj,0,.1,1,.01,1 ; Loop kavib oscili .2,4,1 ; Sine amplitude vibrato aphs1 phasor ifadj/itsz ; Attack asig1 table3 aphs1,itab,1 aphs2 phasor ifadj/ilpd,1-frac(ilpi/ilpd) asig2 table3 (aphs2*ilpd+ilpi)/itsz,itab,1 asigi = asig1*kenv1*.8 asigl = asig2*kenv2*(.8+kavib) asig = asigi+asigl outs asig*iamp*adclk, asig*iamp*adclk endin ;--------------------------------------------------------- ; Sample player ;--------------------------------------------------------- instr 2 ivel veloc ; Velocity iamp tablei ivel, 5 ; Convert to amplitude ifqc cpsmidi ; Get the note in cps itd = 12 + int(ivel/128*3) ; Wavetable Data ipanl = sqrt(.5) ; Pan left ipanr = sqrt(1-.5) ; Pan right itab table 0,itd ; Sample table ibfq table 1,itd ; Base frequency itsz table 2,itd ; Table size ilpi table 3,itd ; Loop start ilpf table 4,itd ; Loop end ifadj = sr*ifqc/ibfq ; sr/TableSize is 1/Time to read table once at sr, next adjust fqc/basefqc ilpd = ilpf-ilpi kdclk linenr 1, .05, .05, .05 ; Declick envelope adclk interp kdclk kenv1 linseg 1,ilpi/ifadj,1,.1,0,.01,0 ; Attack kenv2 linseg 0,ilpi/ifadj,0,.1,1,.01,1 ; Loop kavib oscili .2,4,1 ; Sine amplitude vibrato aphs1 phasor ifadj/itsz ; Attack asig1 table3 aphs1,itab,1 aphs2 phasor ifadj/ilpd,1-frac(ilpi/ilpd) asig2 table3 (aphs2*ilpd+ilpi)/itsz,itab,1 asigi = asig1*kenv1*.8 asigl = asig2*kenv2*(.8+kavib) asig = asigi+asigl outs asig*iamp*adclk, asig*iamp*adclk endin