New modules by CV funk

I added new features to the Envelope Array module.

  1. Patch memory, now it remembers the range state upon VCV reset.
  2. CV range, now CV can adjust width beyond the current range setting.

If you are testing this module, be sure to get the latest nightly build.

Thanks again everyone that is testing these out, I appreciate your feedback a lot.

I plan to submit these to the VCV library next week, as I finally think they are polished enough.

1 Like

I have posted some sample patches to patchstorage:

These patches use the default VCV rack plugins to demonstrate some fun ways to use CV funk modules. I’m particularly proud of the System Demo 2, as it showcases some fun ways to get off-grid with drums.

Make sure to download the latest builds of the plugin before trying to open the patches.

2 Likes

I have written a PDF manual for the modules now, with much better images and examples.

Here’s an example for the STEPS module:

9 Likes

You can embed images in markdown. Most of my manuals do that.

Looking forward to see this collection in the library :wink:

1 Like

@codyge Just saw one of your patches on patchstorage - downloaded the modules from GitHub - stoked to check them out. Thanks!

1 Like

Thought I would update the details on the modules. There are now 10 modules.

The new modules are:

Hex Mod: 6 phase related sine wave LFOs. Clock sync input. Also, can multiply or divide clock signals if you select the option in the context menu.

Collatz: Produces polyrhythmic gates in sync with an input clock signal. Read the manual for more info, it’s based on a famous unproven mathematical conjecture. <see xkcd: Collatz Conjecture >

Strings: Produces guitar chord CVs, use the buttons or inputs to change chords and voicings

Magnets: Simulates magnetic spin-glass to produce 24 related random LFO outputs. Inputs change the polarization field, temp, interaction energy, and tape head polarization. Outputs average the spin states of 25 lattice points.

New patches are available on patchstorage (linked in previous comment)

7 Likes

I finally installed your test version and am happily exploring STRINGS as a generic chord generator. I plan to sequence the CV inputs for bank, row and chord selections. Fun so far.

I’m curious why STRINGS does not have a bank that includes diminished chords. Or, am I missing something?

I am not a music theorist, even though my modules are based on music theory. In my modules based on the circle of 5ths, chords are always triad major, minor or diminished with the option to play some 7ths and octave 4 note chords. So, I am trying to determine how to have my Meander module chord progressions play your STRINGS module, as I have done with others’ chord playing modules. I typically use the BASICally module for scripts to do do dynamic mapping if needed. One of the outputs from Meander is the chord type, so I have the info to map, but don’t know what to map a Meander triad diminished chord to in STRINGS.

Yeah, there’s no diminished chords. I was thinking of adding alternative chord banks as an option in the context menu - mapping out reasonable patterns of chords is tough, so I’m all ears if you have suggestions. It’s hard to put chords adjacent in the 3D grid that always sound good together. The layout is related to accordions and autoharp.

So with the diminished chords, they just don’t sound as nice on guitar because of the lack of open voicings. this chord is typically only using 3-4 strings. Instead I put minor6 in that row… they seemed more useful. And minor9 chords are very beautiful. Again, all subjective choices.

There are really a lot of chords to choose from, so I picked a set that most campfire guitarists might be able to hack. I don’t know how to play any diminished chords personally, so they didn’t make the cut! :slight_smile:

Check out my demo patch on patchstorage to see how it works. It is not at all like a piano chord module, it’s really quite limited to what I could play easily on a guitar in open tuning.

1 Like

Yeah, diminished chords are dissonant sounding. The diminished triad is a minor triad with a flatted 5th. I also do not know how to play diminished chords on the guitar. For a major key, the diminished chord on the circle of 5ths is always in the VII degree. In a minor key it is in the II degree. At least that is my understanding.

Of course in harmonic progressions, it is all about the resolution of dissonance to harmony. So, the diminished chord can play a big role in that.

I did download your patch before I started playing with STRINGS. I thought that chord layout looked like an accordion :wink:

And Locrian has the diminished chord in the tonic I position. From what I read, a dom7th can be substituted for a diminished chord. I will play with that for now.

Diminished and half diminished are definitely guitar chords, not cowboy chords, but I play diminished chords all the time. A lot of older ragtime and swing uses diminished to connect the important chords with less important dim in between. Anytime you play a inverted dom7 you are flirting with the diminished because the diminished triad is within the dom7 (GBDF has BDF). Just because guitarists are allergic to knowing what they are doing, don’t make that an excuse to dumb down your module.

Major features on the 7th degree a dim triad and the half dim or m7b5 like bdfa

minor especially harmonic minor has the dim 7 like g#bdf

Take this with a grain of salt, but I have decided that I cannot use STRINGS as a general purpose circle of 5ths chord progression voice engine. From my perspective, such would need to support the following chord types: major, minor, diminished, 7dom, 7maj, 7min, and 7dim. Those are the types of chords that my Meander chord progression generative sequencer supports. This ties back closely to classical music’s use of the circle of 5ths. Different composers might choose a different set, but personally, I believe that it is always a higher priority to support diminished chords over sus, aug, 6th, 9th, add, etc.

