SpinCAD Spring Reverb Help

Started by Zandercircuitry, July 28, 2021, 09:23:12 AM

Previous topic - Next topic

Zandercircuitry

I would've thought this was probably asked over at the SpinCAD forum when it was still around but I figure if anyone will know, they'll be on here  ;D

I've been...attempting to create a decent spring sound within SpinCAD using the block diagram posted inside the code of a spring patch over on the spinsemi forum (which is by far the most convincing spring i've heard come out of the FV1, but i'm obviously not going to just steal the code, getting in the ballpark of that with spincad would be ideal.

i'm clearly doing something totally wrong and i might be going about it entirely the wrong way trying to copy that block diagram. But just wondered if anyone has any tips on getting a semi-passable spring out of spincad?

Ive tried so many configurations that i feel i might be going a little bit mad.

Image below shows the block diagram i'm working from, and the screenshot of where i got to in spincad...




deadastronaut

https://www.youtube.com/user/100roberthenry
https://deadastronaut.wixsite.com/effects

chasm reverb/tremshifter/faze filter/abductor II delay/timestream reverb/dreamtime delay/skinwalker hi gain dist/black triangle OD/ nano drums/space patrol fuzz//

Zandercircuitry

Damn laptop is useless, let's see if this works...


Zandercircuitry

Eurgh ok the 'add image to post' thing isn't working for me, i've uploaded it here

https://ibb.co/7YgrzWh

Vivek


niektb

#5
I can see all 3 images? XD

But on-topic: are you trying to copy the block diagram of the Spinforum? Because FB3 should be connected pre the chirp. And you're missing a feedback loop

Edit: ooh I should look better. But I think you're doing the feedback loops wrong from the output of the allpass to the input of the threetap. I think you need to use an actual feedback block :)

potul

Quote from: niektb on July 29, 2021, 02:32:37 AM
I think you need to use an actual feedback block :)

Good catch. yep, I think this is one issue.

Zandercircuitry

Quote from: niektb on July 29, 2021, 02:32:37 AM
I can see all 3 images? XD

But on-topic: are you trying to copy the block diagram of the Spinforum? Because FB3 should be connected pre the chirp. And you're missing a feedback loop

Edit: ooh I should look better. But I think you're doing the feedback loops wrong from the output of the allpass to the input of the threetap. I think you need to use an actual feedback block :)

Yeah i figured if i could at least get the blocks kind of mimicking that block diagram then it might atleast give me a good starting point.

Sorry if this is a really dense question but what do you mean by 'feedback block'? All i can see in SpinCAD by way of adding feedback is adding a loop. Forgive me if i'm missing something i think iv'e been staring at it for too long and can't see the wood for the trees...

potul

In Spincad you cannot send the signal "back" directly. You need to add a FB Loop when you want to send the signal back in the flow. So your allpass filters cannot be directly connected to the Threetaps, you need a FB loop block.

deadastronaut

i had a go...try this.

reverb with a subtle delay...quite springy...and adjustable . 8)




whilst im here it would be nice to have an FV-1 BLOCK DIAGRAM PATCH page....(for us dumbass non programmers ) :)
https://www.youtube.com/user/100roberthenry
https://deadastronaut.wixsite.com/effects

chasm reverb/tremshifter/faze filter/abductor II delay/timestream reverb/dreamtime delay/skinwalker hi gain dist/black triangle OD/ nano drums/space patrol fuzz//

Zandercircuitry

Quote from: potul on July 29, 2021, 10:43:13 AM
In Spincad you cannot send the signal "back" directly. You need to add a FB Loop when you want to send the signal back in the flow. So your allpass filters cannot be directly connected to the Threetaps, you need a FB loop block.

Ah sorry i think i just misunderstood what you meant!

thanks :)

Zandercircuitry

Quote from: deadastronaut on July 29, 2021, 10:50:16 AM
i had a go...try this.

reverb with a subtle delay...quite springy...and adjustable . 8)




