recursive patching
i was thinking about "recursive patching" lately, meaning to call an abstraction inside of an abstraction inside of an abstraction inside of an abstraction inside of an abstraction inside of an abstraction and so on.
It is clear to me, that this has to be done with dynamic patching in order to stop the process at some point. So the question is not how to implement this, but in what case something like this could be useful? Do you know of any "recursive" patches? The only thing i can think about are reverberators and i actually tried this using a feedback-delay line inside of a feedback-delay line inside of a feedback-delay line inside of a feedback-delay line inside of a feedback-delay line inside of a feedback-delay line feedback-delay line inside of a feedback-delay line inside of a feedback-delay line.. with rather unimpressive results.
Any ideas?
Calculating Resonance for Delay
@s.elliot.perez "comb filter" refers to 2 simple delays: 1 where you delay the incoming signal, multiply it, and add it to itself (no feedback) and 1 where you take the output, delay it, multiply it and then add it to the input to create the new output (this is the classic "echo" effect and what we generally think of when we think of the "delay" effect with feedback)
the fundamental frequency is equal to the inverse of the delay length (e.g. if your delay length is 1 ms your frequency will be 1000 hz). I don't think the bandpass filters should affect it too much.
in this situation, the delays are feeding back into each other so it's more complex than a simple comb filter. However, the frequencies should still depend on the delay times like that.
Interesting side note: all digital filters can be deconstructed into these 2 simple building blocks, except that they use 1 sample instead of milliseconds or seconds. The feed forward one is called a "zero" and the feedback one is a "pole". This is because the space between the peaks of the comb filter is the inverse of the delay time. So, if you set the delay time to 1 sample you get a "peak" width of the entire spectrum up to the sample rate.
I think you did it right, but you might need to lower your block size within a subpatch to get lower delay times than 64 samples (~1.45 ms @44.1k) also..
and/or do the stuff in the helpfiles G04.control.blocksize.pd and G05.execution.order.pd where you can
Installing Sound Design Toolkit (SDT)
@polyphuckin Are you using windows? The following (probably) if you are.
The frameworks stuff says it is the documentation. You need to just open index.html from the doc/html folder to read that. But there could be more to it. I don't know....
1st..
Pd paths and eccentricities.
I doesn't really matter where you put things, but Pd needs to find them.
In this case the (dot)dll's need to be loaded as libraries (or at least one of them does.... please let us know when you find out more..!!).
Unfortunately Pd expects the DLL to have the same name as the library folder (ONLY for libraries like Gem and Zexy that must be loaded at startup), or it will not find it. It will only look for STD.dll or STD.i386 or STD.darwin in the STD folder......

