New modules by CV funk

I’d love to check out your test patch, can you post it to patchstorage? Meander sounds very interesting. Thanks again for the help developing the v/oct feature.

1 Like

Sure, I will post it here later today or tomorrow. I am revising it to correctly translate Meander’s 7 types of chords to the correct STRINGS bank and row in the classic view.

Here is my test patch that takes the harmonic progression (chords) from Meander and translates the Meander chord types to STRINGS row and bank and chord (root v/oct) dynamically by means of the Stochastic Telegraph BASICally scripting module.

Edit: Note, I believe all chords are playing correctly once the capo indicator on the STRINGS panel is considered. Even though I may send a B and STRINGS displays a Bb button lit, the capo +1 is indicated on the panel and B is indicated and output. It can be a bit confusing, but I think it is all working properly.

Note, I have not figured out how best to synchronize the CV Funk modules with an external clock such that they can sync with other modules such as Meander that are synced to an external clock.

CVfunk-Strings2_TestPatch with Meander and Squinktronix arp and advanced Meander chords-4.vcv (13.6 KB)

1 Like

I think I messed up by downloading your latest nightly a few minutes ago. This seems to have broken the patch I posted here yesterday for testing the classic view and dynamic chord type sequencing from Meander. How do I get back to the version I was using yesterday, or should I? Thanks.

The issues seems to be related to the CHORD BANK buttons’ states on start-up patch reload. Did something change with that in the latest nightly? I have it working again on my test patch by just clicking on those buttons to turn them off and then things worked correctly.

Did you perhaps make some json settings changes in this latest?

Sorry about that @k-chaffin! Yes, the previous default behavior was actually backwards, plugging in a cable would reverse the operation of the buttons. So fixing it means you gotta click those two button each once to get back in sync! So sorry about that.

The newest nightly build is highly recommended! I fixed all the oddball things, like the octave range being wrong for Strings, or the buttons in the opposite default position etc. This patch also includes fixing the HexMod clock syncing, and adding audio-rate v/oct mode for HexMod (see the patchstorage patch).

edit: I forgot that I can also post it here! CV_funk HexMod Oscillator.vcv (5.6 KB)

1 Like

Thanks. Everything seems to be working okay with the latest nightly after I reset the chord bank buttons.

1 Like

that’s a relief. BTW that’s a pretty sounding patch. I just fired it up (clicked the 2 buttons), sounds very harmonic indeed!

1 Like

The first 10 modules are now in the VCV Library. Thanks again to all of you who provided feedback!

Now I have a new surprise! A new module! :slight_smile: This module is a stereo oscillator with phase feedback. It has an integrated polar display, so you can really see what’s going on. Please give it a test and let me know how it goes! If the reviews are positive, I’ll include it in the next VCV update.

OUROS is a stereo phase modulation oscillator inspired from the perpetual cycle of the ouroboros. The dual oscillators interplay on a circular display, capturing the essence of phase relationships evolving in an endless loop. The NODE control transitions between phase spaces — unison, bimodal, trimodal, and back, enabling intricate phase textures. FEEDBACK dynamics, inspired by the ouroboros consuming its tail, inject complexity by self-modulating NODE to evolve complex timbres.

You can find the new beta build in the Nightly builds:

11 Likes

Working on some presets for the Ouros.

I did my best with the Saw Square and Triangle to get close to the VCV Fundamental shapes, using a scope and frequency analyzer. The shapes are a little rounded, but I think they are very pleasant unfiltered, so it may not suit your triangle/square needs The point of these mimics is that subtle modulation of PHASE or FEEDBACK or the other CV inputs will morph the classic shapes into other fun things!

In the next group I tried to model classic instrument waveforms. I’m really pleased with the results. You will need to pair them with appropriate envelope shapes of course.

Finally, in the “Shapes” group, we have some really fun waveforms that both look cool and sound nice. I think the Mantaray waveform sounds particularly good.

update: added more waveforms

7 Likes

Ouros is now available in the VCV Library.

New Module Announcement (beta testers needed):

Pressed Duck

A stereo 6 channel side-chain ducking mixer with compression, saturation, and feedback distortion.

The latest builds are in the nightly builds on my Github. See previous posts for the link.

6 Likes

Great modules you’ve got here.

I found a couple nitpicks about the manual

There are two range buttons in Envelope Array, but the manual says “range button” (singular), confusingly. They influence the first and last env respectively, I gather? Probably good to clarify.

There’s also a copy/paste error in the “Signals” module, it doesn’t have spread and decay params.

Looking forward to playing with these more as time permits. :slight_smile:

Oh wow! Somebody actually read my manual carefully. :slight_smile: This is great!