whilst im here it would be nice to have an FV-1 BLOCK DIAGRAM PATCH page....(for us dumbass non programmers ) :)

that does sound great, but i have been trying to avoid those pre-written reverb blocks, for nothing other than a challenge to myself. Realising the all passes had to go inside the feedback loop was the ticket, combining a couple of 3 tap delays with some all passes and the chirp block has rendered a pretty decent sounding spring IMO

Digital Larry

#12
As has been mentioned, yes you have to use feedback loops to send signals "backwards".  The problem with not doing it is... sometimes it works!  So then you think it should always work.  Alas no.  At the time I was working on this, I may have thought about how to detect a backwards-going signal, but I never implemented anything to prevent it.

I've probably said this on and off over the years, but SpinCAD Designer is not really geared to reverb design.  I had some ideas about what you might do if you wanted to have a more reverb-builder focus.  Ultimately I ran out of energy to maintain it and I do still think that doing reverbs in FV-1 assembler is probably best once you know what the building blocks are, just because there are SO MANY little parameters to adjust, if you really want to get to that level of granularity.

Also, just so you know, the Chirp block was a basic element in Julian Parker's Spring Reverb paper that I've referenced a few dozen times.   But it's not a fully-realized chirp.  It's just the stretched all-pass stage.

https://acris.aalto.fi/ws/portalfiles/portal/13004391/art_10.1155_2011_646134.pdf

This block lacks the low pass filter at the first transition frequency so you will actually get "mirrored" chirps up to the Nyquist point theoretically.  It is probably preferable to put a low pass there.  You'll have to figure out where it needs to go.  Unless you can figure it out mathematically I'd just measure it using the spectrogram in Audacity along with some click/snare drum source material.  Parker's paper recommends something like a tenth order filter, so good luck implementing that on an FV-1.  I know you can do it as a series of two-pole stages, but still... there aren't even any examples of how to do direct-form filters.  At least, I haven't seen any and I've read the FV-1 knowledge base many times.  You can also just stack 2nd order SpinCAD filters at the corner frequency, but this will most likely suffer response anomalies compared to a properly designed high order filter.

Also it lacks the "chirp straightening" which is essentially a crossover well below the first chirp frequency, so that DC and low frequencies are not chirped.  But yes, even with those shortcomings, it does provide time smearing in an interesting way and is one of my biggest interests in audio DSP.  I really thought about trying to do all that on an FV-1 but it doesn't have enough instructions to do it accurately.  There is a Linkwitz-Reilly crossover in one of Spin's examples.  For cheap you might try the high/low outputs of a state variable filter but it may have other effects.

Double checking.  OK they really are stretched all passes, I think.  These are the way all all passes are done in the FV-1.  I never thought about the mirroring.  I will double check it.

OK here they are.  Yes they are gloriously mirrored.  Input pulse is on the bottom, chirp output on the top. This was done using the "File Output" mode of SpinCAD's simulator.




Here's the FV-1 code.  It's a series of chained "chirp" blocks all with the same settings, taking 124/128 of the FV-1's instructions.  With these particular settings, the chirp  transition frequency is a little below 3 kHz and the chirp is about 50 msec long.


