Re: Scales + Vector -- "you can generate psuedorandom contrapuntal patterns from keying the extra quantizer." Yes, I've been thinking about interesting use cases for the Quantizer + Sequencer configuration. Auto / pseudorandom counterpoint is a very interesting possibility. What I've NOT yet got a bead on is how I might constrain motion in the counterpoint line; let's say for example, I want my counterpoint to be about 45% contrary motion, 20% oblique, 20% similar stepwise, 10% other (e.g. parallel or similar motion by leaps). I DON'T have a good idea of how to implement such a "contrapuntal motion constraint" in modular, other than i) manually programming in the sequences (boring and not fundamentally different than using keyboard / mouse) or ii) manually setting the "shapes" for the contrapuntal lines (such as ramp up for voice 1 and ramp down at .5x rate for voice 2) while letting other factors be psuedorandom. Any ideas for a control scheme in modular that "opts in" desired (contrary + oblique) motion while limiting undesired (parallel and similar by leap) motion? My early sense is it would require a chain with slope detection (rising / falling) or difference detection (greater / lesser) plus some logic to do "not" and "or" functions BUT I can't really imagine the modules needed for implementation, or how to get them to work instantaneously (e.g. without being ruined by lag) to drive a 2nd derived (and semi-constrained) line from a primary voice.
-- nickgreenberg
Well, the "instantaneous" part is easy enough once it's all patched up. And you're on the right track with the use of discriminators and logic to get the desired stochastic result.
Let's say for a minute that you've added a few Ladik modules here...a Min/Max discriminator (U-040), a Median discriminator (U-041), and their Derivator (J-110). Right there, you've got 12 hp that can...
1) Read incoming CVs for minimum and maximum values, then output those.
2) Read incoming CVs and then derive an average.
3) Read incoming CVs, then output a gate depending on the CV's action.
So far, so good. Now, we need some arithmetical processing. Shakmat has this little 2 hp thing, the SumDif, which does CV addition and subtraction. So, feed one "side" of that with one of your derived CVs, then the other "side" with some DC offsets sent from something like Michigan's F8R...which also has enough CV offset sliders to allow you to use some more as manual CV inputs to the other modules.
So, this results in a bunch of derived CVs with a degree of manual control. Then, you need switching...
Now, for THIS part...we have a key module that really opens all of this up to the sort of control you want, and that's Mutable's Branches...a dual A-B "switch" that changes depending on controlled stochastic parameters. With this, you can then use CV values to change routings, mute CV lanes, etc etc.
Now, the other side of the equation here is the pulse aspects...the "on/offs" needed. For starters, you want a WINDOW comparator. There's a difference in that a normal comparator will output a gate when an inputted signal rises above a given threshold. All well and good, but you want the window comparator because it's got several possible outputs from that single inputted signal. So you can set one of these up to output a gate for "under" the lowest threshold, "between" for when the CV value is between the upper and lower thresholds (the "window"), and "above" the top threshold. Input a sine wave, and you get a repeating pattern of gates. But input something that's got more randomness, and you'll get some elaborate gate patterning...potentially nonrepeating, if you prod the LFO in use toward that.
And then, this is where Logic enters the fray.
Once you've got all of these various derived CV and gate behaviors going, you can then use the modules in this that output gates to activate some Boolean gates by letting the gates "interfere" with each other via the Boolean logic. If you want long, sustained gates, then use some OR gates which will output a gate if both inputs are hot. Shorter? Try some NOR logic, which outputs when no gate signals are present, or AND, which outputs gates only when both Boolean gate inputs are hot. This can be as simple or as elaborate as you like...and believe me, it can be DAMNED elaborate! But by using those gates to activate some other switches, plus recombining those results with MORE logic, you can arrive at a result that can seem almost as if there's human input going on. It all depends on how crazy you make a control subsystem of this sort.