I like the idea of your STRINGS module. It just does not fit in my style of generative harmony.

Okay wow I didn’t realize my design choices would be so controversial! I just wanted a module that plays nice chords that mostly go together. I invite you to suggest a better chord layout if you have a preference.

Think of the module as providing a limited artists palette. With a limited palette you can push your creativity, you are meant to explore the chords with the buttons and invent new compositions in this space.

I happen to like the m9 chord and the m6 and the sus2, these are very colorful open chords that make the guitar shine and can be played over a wide variety of other chords.

In my testing I found it was too easy to play a diminished chord at the wrong time just by clicking something, and random sequencing led to mostly dissonant sounds. With all the diminished chords in a row they really didn’t sound so nice. So I replaced the row with m6, which contrasts better with the adjacent chords. I felt it was hard to decide how to arrange the banks best, and the end result is highly subjective and personal, I just picked the chords I play the most and tried to make it so the selection would be interesting and not always repeating the same voicings just transposed up the neck.

So back to my tastes not aligning with yours, it’s pretty simple to implement some different chord-bank/button layout options in the context menu, but the suggestions need to be very specific since I did poor in music theory class: There are 4 rows of 7 buttons, and the two gate inputs I and II select between 4 banks.The 7 buttons can even be mapped to different notes, I can have it change the panel labels.

Here is the basic data structure. The left column is the default chord bank, and going to the right we get the alternative chord banks for each button. I tried to design all sets of 4 that would work out as simple chord progressions both going through banks and switching rows:

    const std::array<std::array<std::string, 4>, 7> Row1_Names = {{
        {"B7", "B"     , "Bsus4", "Badd9"},
        {"E7", "E"     , "Esus4", "Eadd9"},
        {"A7", "A7-Bar", "Asus4", "Aadd9"},
        {"D7", "D7-Bar", "Dsus4", "Dadd9"},
        {"G7", "G7-Bar", "Gsus4", "Gadd9"},
        {"C7", "C7-Bar", "Csus4", "Cadd9"},
        {"F7", "F7-Bar", "Fsus4", "Fadd9"}
    }};

    const std::array<std::array<std::string, 4>, 7> Row2_Names = {{
        {"A" ,"A-Bar" ,"Amaj7" ,"Aaug"}, 
        {"D" ,"D-Bar" ,"Dmaj7" ,"Caug"}, 
        {"G" ,"G-Bar" ,"Gmaj7" ,"Gaug"}, 
        {"C" ,"C-Bar" ,"Cmaj7" ,"Caug"}, 
        {"F" ,"F-Bar" ,"Fmaj7" ,"Faug"}, 
        {"Bb","Bb-Bar","Bbmaj7","Bbaug"},
        {"Eb","Eb-Bar","Ebmaj7","Ebaug"}
    }};

    const std::array<std::array<std::string, 4>, 7> Row3_Names = {{
        {"Em" ,"Em-Bar" ,"Em7"    ,"Em6"},    
        {"Am" ,"Am-Bar" ,"Am7"    ,"Am6"},    
        {"Dm" ,"Dm-Bar" ,"Dm7"    ,"Dm6"},    
        {"Gm" ,"Gm-Bar" ,"Gm7"    ,"Gm6"},    
        {"Cm" ,"Cm-Bar" ,"Cm7"    ,"Cm6"},    
        {"Bb7","Bb7-Bar","Bbm7","Bb7sus2"},  
        {"Ab" ,"Ab-Bar" ,"Ab7","Ab6sus2"}  
    }};

    const std::array<std::array<std::string, 4>, 7> Row4_Names = {{
        {"Asus2" ,"A6" ,"A7sus4" ,"Am9"}, 
        {"Dsus2" ,"D6" ,"D7sus4" ,"Dm9"}, 
        {"Gsus2" ,"G6" ,"G7sus4" ,"Gm9"}, 
        {"Csus2" ,"C6" ,"C7sus4" ,"Cm9"}, 
        {"Fsus2" ,"F6" ,"F7sus4" ,"Fm9"}, 
        {"Bbsus2","Bb6","Bb7sus4","Bm9"}, 
        {"Ebsus2","Eb6","Eb7sus4","Em9"} 
    }};
1 Like

Thanks for your detailed reply. Again, take what I said with a grain of salt. All I was saying is that STRINGS does not fit in with my generative harmonic progressions. I think you ware saying that STRINGS is primarily intended to be used interactively by clicking the buttons, right. But, I was following your demo patch where you were sequencing the CV inputs for everything in STRINGS. That is what I want to do also, so, if there was a dim chord somewhere in the banks and rows, I could play it via CV control.

Having a bank that had maj, min, dim and 7ths would let me do most of what I do in generative music. 7ths are sort of like diminisheds; it is hard to know when to use them and when not to.

You definitely should do what feels right for you. If the module does not meet my needs, that’s my problem, not yours.

Thanks again for thinking about this and explaining. :grinning:.

Well, I do have specific tastes, but at the same time I want the module to be useful to a wider range of musical applications.