; mega-chirp.spcd
; null
; Pot 0:
; Pot 1:
; Pot 2:
;
;
; ----------------------------
;------ Input
;------ Chirp
RDAX ADCL,0.5000000000
RDA 12,0.38
WRAP 0,-0.38
RDA 25,0.38
WRAP 13,-0.38
RDA 38,0.38
WRAP 26,-0.38
RDA 51,0.38
WRAP 39,-0.38
RDA 64,0.38
WRAP 52,-0.38
RDA 77,0.38
WRAP 65,-0.38
RDA 90,0.38
WRAP 78,-0.38
RDA 103,0.38
WRAP 91,-0.38
RDA 116,0.38
WRAP 104,-0.38
RDA 129,0.38
WRAP 117,-0.38
RDA 142,0.38
WRAP 130,-0.38
RDA 155,0.38
WRAP 143,-0.38
RDA 168,0.38
WRAP 156,-0.38
RDA 181,0.38
WRAP 169,-0.38
RDA 194,0.38
WRAP 182,-0.38
RDA 207,0.38
WRAP 195,-0.38
RDA 220,0.38
WRAP 208,-0.38
WRAX REG0,0.0000000000
;------ Chirp
RDAX REG0,0.5000000000
RDA 233,0.38
WRAP 221,-0.38
RDA 246,0.38
WRAP 234,-0.38
RDA 259,0.38
WRAP 247,-0.38
RDA 272,0.38
WRAP 260,-0.38
RDA 285,0.38
WRAP 273,-0.38
RDA 298,0.38
WRAP 286,-0.38
RDA 311,0.38
WRAP 299,-0.38
RDA 324,0.38
WRAP 312,-0.38
RDA 337,0.38
WRAP 325,-0.38
RDA 350,0.38
WRAP 338,-0.38
RDA 363,0.38
WRAP 351,-0.38
RDA 376,0.38
WRAP 364,-0.38
RDA 389,0.38
WRAP 377,-0.38
WRAX REG1,0.0000000000
;------ Chirp
RDAX REG1,0.5000000000
RDA 402,0.38
WRAP 390,-0.38
RDA 415,0.38
WRAP 403,-0.38
RDA 428,0.38
WRAP 416,-0.38
RDA 441,0.38
WRAP 429,-0.38
RDA 454,0.38
WRAP 442,-0.38
RDA 467,0.38
WRAP 455,-0.38
RDA 480,0.38
WRAP 468,-0.38
RDA 493,0.38
WRAP 481,-0.38
RDA 506,0.38
WRAP 494,-0.38
RDA 519,0.38
WRAP 507,-0.38
RDA 532,0.38
WRAP 520,-0.38
RDA 545,0.38
WRAP 533,-0.38
RDA 558,0.38
WRAP 546,-0.38
WRAX REG2,0.0000000000
;------ Chirp
RDAX REG2,0.5000000000
RDA 571,0.38
WRAP 559,-0.38
RDA 584,0.38
WRAP 572,-0.38
RDA 597,0.38
WRAP 585,-0.38
RDA 610,0.38
WRAP 598,-0.38
RDA 623,0.38
WRAP 611,-0.38
RDA 636,0.38
WRAP 624,-0.38
RDA 649,0.38
WRAP 637,-0.38
RDA 662,0.38
WRAP 650,-0.38
RDA 675,0.38
WRAP 663,-0.38
RDA 688,0.38
WRAP 676,-0.38
RDA 701,0.38
WRAP 689,-0.38
RDA 714,0.38
WRAP 702,-0.38
RDA 727,0.38
WRAP 715,-0.38
WRAX REG3,0.0000000000
;------ Output
RDAX REG3,1.0000000000
WRAX DACL,0.0000000000
RDAX ADCL,1.0000000000
WRAX DACR,0.0000000000



DL
Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer

Digital Larry

Quote from: deadastronaut on July 29, 2021, 10:50:16 AM
whilst im here it would be nice to have an FV-1 BLOCK DIAGRAM PATCH page....(for us dumbass non programmers ) :)
What do you want exactly?
Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer

deadastronaut

Hi larry....like a library of images of the block diagrams...using different effects .like i posted above, for us non programmers to tinker with...
https://www.youtube.com/user/100roberthenry
https://deadastronaut.wixsite.com/effects

chasm reverb/tremshifter/faze filter/abductor II delay/timestream reverb/dreamtime delay/skinwalker hi gain dist/black triangle OD/ nano drums/space patrol fuzz//

Digital Larry

Quote from: deadastronaut on August 02, 2021, 12:58:31 PM
Hi larry....like a library of images of the block diagrams...using different effects .like i posted above, for us non programmers to tinker with...

Just making sure you're aware of this resource...

https://mstratman.github.io/fv1-programs/

Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer

Digital Larry

