3K room reverb help

Algorithm development and general DSP issues

Moderator: frank

Post Reply
ice-nine
Posts: 192
Joined: Thu May 24, 2012 9:03 am

3K room reverb help

Post by ice-nine »

Hi, after looking at the excellent 3k Room reverb program I am trying to alter it so that instead of having the pre delay pot control the delay it is just a set pre delay of 100ms or so, then into the reverb code.

The trouble is that every time I try and remove or replace the pot0 control, the pre delay disappears.

The code below is up to where it enters the reverb, a point in the right direction from someone who knows better would be a great help.

Code: Select all

;prepare predelay pot:

rdax	pot0,0.1		;to 1/10th total delay (100ms)
and	%01111110_00000000_00000000
wrax	addr_ptr,0		;write to memory pointer

;prepare decay pot:

rdax	pot1,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	pot2,-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 
wra	pdel,0

;read predelay and write initial response delay:

rmpa	1
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

I have tried replacing the pot code with a register but that does not work

Code: Select all

;prepare predelay pot:

rdax	pot0,0.1		;to 1/10th total delay (100ms)
and	%01111110_00000000_00000000
wrax	addr_ptr,0		;write to memory pointer

Code: Select all

;prepare predelay pot:

rdax	predlk,0.1		;to 1/10th total delay (100ms)
wrax	addr_ptr,0		;write to memory pointer
where predelk is an equ constant

I have also wrote a stand alone 100ms delay code which works fine but when I try to put it in with the reverb code I lose the delay as well. I'm a bit stumped here.
frank
Posts: 1244
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank »

Try

Code: Select all


;prepare predelay pot:

sof  0,0
or %00001100_11000000_00000000
wrax   addr_ptr,0      ;write to memory pointer 
Frank Thomson
Experimental Noize
ice-nine
Posts: 192
Joined: Thu May 24, 2012 9:03 am

Post by ice-nine »

Thanks Frank, that was a big help and today I got the rest of the reverb all sorted towards what I was aiming for.

[/code]
Sweetalk
Posts: 141
Joined: Thu Oct 15, 2009 5:13 am

Post by Sweetalk »

Can you use rdax with an equ const??.

My approach:

Code: Select all

clr                  ; Assure the accumulator is cleared
sof 0.1, 0                 ; Add 0.1 to the accumulator for the needed delay
wrax addr_ptr, 0       ; Write to the address pointer
ice-nine
Posts: 192
Joined: Thu May 24, 2012 9:03 am

Post by ice-nine »

Sweetalk wrote:Can you use rdax with an equ const??.

My approach:

Code: Select all

clr                  ; Assure the accumulator is cleared
sof 0.1, 0                 ; Add 0.1 to the accumulator for the needed delay
wrax addr_ptr, 0       ; Write to the address pointer
using rdax with an equ constant didn't work in that way, so you will be correct.

I have used this before which also works but forgot about it.

Code: Select all

 clr            				; Clear the ACC 
 or    	predel*256      			; Put predelay predel into ACC alligned to ACC[22:8] 
 wrax    	predel_read, 0      		; Save it 
ice-nine
Posts: 192
Joined: Thu May 24, 2012 9:03 am

Post by ice-nine »

Sweetalk wrote:Can you use rdax with an equ const??.

My approach:

Code: Select all

clr                  ; Assure the accumulator is cleared
sof 0.1, 0                 ; Add 0.1 to the accumulator for the needed delay
wrax addr_ptr, 0       ; Write to the address pointer
using rdax with an equ constant didn't work in that way, so you will be correct.

I have used this before but forgot about it.

Code: Select all

 clr            				; Clear the ACC 
 or    	predel*256      			; Put predelay predel into ACC alligned to ACC[22:8] 
 wrax    	predel_read, 0      		; Save it 
Aaron
Posts: 54
Joined: Wed Mar 04, 2015 8:10 pm
Location: Oklahoma

Post by Aaron »

Instead of reading from the address pointer I would just read from the end of pdel

Code: Select all

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

;read predelay and write initial response delay: 

;rmpa   1               ;instead of reading from address pointer

rda   pdel#,1          ;read from the end of pedl
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 
Post Reply