Initially I planned to play it with the buttons, but after testing I found it was good to explore and design a sequence with the buttons, and then sequence with a programmer module. I had the idea to add an expander module to allow you to program a sequence step by step and then play it back, so that might be in the works eventually…

I can tell you know more about modal music than I do. What do you suggest? Replace the Sus2 row with Dim? And which button assignments do we use for the diminished row, should it match the Major, minor or 7th row? That would also put the 7/Maj/Min/Dim all on the front in this setting. If I am to make a classical-styled layout, I probably should make other changes as well, maybe you can suggest something - for example maybe sus4, add9, and m9 could be something else in this mode?

Another idea I was considering is having a context menu option for v/oct Root Chord inputs. In this mode it would quantize the input mod 1V and figure out which chord in the top row is the closest to the root note, then apply a capo offset accordingly. So if you inputted a F# you would get F chord with capo set to +1, to make sequencing it easier. For the Rows 2-4 the assignment would be via the top row, so an A input on Row3 would give you the relative minor Dm. Would this be worth implementing as a context option?

2 Likes

I cannot speak for @k-chaffin, but I have several suggestions and a little added “know it all theory” to maybe be helpful or maybe just a big fat thorn.

I really opened it up and played around with it the first time this morning, but I have been following the development and I may have been the suggester that it be a sequencer and not an oscillator. I find the design to be charming and the logic behind it sound. It def would appeal those who may have written a song or 2 on guitar, it is quite savvy and has a alot to offer. Great work on a complex sequencer. That is sort of my apology for being brusk about the diminished chord thing. That was me being sassy and I really apologize, you have put a lot of thought into this project already and it is a fine addition to VCV for sure.

Now the Know-it-all portion. I wrote out a huge chunk of chord theory and decide it was wasted words. You have a sound design with a cool guitar derived logic. Any added complexity could just blow up this great arrangement of qualities.

But as I typed out all the know-it-all chord theory I realized there is an elegant solution to all the chord wishes anybody may have. The biggest thing guitarists hang onto is the root note, they think of shape and root note and just grab it. That is very effective in getting something done quick and dirty but doesn’t always voice lead very well. But so many chords are just slash chords or inversions of other chords and getting this little tidbit may lead to some nice voicings, pun intended.

For instance the 6th chords are inversions, C6 is Am7/C ( CEGA or ACEG) and Dm6 is Bm7b5/D (DFAB or BDFA) and major7 is sometimes called a slash chord by some musicians(nashville). so that Cmajor7 can be called Em/C (CEGB and EGBwith Cin bass) and Dom7 is sometimes thought of like this so G7 is Bdim/G. All the seventh chords are just an extension that could thought of as another triad with a different bass note.

And if we start moving these bass notes around slightly we can get a plethora of chords that fit many uses. Like a root position G7 where I just raise the bass a half step is G#dim7 or Cmajor7 where I raise the bass half step is the C#minor7b5, diminished solved. And progressions like G7 G#dim7 Amajor or Cmaj7 C#m7b5 Dminor sound great and point out how to voice lead things usefully.

And if I can freely change the bass note with a triad/7th/6th chord I can generate anything you could ever want. I mean Cmajor7#5 is really Emajor with C in bass or E/C and C9sus4 is really Bb/C and DdimMajor7 is really Db/D and Am11 is very close to Gsus4/A and the list goes on and on and on. In fact this is an important tool in modal writing to use the note a whole step above or a 4th above as the bass note to go with the triad, they sound like tertian chords often but we think of them diff when we start using slash to identify the triad at the core and the bass note below.

Again I don’t know how any of this may help, but you could generate any chord under the sun if the bass note could move while the chord basically stayed put. The chord savvy would get it instantly and the rest could ignore the feature or try it out to see how it changes things. I’m probably less a help and more that aforementioned thorn.

Keep going, your modules will rock the rack!!! I love all the creative people that put a mark on the rack all their own like Path Set and DocB and FLAG and Squinky/Squinktronix and Voxglitch and Sickozcell. This kind of jam is not found in any other music software I know and it leads to a lot of fun having ideas flood in through the modules you develop. Thank you.

4 Likes

Thanks for all the suggestions. @cubistguitar and @k-chaffin I made an attempt to integrate some of these ideas. I would really appreciate it if you gave the new features a try with this sample patch:

CVfunk-Strings2_TestPatch.vcv (4.1 KB)

The new update has a v/oct option for the CHORD input, letting you control it with a keyboard. If the chord is not available in the fingering options then it adds a capo and plays the nearest option. This should make it much nicer to sequence.

The new update also adds a Classical chords selection in the context menu. This option swaps out the sus2 row and adds dim chords, adds dim7, 2, 7+5 and some other little edits. Has a totally different sound, a bit more Honky Tonky sounding.

3 Likes

I like the idea of having a guitar chord generator that can handle anything, as @cubistguitar mentioned, but I suspect that may be better done through a new module.

I am no expert in music theory and have no formal training. I can say I have been doing this longer than most here, but that is strictly due to my age and early start into electronic music. I’m always learning more.

1 Like