#16
I did a bit of messing around with the chirp and filtering.  If you don't "straighten the chirp" then you get a downward sweeping chirp which actually has more energy in it, the end result sounding more like a "thud".  You can see this very clearly in the waveform view as well.  The view below is not normalized!  That is one loud thud.




I'd say there's a huge impact of the DC/low freq chirp straightening that you can see even just using the 2P SVF as a simple crossover prior to the chirp chain.  In case it's not clear what those crescent shapes mean in the graph, it is showing that certain frequencies take way longer to go through the filter than others.  If you limit it to the range inside the rectangle, that frequency sweeps up as time goes to the right.  Low frequencies come through sooner and you hear "pwip" which is the sweep upwards.

What I did was to record a hand drawn rectangular click about 10 msec long into one channel of a WAV file at 32768 Hz in Audacity, then ran it through SpinCAD's Simulator in ->File mode.  Be sure to set the output file name and path first.  Then I looked at this in Audacity.  Select both the click in one channel and the chirp in the other channel.  The chirp is probably very soft by comparison.  Do "Effect->Normalize" and select the option to normalize the channels independently.  Now the chirp is very loud and you can hear exactly what it it doing.





Also, note that the chirp block has a default 6 dB cut coming in.  If you daisy chain these set the downstream ones to 0 or it gets REAL quiet.  That cut is mostly to avoid clipping for higher all pass coefficients.

I really suggest this hands-on experiment for those interested in spring reverbs.

Another thing that bears messing with is the spread of the chirp and all pass tuning.  I think Don Stavely's code used a series of increasing all pass lengths, maybe 5 different ones?  I don't remember.  This is going to spread out the tuning.  I'd try setting them all the same and see what happens.  Note that spring reverb manufacturers added more springs to make them LESS springy.  Of course that is a different sound.  Try them all!

Here's one I came up with.  I'm trying to go for maximum chirp so everything else is secondary.  You can get quite a variety of tones by setting the stretch value to different things.  I tried settings between 12 and 25.  There are, as usual, a million possibilities.

Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer

Digital Larry

#17
I think this one is pretty good.  Feel free to extrapolate.  It's too bad you can't practically do chirp tuning using a pot.  This pushes the limit on instructions as it is.




