Benjolin Clone
  • This is my attempt to recreate Rob Hordijk's Benjolin. It features two oscillators, a rungler circuit, and a state variable filter. It has all the outputs and controls of the original. As in the original, the toggle switches the loop knob in and out. If the loop knob is switched in, if the sum of the loop knob and the CV input below it exceeds 0.7 the rungler will enter loop mode. If the knob is switched out the CV alone controls the loop. There are a couple of internal trims as well. There is an adjustment of the mix between the rungler and PWM signals and the filter has a tanh() node in the feedback loop which can be adjusted for mix and drive. I didn't include CV inputs for the oscillators and filter since the knobs can be modulated directly.
    STS Benjolin V1.audulus
    145K
    Screen Shot 2017-10-21 at 1.27.27 PM.png
    2360 x 1738 - 794K
  • Lots of useful outputs for aleatoric sound design!
  • I've been fooling around with this all afternoon. Lots of fun sounds! I took your advice and fed it into a couple of the all-pass reverbs and it sounds like every b grade sci-fi movie from my youth.
    STS Benjolin V1.audulus
    288K
  • Which is the ultimate goal, right? Honestly, we're going to need some spring reverb modeling before it truly sounds like a 1960's B SciFi
  • I saw a model of either a spring or plate reverb mentioned in one of the articles I was reading while we were fooling around with the reverbs. I'll have to see if I can find it again. I think of all the reverb variations I tried I like the one in the previous post the best. It's 5 all-pass in series with an initial delay and uses the all-pass topology for the wet/dry mix.
  • Wow, fantastic! I was putting together a simple µRungler with your new shift register for use in the Blippoo and wondering how best to solve the looping question (even though that’s not strictly needed for the Blippoo) – which it seems you’ve solved beautifully here. Looking forward to diving into this in more detail.
  • @Rudiger, something that that Rob Hordijk did in the Benjolin that you might find interesting. He XORed the input from oscillator B with the eighth bit of the register before feeding it into the data input. This would tend to break up the long all 1's sequences that the original Rungler would generate when oscillator A was running much faster than B. I haven't tried it in the Rungler but it would be a simple mod. The Benjolin doesn't seem to be quite as prone to getting stuck in a simple oscillation.
  • Yes, very interesting! By the way I was looking at the Rungler schematic on the hordijk-synths.info site and it seems as if there is an internal pulse from both VCO A and VCO running into the rungler core. (With the pulse from VCO B somehow driving the Density controls.) The same thing with the Blippoo schematic that I posted in the Rungler thread.

    Something else in that Blippoo schematic that I was wondering what your take on might be, is the similar dual (clock, I take it) inputs to the S&H in addition to the frequency from VCO 1.
  • Unfortunately the block diagram lacks a lot of detail. This was my primary reference when I constructed the rungler. Presumably the "pulse" from oscillator B into the rungler circuit is the data fed to the shift register since he mentions "Oscillator B produces a Triangle wave and provides the material for the shift register." There's no way to really tell what the sparse/dense/random switch does, but I suspect it does something similar to the density knob. It would be nice if we could find an actual wiring schematic rather than a block diagram, but there doesn't seem to be one available at least that I can find. I haven't looked at the blippoo box as yet. I know it has two rungler circuits instead of one. I'll have a look.
  • @Rudiger, like the block diagram for the Rungler, the one for the Blippoo box gives you the general idea, but is lacking in detail. I would guess that the top line running into the S&H is the clock and that the two inputs on the left coming from the oscillators are somehow combined before being fed to the S&H. Also there is no way to tell how the runglers are configured. From the diagram it looks like they are both clocked by A and fed by B, but that doesn't really make much sense. Mr. Hordjilk mentions in the description of the Rungler clock multiple registers clocking off the leading and trailing edges of the clock pulse, but there's no way to tell what going on here. I would clock one from A and feed it with B and clock the other from B and feed it with A.
  • I just discovered that my shift register design is unstable at audio frequencies. I’m not sure, but I think that maybe the S&H node is only processed every “chunk”. The flip-flops which make up the register are built from two S&H nodes that are triggered on the leading and trailing of the clock pulse. Perhaps when the clock is fast enough, they are both calculated on the same loop rather than sequentially. At this point I don’t see any fix for the issue. I discovered it while I was testing the loop function on the Benjolin. I ran oscillator A at low frequency and created a pattern and switched on the loop. I ran A up to high frequency and when I slowed it back down the pattern was gone. I tested the register in isolation and at high frequencies looping the data isn’t reliable. @Rudiger that may explain some of your results from the Rungler. I will continue to investigate alternative designs and I’ll post a fix if I come up with one. Ideas are welcome!
  • I may have found a fix for the register issue using a z-1 node between each flip flop. So far it seems to be working. I’ve modified the Rungler and Benjolin and I’m testing. The Turing machines use the same register design but aren’t typically clocked fast enough to be a problem. If this fix works I could modify one for high speed use.
  • Unit delay may be the thing to use for audio rate programming in general! If it works there, maybe it works for other situations where single sample data checking is required.
  • Since I already had some z-1 nodes in the filter and register feedback loop, it doesn't seem to have increased the CPU load significantly. The modified register seems to have fixed the problem.
  • As @Rudiger pointed out in the Rungler thread, the Rungler output is actually bi-polar whereas the out on my copy is uni-polar, between 0 and 1. Since I believe the most common use for the output will be for modulation, and the output can easily be scaled and offset for a -1 to 1 signal, I think I'll leave it as is.
  • I decided to modify the scaling on the internal Rungler signal to be more in line with the original, so internally it's now scaled from -1 to 1. The external output remains unchanged.

    10/23 10:40 PM - fixed resonance issue new file below
  • Cool! :)

    Some notes:

    You get white cables of Doom when Freq is Max and Res is Min.
    Happy Halloween (guess I'm early? I don't celebrate it).

    Why is the Reverb 100% Dry when Mix is max?
    At first glance I thought this muddy sound is a typical characteristic of the Benjolin. Never saw this behaviour. I was kind of confused, especially by all the things written in the forum about standards and stuff (uModular) lately...
  • I also had problems with the white cables of doom when approaching maximum/minimum on the frequency/res (or vice versa).
  • Unfortunately the digital implementation of the state variable filter I used is somewhat unstable at high frequencies (see http://www.earlevel.com/main/2003/03/02/the-digital-state-variable-filter/ ). According to the article the only solution is oversampling which isn’t an option at this point. I tried to adjust the controls so that it wouldn’t go off the deep end, but I obviously didn’t go far enough. Maybe I can cross wire the two knobs to keep it from occurring. As fas as the mix knob on the reverb, my bad, should have wired it the other way around.
  • I think I fixed the cables of death. Also reversed the mix control on the reverb
    STS Benjolin V3.1.audulus
    270K
  • Best Benjolin ever!
  • Thanks, I really appreciate the complement! I’m working on a piece at the moment inspired by one of the patterns it came up with a couple of days ago. I’m glad I recorded it, I haven’t been able to reproduce it since. I’ve been learning a lot about the finer points of working with Reaper. Not the most user friendly piece of software, but incredibly powerful once you figure it out. I haven’t found the Audulus plugin to be particularly stable, so at times I’ve used Soundflower to capture the audio from Audulus. I hope to have something to post in a few days.
  • I'm looking forward to it! I definitely know what you mean about not being able to reproduce the sound again. The benjolin is definitely a mercurial system.
  • If we don’t do something soon about tagsxb8, you’ll lose your top spot! Lol
  • I suddenly want to visit a korean online casino... Also kudos to @biminiroad for getting rid of the 250 posts (or however many) that they left.
  • @RobertSyrett lol yeah it's easy to just delete the user and their content in one go. Dunno what's happening there. Forum upgrade will prevent this from happening in future.

    @stschoen - love your patch! I'm just curious about the reverb - what's going on with the mix control? It seems like you have one knob balancing all these parameters, but why isn't it just a straight mix of the dry and wet signal? The reverb appears to disappear if you're fully one way or the other. Sounds nice though!
  • Drat, I probably screwed up the knob again. It should be 100% wet at one extreme. The feedback associated with the mix is designed to eliminate the phase cancellation that would result from a straight mix. It basically works the same as the all-pass reverberators. The circuits are from Schroeder’s paper at: http://charlesames.net/pdf/MRSchroeder/artificial-reverb.pdf
  • @stschoen - oooh nice that's brilliant! Thought there had to be some reason for it - knew something was different when I could hear it kinda tweaking the reverb when I adjusted the mix.
  • I checked and the reverb is wired according to Schroeder's diagram. When the knob is at the minimum you get 100% dry signal. When it's a max you get 100% wet (try turning up the delay). Interestingly, when it's at midpoint, the additional feedback from the outer feedback loop seems to add additional echos into the mix. Schroeder's original diagram only had a single all-pass within the external mix loop, so perhaps that's why it's behaving this way. I'll wire it the other way and see what happens
  • I tried putting only one all-pass in the loop and stringing five in series and got pretty much the same results. I’m not sure exactly why it’s behaving this way, but it sounds good so I think I’ll leave it.