Spin Semiconductor Forum Index Spin Semiconductor
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Changing Hall Reverb size

 
Post new topic   Reply to topic    Spin Semiconductor Forum Index -> Algorithm development
View previous topic :: View next topic  
Author Message
micahvdm



Joined: 09 Sep 2014
Posts: 5

PostPosted: Mon Jul 31, 2017 6:19 am    Post subject: Changing Hall Reverb size Reply with quote

Hi all,

Long time lurker, first post.
I'm wanting to increase the size of the hall reverb below, would that be accomplished by changing "idel" and the tap points, or is there more to it than that?
Any help would be appreciated!

Code:

;Hall.

;Pot0 = reverb damping
;Pot1 = reverb level
;Pot2 = reverb time

mem   idel   8000   ;initial sound space
mem   iap0   31
mem   iap1   47
mem   iap2   73
mem   iap3   171
mem   iap4   196
mem   iap5   371
mem   iap6   496   ;thickening all passes imbeded in intial delay

mem   ap1   234
mem   ap2   356
mem   ap3   962
mem   ap4   1263   ;reverb loop input all passes

mem   lap1a   1921
mem   lap1b   2645
mem   d1   3534
mem   lap2a   2294
mem   lap2b   2767
mem   d2   3745   ;loop constants

;write-first registers:

equ   dry   reg0
equ   kirt   reg1   ;coefficint to scale initial sound
equ   krt   reg2   ;coefficient to affect RT of loop
equ   apout   reg3   ;output of loop input all passes
equ   kd   reg4   ;damping coefficient (for shelving)
equ   temp   reg5   ;temp register for filter routines
equ   gain   reg6   ;adjust gain with RT
equ   revoutl   reg7
equ   revoutr   reg8

;read-first registers:

equ   lf1   reg20   ;reverb loop filter 1
equ   lf2   reg21   ;reverb loop filter 2
equ   hf1   reg22   ;loop high pass 1 (fixed)
equ   hf2   reg23   ;loop high pass 2 (fixed)
equ   lfin2   reg25   ;LPF for imbedding in intial delay
equ   lf   reg26   ;input low pass (shelving with kd)

;clear read-first registers, setup lfo:

skp   run,endclr
wrax   lf1,0
wrax   lf2,0
wrax   hf1,0
wrax   hf2,0
wrax   lfin2,0
wlds   sin0,20,100
endclr:

;initial sound tap positions (30.5uS/location, 100=3.05mS):

equ   ld1   2074   ;first tap, left
equ   rd1   2174   ;first tap, right
equ   ld2   3556   ;and so on...
equ   rd2   3962
equ   ld3   3345
equ   rd3   3121
equ   ld4   3656
equ   rd4   3453
equ   ld5   5121
equ   rd5   5624
equ   ld6   6579
equ   rd6   7940

;prepare decay pot:

rdax   pot2,0.97      ;get pot, limit to less than infinite
wrax   krt,1         ;write loop decay time
sof   0.4,0.6         ;scale to 0.6 to 1.0
wrax   kirt,0         ;write impulse filter gains
sof   -1,0.99         ;scale to decrease gain with RT
wrax   gain,0         ;write gain factor

;prepare damping pot:

rdax   pot0,-1
wrax   kd,0         ;increases shelf to -1 (infinite loss)

;do inputs to predelay:

rdax   adcl,0.5
rdax   adcr,0.5      ;get inputs
mulx   gain         ;give greater gain to short RT
wrax   dry,0

;read predelay and write initial response delay:

rdax   dry,0.5
rda   iap0#,0.5
wrap   iap0,-0.5      ;complicate input to initial delay
wrax   temp,1
rdfx   lf,0.4
wrhx   lf,-1
mulx   kd
rdax   temp,1         ;low pass fiter entire input
wra   idel,0         ;write initial sound delay

;complicate initial sound:

rda   idel+500,1
rda   iap1#,0.5
wrap   iap1,-0.5
wra   idel+500,0

rda   idel+1000,1
rda   iap2#,0.5
wrap   iap2,-0.5
wra   idel+1000,0

rda   idel+1500,1
rda   iap3#,0.5
wrap   iap3,-0.5
wra   idel+1500,0

rda   idel+2000,1
rda   iap4#,0.5
wrap   iap4,-0.5
wra   idel+2000,0

rda   idel+2500,1
rda   iap5#,0.5
wrap   iap5,-0.5
wrax   temp,1         ;save filter input
rdfx   lfin2,0.3
wrhx   lfin2,-1         ;make HP filter
mulx   kd         ;multiply by negative shelving coef
rdax   temp,1         ;add back input (shelving LPF)
wra   idel+2500,0

rda   idel+3000,1
rda   iap6#,0.5
wrap   iap6,-0.5
wra   idel+3000,0

;do reverb input all passes:

rda   idel,1
rda   ap1#,0.5
wrap   ap1,-0.5
rda   ap2#,0.5
wrap   ap2,-0.5
rda   ap3#,0.5
wrap   ap3,-0.5
rda   ap4#,0.5
wrap   ap4,-0.5
wrax   apout,0

;do reverb loop and sum all outputs:

rda   d2#,1
mulx   krt
rdax   apout,1
rda   lap1a#,0.5
wrap   lap1a,-0.5
rda   lap1b#,0.5
wrap   lap1b,-0.5
wrax   temp,1         ;save filter input
rdfx   lf1,0.4
wrhx   lf1,-1         ;make HP filter
mulx   kd         ;multiply by negative shelving coef
rdax   temp,1         ;add back input (shelving LPF)
rdfx   hf1,0.005
wrhx   hf1,-0.5      ;roll out lows in loop
wra   d1,0