; mega-chirp-lpf.spcd
; Patch saved from SpinCAD Designer version 1023
; Pot 0: Delay feedback
; Pot 1: Delay time
; Pot 2: Chirp Crossover
; Spring reverb simulation using chirps by Gary Worsham
; Following Julian Parker's paper on spring reverbs (extremely loosely)
; ----------------------------
;------ Input
;------ Pot 2
;------ Feedback Output
;------ Pot 0
;------ Scale/Offset
RDAX POT2,1.0000000000
SOF 0.6500000000,0.3500000000
WRAX REG1,0.0000000000
;------ SVF 2P
SOF 0.0000000000,0.0000000000
RDAX ADCL,1.0000000000
RDAX REG4,-1.0000000000
RDAX REG3,-1.0000000000
WRAX REG2,0.2919356633
MULX REG1
RDAX REG3,1.0000000000
WRAX REG3,0.2919356633
MULX REG1
RDAX REG4,1.0000000000
WRAX REG4,0.0000000000
;------ Mixer 2:1
RDAX REG2,1.0000000000
WRAX REG5,0.0000000000
RDAX REG0,1.0000000000
MULX POT0
RDAX REG5,1.0000000000
WRAX REG5,0.0000000000
;------ Chirp
RDAX REG5,1.0000000000
RDA 22,0.67
WRAP 0,-0.67
RDA 45,0.67
WRAP 23,-0.67
RDA 68,0.67
WRAP 46,-0.67
RDA 91,0.67
WRAP 69,-0.67
WRAX REG6,0.0000000000
;------ Chirp
RDAX REG6,1.0000000000
RDA 114,-0.68
WRAP 92,0.68
RDA 137,-0.68
WRAP 115,0.68
RDA 160,-0.68
WRAP 138,0.68
RDA 183,-0.68
WRAP 161,0.68
RDA 206,-0.68
WRAP 184,0.68
RDA 229,-0.68
WRAP 207,0.68
RDA 252,-0.68
WRAP 230,0.68
RDA 275,-0.68
WRAP 253,0.68
RDA 298,-0.68
WRAP 276,0.68
RDA 321,-0.68
WRAP 299,0.68
RDA 344,-0.68
WRAP 322,0.68
RDA 367,-0.68
WRAP 345,0.68
RDA 390,-0.68
WRAP 368,0.68
WRAX REG7,0.0000000000
;------ Chirp
RDAX REG7,1.0000000000
RDA 413,0.76
WRAP 391,-0.76
RDA 436,0.76
WRAP 414,-0.76
RDA 459,0.76
WRAP 437,-0.76
RDA 482,0.76
WRAP 460,-0.76
RDA 505,0.76
WRAP 483,-0.76
RDA 528,0.76
WRAP 506,-0.76
RDA 551,0.76
WRAP 529,-0.76
RDA 574,0.76
WRAP 552,-0.76
RDA 597,0.76
WRAP 575,-0.76
RDA 620,0.76
WRAP 598,-0.76
RDA 643,0.76
WRAP 621,-0.76
RDA 666,0.76
WRAP 644,-0.76
RDA 689,0.76
WRAP 667,-0.76
WRAX REG8,0.0000000000
;------ LPF 1P
RDAX REG8,1.0000000000
RDFX REG10,0.4856542549
WRAX REG10,0.0000000000
;------ Pot 1
;------ Scale/Offset
RDAX POT1,1.0000000000
SOF 0.6500000000,0.3500000000
WRAX REG11,0.0000000000
;------ LPF 1P
RDAX REG10,1.0000000000
RDFX REG13,0.4623153623
WRAX REG13,0.0000000000
;------ LPF 1P
RDAX REG13,1.0000000000
RDFX REG15,0.4856542549
WRAX REG15,0.0000000000
;------ ThreeTap
RDAX REG15,1.0000000000
WRA 690,0.0
CLR
OR $007FFF00
MULX REG11
SOF 0.1665863037,0.0289398193
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG16,0.0000000000
CLR
OR $007FFF00
SOF 0.0529744446,0.0229602478
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG17,0.0000000000
CLR
OR $007FFF00
SOF 0.1420981171,0.0276509674
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG18,0.0000000000
;------ Mixer 2:1
RDAX REG16,1.0000000000
RDAX REG17,1.0000000000
WRAX REG19,0.0000000000
;------ FB In 2
RDAX REG18,-1.0200000000
WRAX REG0,0.0000000000
;------ Output
RDAX REG4,1.0000000000
RDAX REG19,1.0000000000
WRAX DACL,1.0000000000
WRAX DACR,0.0000000000
Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer

Digital Larry

#18
Here's another variation that smooths out the reverb tail.  Playing with the all pass coefficient makes a big difference, Turn it down for a lumpier sound.  Unfortunately the more stuff that goes in to fine tune the sound, the fewer chirp all passes you can put in.  If you ask me, it needs WAYYY MOAAARRRRRR CHIRRRRRPPPPPP.  After messing around with this, I don't know if it's particularly springy or not, but it seems capable of making a variety of interesting ambient sounds.  I just sort of made it up too!   8)