Thank you very much for the feedback @andreya.ek.frisk I have corrected those errors and will put it in the next update. It is quite difficult to keep all the documentation accurate as the modules mutate. And now you also know my secret for having the formatting look the same from page to page

I made a lot of big improvements to my latest module Pressed Duck.

  • To address aliasing, I added first-order antiderivative antialiasing, thanks to some help from @baconpaul and @Squinky for their help.
  • Then I cut the CPU cost down but a little bit by using some polynomial approximations.
  • I made fixes to the normalizing, so mono inputs should always turn stereo, and stereo outs patched to mono will average.
  • Added a minimum level for compression to kick in, so at low levels it doesn’t divide by near-zero.
  • I fixed the panning, so it should have even power pan law now
  • I made fixes to the input detection, so if fewer inputs are plugged in the headroom adjusts.
  • I added high-pass filtering to the inputs (2nd order butterworth), to remove DC offsets before adding the saturation distortion, which I think sounds a lot nicer. You can disable it in the context menu.

I could really use some more feedback from beta-testers at this point. I want to make sure there are no funny bugs before I release it to the library.

1 Like

Pressed Duck sounds really cool and the compression and ducking works great for a huge loud driving rhythm, Fabulous

1 Like

CV Funk v2.0.5 patch notes:

Pressed Duck: :duck:

Added stereo handling to everything, now the L and R channels are compressed at separate levels. This allows panning to be better compensated in the compressed mix, and should have been done in the first place.

Added L/R rings of lights to the Press and Feed knobs, indicating now the compression level and distortion amount for L and R channels separately.

Fixed mono->stereo normals on side-chain inputs.

New module

Flower Patch: :hibiscus: A 12-tone scale polar visualizer with PFFT (Pretty Fast Fourier Transform).

This module takes your audio waveform and winds it around different sized circles, then scales them to fit the display. It’s a visual representation of what happens in a Fourier Transform, and the flower petals help you to see the harmonic relationships between notes. For example F4 has a blue circle at F4, but also you can see that A and C have exactly 3 and 5 petals - it’s a mathematical way to visualize harmonic relations. The colored circle is the FFT output, which overlays in color on the plots, the POWER knob allows you to scale the shapes based on the FFT values.

Here’s a cool tutorial that explains the math behind the display.

Self-Illuminating Layers :sparkler:

Now all modules with displays have self-illuminating layers, so it looks neon when you turn the lights out.

12 Likes

Hello again! No worries, happy to help!

Taking a quick look again now. With the 2.0.5 modules directly from the library. Don’t have time for extensive listening now, but the visuals look good! Will try it out more soon. :slight_smile:

1 Like

Introducing Syncro

An 8-channel clock generator/modulator that does both multiply/divide per channel as well as clock rotation, swing, pulse modulation. Each channel has gate and inverted gate outputs. Can be synced to an external clock. CV control of the manual buttons, clock rotation, clock rate, swing and pulse width, allows for a lot of interesting patch possibilities. The FILL setting adds to the numerator of the ratio, giving that channel temporarily more beats.

I tried a lot of different things to keep the clock precise and in sync with itself. They clocks sync up to the master clock each clock cycle when they have a common mulitiple or when the ratio or rotation is changed. Clocks don’t change patterns immediately as the display shows, instead they wait for the start of the next master clock cycle to change settings. Rotating the clocks resets and realigns them, and makes it more predictable.

Self patching the gate outputs can result in some very interesting patterns.

Demo Patch:

12 Likes

So, bad news is Syncro is crashing on some Windows platforms. If anyone has any clues, I’m really a bit stuck trying to fix this one. I’ve revisited the code many times trying to clear up the problem and added lots of divide by zero safeguards where I could think to put them. Still to no avail!

Is it a divide by zero? Windows programs die if you, for example, try to access memory beyond what you declared.

Line 220 in your code

 for (int i = 1; i < 9; i++) {
            fill[i-1] = (params[FILL_BUTTON_1 + i - 1].getValue() > 0.1f) || (inputs[FILL_INPUT_1 + i - 1].getVoltage() > 0.1f);
        }

I don’t know why you do it like that; but it ends up being zero based everywhere, so… at least that’s potentially inefficient, maybe there are other instances like that and one runs away beyond the array boundaries.

Another option: trying to access null pointers. Could be a pointer array that’s not filled up to where it should.

Line 503

            for (int i = 0; i < 8; i++) {
                module->ratioDisplays[i] = createDigitalDisplay(Vec(210, 65 + i * 38), "1:1");
                addChild(module->ratioDisplays[i]);
            }
        }

Maybe you try go up to 8 (given the example above) while accessing those? Those go up to 7.

1 Like