;rda   idel+ld6,-0.5
;mulx   kirt
;rda   idel+ld5,0.7
;mulx   kirt
;rda   idel+ld4,0.6
;mulx   kirt
;rda   idel+ld3,0.5
;mulx   kirt
;rda   idel+ld2,0.6
;rda   idel+ld1,-0.6
;wrax   revoutl,0

rda   d1#,1
mulx   krt
rdax   apout,1
rda   lap2a#,0.5
wrap   lap2a,-0.5
rda   lap2b#,0.5
wrap   lap2b,-0.5
wrax   temp,1         
rdfx   lf2,0.4
wrhx   lf2,-1         
mulx   kd         
rdax   temp,1   
rdfx   hf2,0.005
wrhx   hf2,-0.5            
wra   d2,1.99
rda   d1,1.99
mulx   pot1
mulx   pot1
wrax   revoutr,0

;rda   idel+rd6,0.6
;mulx   kirt
;rda   idel+rd5,-0.5
;mulx   kirt
;rda   idel+rd4,0.6
;mulx   kirt
;rda   idel+rd3,0.5
;mulx   kirt
;rda   idel+rd2,-0.6
;rda   idel+rd1,0.5
;wrax   dacr,0

;do delay smoothing:

cho   rda,sin0,sin|reg|compc,d1+100
cho   rda,sin0,sin,d1+101
wra   d1+200,0

cho   rda,sin0,cos|reg|compc,d1+100
cho   rda,sin0,cos,d1+101
wra   d1+200,0

;now combine to output

rdax   dry,1
rdax   revoutl,1
rdax   revoutr,1
wrax   dacl,0
Back to top
View user's profile Send private message
micahvdm



Joined: 09 Sep 2014
Posts: 5

PostPosted: Mon Aug 07, 2017 2:08 am    Post subject: Reply with quote

Bump...anyone?
Back to top
View user's profile Send private message
Digital Larry



Joined: 12 Nov 2012
Posts: 274

PostPosted: Mon Aug 07, 2017 7:38 am    Post subject: Reply with quote

I'm no reverb expert but I can offer some general advice, which is: try it and see. Generally it is a good idea to change just one thing at a time and also keep a copy of the unmodified code handy so you can quickly audition both of them side by side.

The "size" of a reverb is typically determined from the early reflections, so if you push those things further out you are likely to get a subjective impression of increased size.

I also use a percussive sound or a recorded click to audition reverb sounds critically.
Back to top
View user's profile Send private message Visit poster's website
seancostello



Joined: 11 Sep 2006
Posts: 74

PostPosted: Tue Aug 08, 2017 12:44 pm    Post subject: Reply with quote

Digital Larry wrote:

The "size" of a reverb is typically determined from the early reflections, so if you push those things further out you are likely to get a subjective impression of increased size.


This would be my suggestion as well. I would scale up all the mem values associated with the input (idel, iap0, iap1, etc.), as well as all of these values:

Code:
initial sound tap positions (30.5uS/location, 100=3.05mS):

equ   ld1   2074   ;first tap, left
equ   rd1   2174   ;first tap, right
equ   ld2   3556   ;and so on...
equ   rd2   3962
equ   ld3   3345
equ   rd3   3121
equ   ld4   3656
equ   rd4   3453
equ   ld5   5121
equ   rd5   5624
equ   ld6   6579
equ   rd6   7940


as well as all the rda/wra read/write delay locations in this code:

Code:
;complicate initial sound:

rda   idel+500,1
rda   iap1#,0.5
wrap   iap1,-0.5
wra   idel+500,0

rda   idel+1000,1
rda   iap2#,0.5
wrap   iap2,-0.5
wra   idel+1000,0

rda   idel+1500,1
rda   iap3#,0.5
wrap   iap3,-0.5
wra   idel+1500,0

rda   idel+2000,1
rda   iap4#,0.5
wrap   iap4,-0.5
wra   idel+2000,0

rda   idel+2500,1
rda   iap5#,0.5
wrap   iap5,-0.5
wrax   temp,1         ;save filter input
rdfx   lfin2,0.3
wrhx   lfin2,-1         ;make HP filter
mulx   kd         ;multiply by negative shelving coef
rdax   temp,1         ;add back input (shelving LPF)
wra   idel+2500,0


Sean Costello
Back to top
View user's profile Send private message
seancostello



Joined: 11 Sep 2006
Posts: 74

PostPosted: Tue Aug 08, 2017 2:45 pm    Post subject: Reply with quote

OK, just took a closer look at the code, and it looks like the tapped early reflections delay line has the output tap code commented out. So, all of the ld1, rd1, etc. values don't actually do anything in this code. The early reflection delay line has several points that are read, diffused with an allpass, and then written back into that same point...and then all that is ignored. The late reverb reads from the beginning of the early reflection delay line, which is at a point before all those allpasses are read from/written into that delay line.

I tried uncommenting the output tap code, and the code wouldn't run, as it exceeded 128 instructions. If I was going to try and make this work, I would see if the input allpasses for the late reverb could be commented out, and take the input for the late reverb from the end of the early reflection delay line. I'm not in front of an FV-1 development platform right now, so I can't verify if this would sound good - the smaller allpasses in the early reflection delay line may not sound as good as the larger allpasses used in the code as it currently stands.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Spin Semiconductor Forum Index -> Algorithm development All times are GMT - 8 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group