; mega-chirp-lpf.spcd
; Patch saved from SpinCAD Designer version 1023
; Pot 0: Delay feedback
; Pot 1: Delay time
; Pot 2: Crossover
; Spring reverb simulation using chirps by Gary Worsham
; Following Julian Parker's paper on spring reverbs
; ----------------------------
;------ Input
;------ Pot 2
;------ Feedback Output
;------ Pot 0
;------ Scale/Offset
RDAX POT2,1.0000000000
SOF 0.6500000000,0.3500000000
WRAX REG1,0.0000000000
;------ SVF 2P
SOF 0.0000000000,0.0000000000
RDAX ADCL,1.0000000000
RDAX REG4,-1.0000000000
RDAX REG3,-1.0000000000
WRAX REG2,0.2919356633
MULX REG1
RDAX REG3,1.0000000000
WRAX REG3,0.2919356633
MULX REG1
RDAX REG4,1.0000000000
WRAX REG4,0.0000000000
;------ Mixer 2:1
RDAX REG2,1.0000000000
WRAX REG5,0.0000000000
RDAX REG0,1.0000000000
MULX POT0
RDAX REG5,1.0000000000
WRAX REG5,0.0000000000
;------ Chirp
RDAX REG5,1.0000000000
RDA 15,0.46
WRAP 0,-0.46
RDA 31,0.46
WRAP 16,-0.46
RDA 47,0.46
WRAP 32,-0.46
RDA 63,0.46
WRAP 48,-0.46
RDA 79,0.46
WRAP 64,-0.46
RDA 95,0.46
WRAP 80,-0.46
RDA 111,0.46
WRAP 96,-0.46
RDA 127,0.46
WRAP 112,-0.46
RDA 143,0.46
WRAP 128,-0.46
RDA 159,0.46
WRAP 144,-0.46
RDA 175,0.46
WRAP 160,-0.46
RDA 191,0.46
WRAP 176,-0.46
RDA 207,0.46
WRAP 192,-0.46
RDA 223,0.46
WRAP 208,-0.46
RDA 239,0.46
WRAP 224,-0.46
WRAX REG6,0.0000000000
;------ Chirp
RDAX REG6,1.0000000000
RDA 255,0.55
WRAP 240,-0.55
RDA 271,0.55
WRAP 256,-0.55
RDA 287,0.55
WRAP 272,-0.55
RDA 303,0.55
WRAP 288,-0.55
RDA 319,0.55
WRAP 304,-0.55
RDA 335,0.55
WRAP 320,-0.55
RDA 351,0.55
WRAP 336,-0.55
RDA 367,0.55
WRAP 352,-0.55
RDA 383,0.55
WRAP 368,-0.55
RDA 399,0.55
WRAP 384,-0.55
RDA 415,0.55
WRAP 400,-0.55
RDA 431,0.55
WRAP 416,-0.55
RDA 447,0.55
WRAP 432,-0.55
WRAX REG7,0.0000000000
;------ Pot 1
;------ Scale/Offset
RDAX POT1,1.0000000000
SOF 0.6500000000,0.3500000000
WRAX REG8,0.0000000000
;------ LPF 1P
RDAX REG7,1.0000000000
RDFX REG10,0.4623153623
WRAX REG10,0.0000000000
;------ LPF 1P
RDAX REG10,1.0000000000
RDFX REG12,0.4856542549
WRAX REG12,0.0000000000
;------ ThreeTap
RDAX REG12,1.0000000000
WRA 448,0.0
CLR
OR $007FFF00
MULX REG8
SOF 0.1724071991,0.0219219635
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG13,0.0000000000
CLR
OR $007FFF00
MULX REG8
SOF 0.1146304825,0.0188810837
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG14,0.0000000000
CLR
OR $007FFF00
MULX REG8
SOF 0.1286593338,0.0196194443
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG15,0.0000000000
;------ Mixer 2:1
RDAX REG13,1.0000000000
RDAX REG14,1.0000000000
WRAX REG16,0.0000000000
;------ Allpass
RDAX REG15,1.0000000000
RDA 7148,0.69
WRAP 6816,-0.69
RDA 7597,0.69
WRAP 7149,-0.69
WRAX REG17,0.0000000000
;------ Output
RDAX REG4,1.0000000000
RDAX REG16,1.0000000000
WRAX DACL,1.0000000000
WRAX DACR,0.0000000000
;------ FB In 2
RDAX REG17,-1.0000000000
WRAX REG0,0.0000000000

Digital Larry
Want to quickly design your own effects patches for the Spin FV-1 DSP chip?
https://github.com/HolyCityAudio/SpinCAD-Designer