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 

2 second delay
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Spin Semiconductor Forum Index -> FV-1 software questions
View previous topic :: View next topic  
Author Message
livingston



Joined: 15 Nov 2009
Posts: 108
Location: New Orleans, LA US

PostPosted: Fri Mar 12, 2010 2:39 pm    Post subject: Reply with quote

Ha, wow this thing is fun. I popped a 4-pole filter before the delay and another one after it, and added feedback to get some repeats happening. The unfiltered sounds are nasty in a cool way, I think.

To implement:
-variable delay time
-stomp switch that starts recording, then on the second tap, it ends the recording and starts playing it back.

I'll post the code as I add features.
Back to top
View user's profile Send private message
livingston



Joined: 15 Nov 2009
Posts: 108
Location: New Orleans, LA US

PostPosted: Sat Mar 13, 2010 1:42 pm    Post subject: Reply with quote

So here's my code as of right now. It's just Don's code with 4-pole filters before and after the delay, with variable feedback from the output of the delay to the input of the delay. At first I tried feedback from the output of the post-delay filter, thinking it would be better to filter the signal each pass to avoid ever-increasing aliasing, but doing it this way killed too much of the feedback; at max feedback the repeats died after about 2 regenerations.

The filters, both pre- and post-delay, are controlled by a single pot. I may use that same pot to raise the gain a little when the filter cutoff is set to lower frequencies, to make up for the loss of volume with the filtering.

Code:
; This example code delays an input by eight seconds.
; It inteleaves the signal 8 ways in a single max sized delay 
; POT2 controls the filters
; POT0 controls feedback level
equ   input      reg0
equ      loop      reg1
equ      temp      reg2
equ      output      reg4
equ   lp_filt   reg5
equ   lp_filt2   reg6
equ   lp_filt3   reg7
equ   lp_filt4   reg8

mem      delay      32767

skp   run,start
clr
wrax   lp_filt,0

start:

; Get input, filter it to avoid aliasing (not shown)
rdax      adcr, 1
rdax     lp_filt,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt,1.0    ; +lp_filt
wrax      lp_filt,1.0   ; write result to lp_filt

rdax     lp_filt2,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt2,1.0    ; +lp_filt
wrax      lp_filt2,1.0   ; write result to lp_filt

rdax     lp_filt3,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt3,1.0    ; +lp_filt
wrax      lp_filt3,1.0   ; write result to lp_filt

rdax     lp_filt4,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt4,1.0    ; +lp_filt
wrax      lp_filt4,1.0   ; write result to lp_filt
wrax      input, 0

; IF loop counter variable is 0, THEN read an input sample and put it in the temp variable.
rdax   loop, -1
skp   neg, NotZro
   rdax   output,1
   mulx   pot0
   rdax      input,1
   wrax      temp, 0

NotZro:
; Put the temp variable in the head-end of the delay.
ldax      temp
wra      delay, 0

; Get a delayed sample out of the tail end of the delay, put it in the temp variable.
rda      delay+32767, 1
wrax      temp, 0

; Add 0.1 to the loop counter.
ldax      loop
sof      1, 0.1
wrax      loop, 1

; IF loop counter is > 0.8, THEN write the temp variable to the output, and reset loop variable to 0
sof      1, -0.8
skp      neg, Done
   ldax      temp
   wrax      output, 0
   wrax      loop, 0

Done:
ldax      output
rdax     lp_filt,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt,1.0    ; +lp_filt
wrax      lp_filt,1.0   ; write result to lp_filt

rdax     lp_filt2,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt2,1.0    ; +lp_filt
wrax      lp_filt2,1.0   ; write result to lp_filt

rdax     lp_filt3,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt3,1.0    ; +lp_filt
wrax      lp_filt3,1.0   ; write result to lp_filt

rdax     lp_filt4,-1.0    ; ADCL - lp_filt
mulx      pot2       ; * C (POT0 in this case)
rdax      lp_filt4,1.0    ; +lp_filt
wrax      lp_filt4,1.0   ; write result to lp_filt

rdax   adcr,.5
wrax      dacr, 0 


It's a very fun looper, in my opinion. It won't give a Boomerang or Echoplex Digital a run for its money, but for the adventurous it's a fun device.

Still to implement:
-variable delay time
-stomp switch that starts recording, then on the second tap, it ends the recording and starts playing it back.
- selectable sampling rate
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Spin Semiconductor Forum Index -> FV-1 software questions All times are GMT - 8 Hours
Goto page Previous  1, 2
Page 2 of 2

 
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