The author has named the folders so that you know which one you want, but that messes it up for the installation.
The folder STD_PD has STD.dll inside so needs to be renamed STD
The folder Win32 has libSTD.dll inside, so needs to be renamed libSTD
Then startup paths need to be set to those folders (it really doesn't matter where they are).
Then startup flags must be set to load the libraries........ -lib libSTD and -lib STD
Don't forget to restart Pd as it loads the libraries only as it starts..
And then, as if by magic, you can remove the declarations -lib in the startup preferences and it will work forever, even for other (32-bit) versions of vanilla.
Annoying.
Actually I think libSTD.dll probably is for other api's to use, and it belongs in the windows "sytem32" folder, but I am unsure. Maybe email the authors through the page you posted.
You do not need to copy SDT.dll outside its folder, as I did in the screenshot.
David.

Proof.........
The message below [r pd] needs to be clicked, and dsp needs to be on.
I have checked this file but no others.
If you want help files to be found then you might need to do more. Placing the library STD directly in the "extra" folder might solve that. I didn't.........

Play buffer from beginning with delread~
@Seán The audio is travelling through the delay line in real time.
You would need a delwrite delay longer than what you are recording to be sure to capture the whole first recording.
You need to feed the output of delread back into delwrite, so that it can be played again.
You would need a timer so as to set delread to the right length for the second read (so that it starts at the beginning).
You would need to use [switch~] to stop all audio in your patch as you end recording and so that you can start the delay line again when you press play......... otherwise the audio will drop down the delay line before you do so........... unless you program it to start again immediately.
You will need to do the fade after delread and not fade what you feedback into delwrite, or you will double down on the fade the second time around.
BUT.
Because the delay line read point for delread has to be longer than the recording, delread will in fact still be feeding back audio to delwrite after you have finished recording.
So you will have to let it finish.
But you can still read the correct output with a second delread.
Do that, and put it into a second delay line of the absolute correct length (now that you know it) and that will become your delay loop, with feedback as above.
All of that can be automated of course.
David.
Reverberation
Ok, so, I've cleaned up both the verbs abstractions. And fixed a bunch of errors I wasnt aware about. Took going through the guts of all to discover all my sloppyness.
jVerb1.2 changelog:
- Added one preset
- Fixed delay time calculation in the [delay~] abstraction
- Reduced sends and throws etc (see later discussion)
- Changed [vline~] to [line~]
- Fixed a bug with the control subpatch not sending correct gain messages for the APNs
- Changed se S control from binary to "analogue"
- Added pseudorandom seeding (using $0) for all delay modulation
Schroom1.2 changelog:
- Using the a lot of the same abstractions, a lot of the same changes apply. Basicially the APNs and below.
- added a missing abstraction which rendered the patch useless. The [xfade~] providing crossfade between natural verb and beefcake. I'm sure the smart ones of you made one up on the fly.
Now, about reducing sends/receives or throw/catches. The signal flow in jVerbs matrix go like this: https://imgur.com/a/cE3b0gi
If I substitute the receives and throws for direct lines I get "DSP loop detected" error messages. I suspect I can do away with that by putting the delreads at the junction outputs outside their abstractions, but I'm too tired to try now.
Oh, and I get this error message whenever I open the jverbdemo patch: "$2: argument number out of range". I've not been able to locate the error...
For those interested in the jVerb algortihm, I'll try to elaborate on the design. First of all you need to wrap your head around the idea of the Kelly-Lochbaum scattering junction. I think there's even an object in extended modelling it. My own version is highly modified, but I'll get to that later. Here's the primer on KL-junctions: https://ccrma.stanford.edu/~jos/pasp/Kelly_Lochbaum_Scattering_Junctions.html
As you can see from my flow diagram above, that is the primary building block in jVerb. The second one is Schroeder allpass nests, which also form the essential guts of Schroom.. Neat diagram + discussion can be found here: https://valhalladsp.com/2009/05/30/schroeder-reverbs-the-forgotten-algorithm/
The things not explained in my ms-paint flow chart are the stuff I added to jVerb in order to get rid of metallic ringing and out of control feedback. You can still tweak the patch to do both if that's your thing.
First of all, each allpass nest has a slowmo random modulator on the outer delay loop, with a low amplitude (300 ms, 11 samples).
Second all junctions are provided with a fixed delay plus a randomly modulated delay on each output.
This is all to avoid metallic ringing.
Third, there is a gain control on the inlet of each junction. This is pretty essential in preventing nasty build ups. If you play around with it you'll see that the junction gain is what saves your headphones (and ears).
Finally, there's a cross fade function between the two inlets of each junction. This pretty much destroys the original equation, but can produce some very interesting results.
The latter two are controllable.
You might wanna try adding some filters to the chain or constructing your very own matrix of junctions and nests.
If I spend more time on jVerb, it will be adding delay tuning like Schroom has and maybe optional individual controls for each junction... Dunno.
Post your own mods if you like
for your consideration and/or exjoyment
1st test of my 3d whammy
with
my steel string
an upgraded piezo
to a 35 mm piezo and
much better housing
the stack being:
delay to delay to delay
roll to delay time 1
pitch to delay time 2
and
yaw to delay time 3
and sometimes
roll, pitch, yaw connected to
feedback1,2,3 respectively
MobMuPlat Ready Effects Collection (i.e. 30 Vanilla-compliant MMP effects) w GUI
"The PD trees sometimes bear unexpected fruit."
The zip below includes 29+1(raw) standardized effects (esp.) for use with MobMuPlat.
They all work and have been standardized in the following manner:
- all are MMP-compliant (so include only objects which MMP supports)
- have 3 inlets and 1 outlet~
- the inlets are (from left to right): the incoming signal (i.e. inlet~), the parameters(3), and a switch~
- the effects have all been finessed to only include <= 3 parameters
- the parameters are sent to the second inlet via [0 $1(, [1 $1(, and [2 $1(
- the switch is a toggle so 0|1
and - each window is 186x116 pixels.
I have included an .mmp file to listen to and test them with either adc~ | randomnotes. It also includes a bypass toggle , three parameter knobs (which load the parameter name to each label once an effect is chosen), and a gain. Only the selected effect's switch is turned "on" so it is very low on the cpu.

The MMP file, in and of, itself may prove useful to someone as it packages in a single place a 30-effect "pedal-box".
That however is not why I am sharing it.
Since the effects are standardized and mmp-compliant, my hope/thinking is others may include them in their work no matter what it may be and thus build their patches, apps, etc., using the effects as building-blocks.
I have accredit the original effects designers by adding a suffix (in parenthesis) to each effect as follows (in alpha-order):
d=DIY2 Collection
g=Guitar Extended
s=Stamp Album Collection
v=scott vanya (me)
The included effects (basically the best I could find that lent themselves to 3 parameters) are as follows:
audioflow(v).pd
beatlooper(v).pd
bodyresonance(d).pd
chorus(s).pd
delay(3tap)(d).pd
delay(fb)(d).pd
delay(pitch)(v).pd
delay(push)(v).pd
delay(revtap)(g).pd
delay(spect)(d).pd
delay(stag)(v).pd
delay(tbr)(v).pd
delay(wavey)(v).pd
detuning(g).pd
distortion(d).pd
filter(s).pd
flanger(s).pd
hexxciter(g).pd
looper(fw-bw)(v).pd
octaver-harmonizer(p).pd
phaser(s).pd
pitchshifter(d).pd
reverb(pure)(d).pd
ringmod(g).pd
shaper(d).pd
stepvibrato(g).pd
streamStretch(v)-help.pd
streamStretch(v).pd
tremolo(d).pd
vcf(d).pd
vibrato(d).pd
vibrato(step)(g).pd
wah-auto(v).pd
wavedistort(d).pd
Note: there are too many effects to go into detail about what each parameter does. So I leave that for you to either figure out/discover on your own or post here your question and I will answer it as time/energy/etc allow.
Peace and Loving Music Through us all.
Sincerely,
Scott
ArguScore
Here is an updated version
arguscore-update.zip
and a few Purr Data compatibility replacement objects: purr-data-compatible-replacements.zip
A creation argument only object driven system for instant music making;
Objects so far;
Required;
globaltimer - outputs a 10ms bang to drive all objects;
globalsync - resets all objects to zero or start;
audio~ - dac~ catcher~ for all throws~, output level, mute;
Sound Objects
By default sound objects start playing at the bpm of the first argument
basspump - args - bpm note distortion duration
wood - args - bpm note duration
tremsaw - args - bpm note vibrato distortion duration
tremsine - args - bpm note vibrato noise duration
noisy - args - bpm note vcfq duration
kauplus - args - bpm note string-resonation duration
Effect Objects
sqr - args - 16 required(0 or 1) bpm (starts playing by default)
overides sound objects autoplay
2 optional args for cursor offset and pitch if font different
has 16 outlets to send 0 or 1
echo-delay-bpm - args - bpm feedback(0 to 100) level(0 to 100)
echo-delay-ms - args - millisecs feedback(0 to 100) level(0 to 100)
pan-level - args - pan (-100 to 100) level (0 to 100)
autopan - args - width (0 to 100) frequency (* 0.01) level (0 to 100)
fade - args - millisecs to fade-in pecentage of level to drop to (0 to 100) millisecs to fade-out
filter - args - highpass (midi note to frequency) lowpass (midi note to frequency)
(0 to 135 equates to approx 8Hz to 19912Hz)
start-delay-secs - args - seconds (delays the autostart of the connected object)
start-delay-bpm - args - bpm (delays the autostart of the connected object)
stop-delay-secs - args - seconds (outputs a one at the end of the delay which can connect to a globalsync)
stop-delay-bpm - args - bpm (delays the autostart of the connected object)
isolator - sits between two sqr's and sends a signal to start/stop the receiving sqr
seqnotes - four pairs of note & velocity that receive sqr ones to fire a connected sound object
Notes
Can crash Pd when making lots of edits to arguments, particularly while playing, so save often
There is a [declare -path objects] hiding behind the audio~ object
Fixed missing note and velo message for tremsaw
Two more arguscore patches can be open at the same time providing only one patch contains the globaltimer and audio~ objects (see arguscore-2.pd and arguscore-2-b.pd)
new objects
kauplus, autopan, fade, filter, stop-delay-secs, stop-delay-bpm;
Audio Ideas (AI) Collection (placeholder, currently only links)-effects, controllers, mmp, etc.
Audio Ideas (AI) Collection (placeholder) currently only links
per @LiamG 's kind suggestion I have begun the process of consolidating my abs and patches, etc. into a single location/zip file or for possible upload to github.
Just to get the ball/me rolling and scope the work I got the links for my shares into a single location to later be consolidated into the single AI Collection.
For now at least, please, bare with me (and the links below) as ideas I am more passionate about currently are demanding my attention. (Which
funnily enough will probably also be included in the set, where ever they are shared.)
Thanks, for your patience and all you do for the Pure Data Family.
Sincerely,
Scott
abstract~
pushdelay-envelope-env-driven-delay-line-with-both-delay-time-and-feedback-dependent
numpad-abstraction-for-entry-of-large-numbers-via-click-instead-of-sliders-includes-basic-calculator
abs_delay_fbw-feedbackwards-lifo-last-in-first-out-delay
abs_sequences_by_formula-sequences-by-formula-abstraction-ex-collatz
abs_effects_router-60-effects-in-one-abstraction-router-from-diy2-stamp-album-my-abs
visualcontrolsurface-vsl-values-set-by-their-location-on-the-screen-req-ggee-shell
abs_4-8-14_way_toggle-pair-2-toggles-resulting-in-4-8-or-14-states
audioflow-delay-to-forward-backward-looper-using-speed-control
5-band-equalizer-with-bezier-controller-eq5_mey_w_bezier_sv-pd-updated-to-8-band-below
forward-backward-looper-orig-abs-from-residuum-whale-av
abs_rgb2hex-rgb-0-255-colors-to-hexadecimal-values
pseudo-12-string-effect-6-string-guitar-to-sound-like-a-12-string
jack_midi2pd_2sys_connector_sv-jack-midi_out-to-pd-sys_playback-switcher
abs_4to16pads_bin_conv_sv-convert-4-midi-pads-from-a-binary-value-to-a-decimal-for-rerouting
abs_automatedslider_sv-automated-control-changer-pd-and-mobmuplat-editor-versions
idea-for-effects-stack-ing-technique-control-mother
micin-_abs-abstraction-convert-signal-to-notein-ex-using-a-midi-synth-as-a-guitar-pedal
curve_abs-tri-way-curve-switch-to-change-control-values-in-either-linearly-convex-or-concave-manner
a-preset-control-abstraction-for-saving-parameters-presets-to-text-files
4-tap-delay-with-pitch-shifter-per-delay-line-adaptation-of-diy2-patches
patch~
extra
the-15-owl-faust-patches-compiled-as-32bit-linux-externals-attached
libpd
mmponboardeditortemplate-mmp-for-creation-of-mobmuplat-files-directly-on-the-handheld-android-only
3d-synth-webpd-tree-js-webgl_camera_cinematic-html-example
Off topic
Load Libraries, plug-ins
@Balwyn I've follow your steps but still nothing this is what i got in the console:
'pd-gui' connecting to 'pd' on localhost 5400 ...
------------------ done with main ----------------------
Default font: DejaVu Sans Mono
tried ./Gem.m_i386 and failed
tried ./Gem.dll and failed
tried ./Gem/Gem.m_i386 and failed
tried ./Gem/Gem.dll and failed
tried ./Gem.pd and failed
tried ./Gem.pat and failed
tried ./Gem/Gem.pd and failed
tried C:/Users/Jose/pd-externals/Gem.m_i386 and failed
tried C:/Users/Jose/pd-externals/Gem.dll and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.m_i386 and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.dll and succeeded
C:\Users\Jose\pd-externals\Gem\Gem.dll: couldn't load
tried C:/Users/Jose/pd-externals/Gem.pd and failed
tried C:/Users/Jose/pd-externals/Gem.pat and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.pd and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.m_i386 and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.dll and succeeded
C:\Users\Jose\pd-externals\Gem\Gem.dll: couldn't load
tried C:/Users/Jose/pd-externals/Gem/Gem.pd and failed
tried C:/Users/Jose/pd-externals/Gem/Gem.pat and failed
tried C:/Users/Jose/pd-externals/Gem/Gem/Gem.pd and failed
Gem: can't load library
Loading plugin: C:/Program Files (x86)/Pd/tcl/pd_deken.tcl
The Pd window filtered 26 lines
The Pd window filtered 27 lines





