Very nice! Welcome to the club (such as it is).
If you are going to be doing more modules for this project, you might want to recheck what your plugin’s name is going to be. It is currently “BrownianBridge”, but you probably meant it to be “Zeta Carinae” or something like that, right? Unfortunately changing this now will be problematic since the plugin “slug” name is already used in people’s Rack patch files and if you change it, those patches would go broken. But since you haven’t yet officially released this plugin/module, maybe that isn’t such a big deal.
Thanks, I am still a little confused on the naming conventions. Hopefully I was pretty clear that it was a very preliminary effort, so I don’t think its a problem to rename things now. Of course, if it is accepted as a Library module I won’t change things like that.
I’ve added polyphony (I think successfully) and some slightly more interesting graphics so it is getting close to a point where I will submit it.
A suggestion for how the Range parameter could work : it could also allow for negative values so that the direction of the walk could be changed directly in the module.
Yeah - I think the current input setup is not ideal. Its a little awkward to use now if you want to specify start and end points directly (the end point is Range+Offset), although there also some advantages too. But yes, changing the range to plus/minus 5 or 10 volts makes sense.
OK, I changed the range behavior as you suggested, I think that is definitely an improvement. I think this is more or less ready to add to the Library but I will wait another day or two in case anyone else looks at it and has a major suggestion.
I’ve added another similar, simpler module that implements an Ornstein-Uhlenbeck process (https://en.wikipedia.org/wiki/Ornstein–Uhlenbeck_process), which as far as I can tell isn’t provided by any current module.
Kudos for your first module!
Maybe consider setting manualUrl in your plugin.json to https://github.com/mhampton/ZetaCarinaeModules? I reckon it’s not a full manual but it provides a couple of informative links. As a user, I’d find it useful.
Thanks for your feedback! I have added a manual url. I am hoping to improve the documentation as well, it is very minimal.
Its not in the official library yet but I have added (by request) a module (“IOU”) that integrates an Ornstein-Uhlenbeck process along with a potential term, which gives a smoother random output around a mean (which can be externally controlled). The equations are
dx/dt = y
dy = (-c y - k(m - x))dt + s dB
where c is a linear damping parameter, k is a spring-like restoring parameter for the mean value m of x, and s is the amplitude of a Brownian motion process.
Since I needed a little more screen real estate for that I also added some additional mixing and output options (the Brownian increments (white noise) and the values of x and y). I think overall this will be more useful than the Ornstein-Uhlenbeck module.
I look forward to trying IOU once it is in the Library. Your post reminded me I that I intended to subscribe to Zeta Carinae and try out Brownian Bridge and Ornstein-Uhlenbeck modules, which I now have have and had fun running the outputs through a quantizer (QQQQ) and controlling Organ Three.
I am also a correlated noise fan. My plugin and module, PurrSoftware Meander, uses 1/f fractional Brownian motion, to give Meander its meander. Meander also outputs 3 fBm CV sources for which the octaves and time period can be adjusted. Meander has used (time) correlated noise since I began writing it in 1988 for Windows, but at that time I used exponential smoothing of Perlin noise to control the meander. Eventually I switched to fBm in 1-4 dimensions with octaves, lacunarity and persistence parameters acting on variants of Perlin noise in my game engine 3D graphics with quntic interpolation, even including NVIDIA CUDA GP-GPU parallel computing of the noise for real-time procedural textures. For my Meander module I fixed the lacunarity and persistence parameters for user simplicity to get 1/f fBm noise.
I’m glad to see another correlated noise developer here
IOU is fun also! I should clarify my post from yesterday. When I said I was quantizing the ZC modules outputs and controlling the Organ Three, I should have mentioned that I used QQQQ to sample the ZC audio rate noise at CV speeds. The biggest difference with Meander is that all of my use of fBm noise is done at CV clocked rates rather than audio sample rate. Meander is just an algorithmic composer/sequencer rather than audio generator or modifier.
Thanks! I’m glad you are finding some use from the modules.
Also thanks for explaining some of how Meander works. I’ve used it in a few patches, its very impressive. Writing some sort of Markov process melody/harmony/rhythm is on my todo list, so I’m very interested in Meander from that point of view as well. But I think I will start with something much simpler, a 2 or 3 state Markov chain gate (just slightly more complex than the Audible Instruments Bernoulli gate).
I really like the modules you have done so far and am looking forward to seeing more.
Thank you for your kind words for Meander. You’ve probably noticed that Meander has a 1st order Markov chain state transition machine that sequences the Meander harmonic progression engine. I suppose they could be called hidden Markov models since the user cannot see or edit the Markov transition probabilities. These have “Markov” in their progression preset name. The transition probabilities are based on published studies by others of the composer composite transition probabilities used by Bach, Beethoven, Mozart and Palestrina as well as one with a I-IV-V progression with transition probabilities being those most commonly used in music. There is also one that use the full I-II-III-IV-V-VI-VII harmonic degrees with most common transition probabilities in western music…
I am very interested in what you come up with for a melody Markov composer. Do you think it will be 1st order and hidden? I would love to see a higher order composer. I would love to see a Markov chain gate. I’ve created such with other modules but never been able to get exactly what I want. I might mention that I have tried to create 1:N and N:1 gates as each type would be very useful to me.
My latest module, the Weeble Warbler, is my first attempt at an oscillator/filter hybrid. For each polyphonic channel it creates 8 dynamical systems which can be randomly perturbed by Brownian motions. The eight channels can be altered in octaves to some extent by a harmonic control, and detuned. The basic oscillation of each subsystem is of the form
x’ = - k y + x (1 - x^2 - y^2) + external + noise
y’ = k x + y (1 - x^2 - y^2)
The cubic terms herd each suboscillator towards a stable limit cycle with frequency k. Left alone, these create sine waves, but adding an external signal will perturb the system in interesting ways; if the gain on the internal signal is high, this can act as a kind of resonant filter.
I’m a little worried this might have some issues so I’d appreciate anyone giving it a try before I request it be added to the library. Source code is at: https://github.com/mhampton/ZetaCarinaeModules and I will try to add some builds for mac & windows later tonight.
A test patch file or a full image of one would be helpful. (Always a good idea when requesting tests, IMO.) I can only get it to respond to a single channel of input (e.g. one note of a polyphonic chord), and so far can’t produce anything like your screenshot.
Edit to say that polyphony appears to be working now (not sure what the issue was before, but user error seems the most likely explanation). A known good patch for baseline testing would still be appreciated.
WarbleTest.vcv (23.2 KB)
Thanks! I am attaching a patch that shows at least the polyphony and external input.
Your new module is aptly named; I could make it warble, but it didn’t fall down. I’m definitely not the best qualified person to probe for issues in your code or output, but I have enjoyed playing with it so far.
This patch might short-circuit some of the mathy modulation you’ve got going, but I thought a little goes a long way, so I was inclined to rein it in a little. As such, I might suggest attenuators for the random, detune, gain, & harmonics inputs (which would remove the need for the external voltage processing like I have here). I was playing it with long chords, to better appreciate the warble. (For the sake of testing, I should probably add I’m using a recent model MacBookPro running Mojave.)
weeble_test.vcv (30.6 KB)
I look forward to seeing this in the library.
Thanks so much for taking a look!
I see what you mean about the attenuators, I will see if I can fit them in or change the behavior of the inputs so it isn’t so extreme.
I’m also glad you got the weeble wooble reference!
Wow, this is fantastic! I was able to get some really amazing sounds out of it . The only issue I had was that the CPU usage was fairly high, sometimes approaching 70% on the CPU meter with 8-voice polyphony (I’m on a Dell laptop with a fairly modest processor). I took a peek at the code to see if I could help out with optimisation in any way, but I don’t think I understand the algorithms well enough. If I have some time tomorrow, maybe I’ll take anothing look.