; ### Eastman Orchestra Library Instrument  r_e_v ###
; uses new unit generator nreverb instead of old reverb
; Note: nreverb produces a much higher output amplitude than reverb. For proper
; balance, reduce the input to reverb2, or its output, by about 70 %, as is
; done in this algorithm.
instr revinst
ifelse(NCHNLS,1,[
; mono in and out ; global signal input is garevin11],[
; stereo output ; global input signals are garevin1 (left channel) and
; garevin2 (right channel)
])
; variable reverberation time (krevtime) :
; p4  = 1st reverb time  ; p5  = 2nd reverb time  
; p6  = rate of change btw p4  & p5 ;if 0 = 1/p3; if>100 = (p6 -100)/p3; 
;      if negative, = actual dur. in seconds
; p7  = function      p8  = starting phase
p6  = (p6 =0?1/p3:p6 )
p6  = (p6 >100?(p6 -100)/p3:p6 )
p6  = (p6 <0?1/abs(p6 ):p6 )
ip7 = (p7 = 0 ? 52 : p7)
krevtime oscili p5 -p4 ,p6 ,ip7 ,p8 
krevtime = krevtime+p4 

; decimal % sent to reverberator(s) (kwet) :
; p9  = 1st decimal % signal sent to reverb unit  ; p10  = 2nd % 
; p11  = rate of change btw p9  & p10 ;if 0 = 1/p3;if>100 = (p11 -100)/p3
;   if negative, = actual dur. in seconds
; p12  = function         p13  = starting phase
p11  = (p11 =0?1/p3:p11 )
p11  = (p11 >100?(p11 -100)/p3:p11 )
p11  = (p11 <0? 1/abs(p11 ): p11 )
ip12 = (p12 = 0 ? 52 : p12)
kwet oscili p10 -p9 ,p11 , ip12 ,p13 
kwet = kwet+p9 
;  --- khdif {high frequency diffusion} -----
ikhdiftest = p14 + p15
khdif = .6  ; default high freq. diffusion value
if ikhdiftest = 0 igoto gotkhdif
   p16  = (p16 =0?1/p3:p16 )
   p16  = (p16 >100?(p11 -100)/p3:p16 )
   p16  = (p16 <0? 1/abs(p11 ): p16 )
   khdif  oscil  p15-p14, p16, (p17 = 0? 50 : p17)
   khdif = khdif + p14
gotkhdif:  ; ---- end of high freq. diffusion processing ----

; garevin1 = left channel or mono signal
a2 = (1-kwet)*garevin1           ; % bypassing reverberator       
garevin1 = kwet * garevin1       ; % sent to reverberator                       
   ;a1 reverb2 garevin1,krevtime , khdif : Output amp is too high here
;a1 reverb2 .3 * garevin1,krevtime , khdif ; input reduced by 70 %
a1 nreverb .3 * garevin1,krevtime , khdif ; input reduced by 70 %
a1 = a1+a2
garevin1 = 0
ifelse(NCHNLS,2,[
; garevin2 = right channel
a4 = (1-kwet) *garevin2        ; % rc bypassing reverberator
garevin2 = kwet * garevin2          ; % rc sent to reverb
   ;a3 reverb2 garevin2,krevtime , khdif  : Output amp is too high here
;a3 reverb2 .3 * garevin2,krevtime, khdif  ; input reduced by 70 %
a3 nreverb .3 * garevin2,krevtime, khdif  ; input reduced by 70 %
a2 = a3+a4
garevin2 = 0               
],[dnl])
