The GenEcho by StochKit was part of a small collection of very glitchy Stochastic Synthesizers some 6 years ago during VCVs beta phase (v0.6?). After seeing Grandy brought back by Shortwav Lab as ReGrandy, I remembered the GenEcho Sampling Effect and how much I loved it.
The GenEcho adds noise, clicks and pops by design and is notoriously bad at handling high input signal levels.
GenEcho indefinitely repeats the sampled input until it is either reset or a new sample is taken (via trig/gate input).
I could add a VCA function so its effect could be gated.. or a length knob so it will stop after a certain time.. alternatively a wet/dry could be implemented.
Would you use this glitchy-ass sampler and if yes what features do you think you’d want?
Adding a simple Low-Pass-Filter to address some of the noise maybe?
Probability for the sample trig/gate input?
Any ideas or requests before I start designing a panel?
I looked at the code and only found a way to pitch octaves up.
idx = (idx + 1) % sample_length;
(idx + 2) % sample_length;
would be an octave up, +3 two octaves etc.
but since this needs whole numbers and 1 is the lowest it can get I don’t see a way to pitch the buffer down.
Anyone else who can look at the code and sees a better method?
yeah.. already looked at resample.cpp - but that’s beyond me. If anyone feels like writing the few lines of code: much appreciated. Else I’ll just stick to adding 2-3 octaves up.
@VirtualModular since its not possible to add a vari-speed I’ll add a knob to set the octave and an input to trigger/gate it. Using clock divisions or dedicated gate patterns sounds more intuitive and playable.
Funnily just last week I was working on a very similar effect in the Surge team context (not a VCV module). It was written by Claes (og Surge dev now of Bitwig fame) back in I don’t even know 2007 or something.
Anyway, it had a strategy for avoiding clicks in which after receiving the trigger to re-sample a loop (input crossing a threshold in this case) it would wait for a zero crossing in the input, and also after the loop time has passed it would look for another one to close the loop. It didn’t work very well but I thought the idea was nice so I improved it and now it’s working pretty nicely! Reduces clickiness by a lot since the start/end of each loop join together neatly, at the expense of some timing accuracy. If you feel like that would be useful to you I can pass you a link.
That sounds interesting, glitchy samplers are fun but I would also like one that doesn’t click! It would be particularly useful for processing live guitar.
@JohannAsbjoernson I would love to help, but I’m terrible at coding and don’t know any C. Maybe I should start learning, but making my own modules seems like a step too far! Although having said that, I do have some ideas…..maybe it’s the logical progression.
Great idea. Yes, send away.
I’ll def. try to add this - and the option to turn it on or off in case anyone is bothered by the delayed timing.
The less filtering/EQing/slewing needed the better.
Yeah I was hoping for one of the professionals to help us out. I started to learn a bit of C++ for the Rack SDK out of desperation. Back then a lot of modules didn’t support polyphony and there were hardly any utilities for polyphonic signals… so I made polyphonic versions of existing modules and started adding functionality I wanted (like probability, a knob to set number of output channels etc.) for my personal use. Then I made some utilities and sequencers to replace annoyingly complicated logic/divider/RNG chains, custom bursts, switches, clocks, a poly fader.. most of which exist as polished modules in the library now.
Since there are almost no tutorials specific to coding for VCV and just randomly learning C++ won’t get you anywhere anytime soon.. learning is incredibly inefficient and hard. Its just grinding through source code of modules and making sense of the often incoherent approaches each creator takes. I doubt that I’d still pick it up today with all these amazing modules available. Now that I’ve learned it to this extend (amateur-ish) I wanna make use of it sometimes at least.
So every few months I sit down and work on something.. like the GenEcho, or an extended Version of the N1 Sequencer.
I can’t recommend trying to learn Rack-SDK C++ on your own unless you are incredibly bored.
I always wanted to put together a series of tutorials to teach what little I know… but doing it in text form was way too much work. Unless anyone (maybe someday me but with Video) puts out a comprehensive workshop/tutorial on it.. don’t bother. Learn soldering and teensy instead. You’ll have 3 MIDI-Controllers, 2 Eurorack VCOs, an LFO and a Filter Bank in a few months..instead of a bunch of badly designed shoddy VCV modules.
The process blocks and the zerocrossingfinder class down below is what you might take interest in. It still does a bit more branching than I’d like but it’s tricky to avoid in an effect like this.
I added my own (less sophisticated) blend for a zero crossing along with a slight crossfade.
An oct +1/+2 knob has been added.
Its less noisy now but clicks are still audible at short sample times.
I am considering removing the accumulation, breakpoint, mirror and envelope functions at this point.. they are still useful to add accumulating gnarl and distortion but I’m not sure if anyone would use them much. This could just as well turn into a simple glitch repeater.. with wet/dry and vcamps for input and output.
Here’s a video of clean samplings with the added changes:
A Video with the gnarly functions will follow shortly.
Here is the GenEchos accumulating distortion which is added with every breakpoint (a division of the sample). As I understand it:
It affects the samples at the breakpoint positions for the breakpoint length by adding the set amount of amplitude with each loop - amplitude rises to infinity (currently clamped at 7v).
While the accumulating distortion is a nice idea.. it doesn’t mesh well with the noise reduction and should maybe just disappear altogether. Any suggestions?
This is my revamped suggestion for the GenEcho:
4HP Panel, Stereo, Sample length: 48000, Sample length CV, Master Gain, Restart Sample, Delete Sample, Gated Octave up (+1 or +2), Wet/Dry with CV
Noise reduction: Through-Zero-Crossing for start of recording [L input] // Slew for end of recording [L&R])
I will wait a while longer if someone still has ideas they want implemented.
The code contains now quite a few obsolete parts but runs stable and doesn’t eat much CPU.. so I will likely keep the base code mostly intact.
Unless more requests come in: This is it! A simple and hardware friendly glitch delay!
I’ve looked into it for a bit.
Looks like it would be possible - if I get the Meta SDK working and don’t get unsolvable errors. GenEcho is waiting for approval for library release currently and if after release there are no bug reports, I will look into the meta module port.
You can download GenEcho here: Release Release v2.3.2 · JohannAsbjoernson/Sulamith · GitHub
Check it out and if you’re still interested in getting it to Meta give me a heads up.