; MonoTrem
; ----------------
; Tremolo effect
;
; aout MonoTrem ain,krate,kdepth,kwave
;
; Performance
; -----------
; ain -- input audio
; krate -- rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)
; kdepth -- depth of the lfo of the effect (range 0 to 1)
; kwave -- waveform used by the lfo (0=sine 1=triangle 2=square)
opcode MonoTrem,a,aKKK
ain,krate,kdepth,kwave xin ;READ IN INPUT ARGUMENTS
krate expcurve krate,5 ;CREATE AN EXPONENTIAL REMAPPING OF krate
krate scale krate,50,0.1 ;RESCALE VALUE
ktrig changed kwave ;IF LFO WAVEFORM TYPE IS CHANGED GENERATE A MOMENTARY '1' (BANG)
if ktrig=1 then ;IF A 'BANG' HAS BEEN GENERATED IN THE ABOVE LINE
reinit UPDATE ;BEGIN A REINITIALIZATION PASS FROM LABEL 'UPDATE' SO THAT LFO WAVEFORM TYPE CAN BE UPDATED
endif ;END OF THIS CONDITIONAL BRANCH
UPDATE: ;LABEL CALLED UPDATE
klfo lfo kdepth, krate, i(kwave) ;CREATE AN LFO
rireturn ;RETURN FROM REINITIALIZATION PASS
klfo = (klfo*0.5)+0.5 ;RESCALE AND OFFSET LFO SO IT STAY WITHIN THE RANGE 0 - 1 ABOUT THE VALUE 0.5
if kwave=2 then ;IF SQUARE WAVE MODULATION HAS BEEN CHOSEN...
klfo portk klfo, 0.001 ;SMOOTH THE SQUARE WAVE A TINY BIT TO PREVENT CLICKS
endif ;END OF THIS CONDITIONAL BRANCH
klfo = klfo+(0.5-(kdepth*0.5)) ;MODIFY LFO AT ZERO DEPTH VALUE IS 1 AND AT MAX DEPTH CENTRE OF MODULATION IS 0.5
alfo interp klfo ;INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE
aout = ain*(alfo^2) ;REDEFINE GLOBAL AUDIO LEFT CHANNEL SIGNAL WITH TREMELO
xout aout ;SEND AUDIO BACK TO CALLER INSTRUMENT
endop