From Brian Willoughby Sent Wed, Feb 7th 2018, 07:57
Hi Mike. You can get rid of the delays if you run every other S&H off a = different, non-overlapping clock. If you do this, you=E2=80=99ll have a = short BBD (Bucket Brigade Delay). Those are made with hundreds or = thousands of S&H stages, and the shape of the clocks are very critical. = Basically, the analog voltages march through the BBD in sync with the = gait of the Left, Right, Left, Right of a virtual drill instructor. Probably the simplest way to create the needed controls would be a 25% = duty cycle clock for the even S&H stages, and another 25% duty cycle = that is delayed by 50% of the period for the odd S&H stages. Creating a = 25% duty cycle clock is as easy as sending a clock to a counter, and = using the AND function to combine the lowest two output bits. The other = 25% duty cycle clock can be created by using a NOT function on the = higher bit and then AND to combine this with the lowest bit. = Unfortunately, the Nord doesn=E2=80=99t have a counter, per se, but at = least the McGill page mentions how to create one. Thankfully, you=E2=80=99= d only need a 2-bit counter to generate the 25% duty cycle clocks. By the way, the Nord S&H seems to be edge-triggered, based on the = graphics, but I haven=E2=80=99t read the manual so I can=E2=80=99t be = sure. Typical S&H circuits in the analog world are level controlled = rather than edge-trigger - they literally have a Sample mode and a Hold = mode. Some circuits refer to this as Track and Hold, since the Track = mode literally allows the output to follow changes in the input = continuously, while only the Hold mode keeps the output constant. In the = latter case, I suppose an analog S&H is edge-triggered because the = output is set to the value of the input at the moment that the Hold = signal activates - and that=E2=80=99s like an edge-trigger. The advantage of this BBD-like technique is that you can speed up the = clock that feeds the counter, and the whole thing won=E2=80=99t break = when there is less than 1 millisecond between clocks. You might not need = your random pattern loop to exceed 1 kHz, but the option might be = interesting. As for resetting the loop, I think the problem is that your patch has = only one output for the S&H chain. Looking at the McGill page you cited, = I think that an 8-input Multiplexer would work, fed by a counter that = selects the input. When you want to reset the loop, reset the counter to = 0 and it will select input 0. Since the Nord apparently doesn=E2=80=99t = have an 8-input Mux, you=E2=80=99d need three stages of 2-input X-Fade = units, for a total of 7 X-Fade units. The counter would also need to be = constructed as suggested in the McGill page. In other words, all stages = of your S&H chain would have their output connected to the corresponding = input on the 8-way Mux, and that way you would have more control over = the order. Of course, this would mean that your S&H chain would have to = stop clocking if you want to hold the same pattern, and it would have to = clock at least 8 times to completely replace a pattern. What I=E2=80=99m = describing would be quite a bit different than the setup you have now. p.s. I think that Andy=E2=80=99s suggestion about using 2 registers = would only really work with real LFSR units, but that=E2=80=99s not what = you=E2=80=99ve built at all. Probably the only reason you don=E2=80=99t = understand his suggestion is that it doesn=E2=80=99t make sense in your = context. All of this has me wondering whether a virtual digital modular with all = of the basic functions from that McGill page would be vastly more useful = than the Nord Modular. Then again, maybe the Nord Modular 2 added all of = this? Brian On Feb 6, 2018, at 9:59 PM, Mike Perkowitz <xxxx@xxxxxxxxx.xxx> wrote: > Thanks for the ideas everyone! I read these suggestions and some stuff = about shift registers (and shift registers in the Nord: = https://www.cim.mcgill.ca/~clark/nordmodularbook/nm_logic.html) and = built a cascade of 8 S&H modules, fed by a noise source. The input to = the first register is actually fed by a crossfade between the noise = source and the last register. With the crossfade set to noise, it just = cascades through the registers with random values. But when I flip the = input to last register, the same 8 values just keep cycling through. By = tapping one register as a mod source, I get a looped modulator. The nice = thing here is that if I flip the crossfade quickly, I can replace part = of the loop. And with the crossfade in the middle, I can gradually = randomize the sequence. >=20 > Here's the patch on the Nord: = http://music.perkowitz.net/new/shift-registers.png > And you can hear it here: = https://soundcloud.com/perkowitz/shift-register >=20 > One disadvantage here is that there isn't a way to reset the loop (I = don't really understand Andy's suggestion about using 2 registers). One = way around that would be to just use the clock to cycle through the = registers and keep them aligned that way. Another drawback here is that = it's complicated enough that you couldn't use that many in one patch -- = the basic pieces take up about 12% of DSP in the Nord. One thing I = picked up from nordmodularbook is that, as I figured, trying to build it = off "simultaneous" triggers in a virtual modular doesn't really work. = His suggestion was to put a short delay between the register triggers, = so you'll see those cascade in reverse from the bottom register up = (since you want each register to sample the previous one before the = previous one does its own sampling). Once I added that, it worked pretty = smoothly. What I don't understand is why it needs 9 S&Hs to implement 8 = registers, but okay.=20 >=20 > You can see why I prefer doing this in a virtual modular. I have no = plans to buy 9 hardware S&Hs :) >=20