Difficulties making an ear training patch

Hey everyone,

Relatively new user of VCV here (started in march, but I’m starting to understand the concepts of modular synthesis a lot).

Recently I thought I’d try to use VCV rack to make some ear training exercises ; the idea was to have a given drone, and to have a random chord play over it, so that I could try and train my ears to recognize degrees in full autonomy.

Here’s what I had in mind :

(Inputs : 1. Root note cv / Outputs : 4 Chord cv mono outs, with the option of having the 1st as a poly out)

  1. Chord update button : A manual button, that would update the output chord every time to press it ; ideally, a display would show the new chord
  2. Chord structure select switch : This would allow you to choose between training on triads or tetrads
  3. Chord modification probability knob : This would allow you to substitute a chord with a modified version of the chord (eg. sus2, sus4, dim, aug for tetrads), depending on the probability amount. When probability = 0, all chords are diatonic [the purpose of this was to be able to ear train on more than 7 chords)
  4. Diatonic to Chromatic degree probability knob : This would allow you to substitute a chord with the equivalent chord, but in the neighbouring degree on the chromatic scale (eg, transforming a IImin into a IIIbmin), depending on the probability amount [the purpose of this was also to extend the range of chords to ear train to, and also thinking about secondary dominants).

Functionning this way, this would allow roughly 4 main situations that I was aiming at :

  1. Ear training fully to the diatonic scale (eg I, ii, iii, IV, V, vi, vii°)
  2. Ear training to the diatonic scale, but with chord modifications (eg I, ii, IIIsus2, IV, V+, vi, vii°)
  3. Ear training to the diatonic scale + chromatic steps, no chord modifications (eg I, ii, iii, IV, Vb, V, vi, viib)
  4. Ear training to the diatonic scale + chromatic steps, chord modifications included (eg I, ii, iiib, IV, Vsus2, vib, vii°)

Needless to say, I’m having a lot of difficulties putting this into a real functioning patch. I have renounced early on on the idea of implementing chord voicing and chord inversion control, but I still think there must be a way to manage this.

Here are the main approaches I’ve tried and their pitfalls :

  1. Using the Aaron Static ChordCV and DiatonicCV with the VCV sequential switch : this allowed me to shift between chords and their modified equivalents pretty easily, though it did not allow me to apply probability to the chord update ; in other words, I would get a modified chord (sus2, dim, etc…) only if I had manually activated the switch (it was a yes no situation whereas I wanted a probability situation)
  2. Running three parallel ChordCV (1 tuned to scale with a DiatonicCV, 1 tuned identically but with an ADDR-SEQ sequencing the chord type parameter in order to have the desired modified chords ; 1 tuned diatonically to the root+1/2tone of the reference tone (I was using a Reftone for this function) ; then sequencing them with a switch. This worked in some cases, but I couldn’t manage to add the probability control again when sequencing the switch (I went with a bernoulli gate but the bernoulli gate could allow me to select at random 1 of the 3 branches of the switch
  3. Trying to use a combination of bernoulli gates and S&H+noise for randomly sequencing values on an ADDR-SEQ, which would then sequence the Bogaudio sequential switch : this got confusing to me pretty quickly, and I ran out into several logic problems.

I feel like most of my problems are linked with the fact that what I want to do is something almost algorhythmic (if chord modification prob = 0, then… else… ; something like that), which might not be the most easy to do with VCV.

My questions are :

  • Has anybody tried doing something similar before and encountered similar problems ?
  • Should I maybe try to use something different than vcv for this and go to a program development solution ? a friend of mine mentionned Faust for developping tools compatible with VCV, maybe this would be more efficient ?
  • Are there any obvious flaw tomy approach that you may have noticed from what I’ve exposed there ? I can’t help but shake the feeling that what I want to do is pretty simple, but somehow every patch solution I come up with ends up incredibly complicated.

Also, if you ever want me to upload some of the patches I’ve been working on to see, please tell me, but given how messy those patches are for the moment, I preferred to leave them out of this post for the time being.

Thanks a lot in advance for all your help and input !

re: Faust. Faust helps a lot with building DSP (oscillators, filters, etc.). Your problem is not DSP, but with logic.

1 Like

You might look at Progress2 for the chord generation module. It has 32 ‘parts’ which in this case would be for your 32 different voicings and a random 0-10V signal would select one of the parts.

1 Like

This sounds tough in VCV. How about using something like Puredata? Maybe you could store the pitches for different chord types in arrays, and bang a random value to change chords (a bang is like a trigger in modular). Just a thought.

1 Like

yes, it’s a logic task.

I remember ending up printing the stems (with correct name) and listening to them on a random playlist on the Winamp, both for interval and chords, and guessing the result without looking at the screen of course.

tbh I’ve got some VCV Rack patches somewhere, I’ll take a look

1 Like

Thanks for the answer ! I’ll try and see what I can do with PureData then, maybe this will be better for the logic part.

Thanks for the answer ! At first I wanted to try with vcv given that it’s what I am the most familiar with and going with the PD option would imply getting to learn PD from scratch (though a lot of concepts are similar), but this might be the better solution indeed…

Thanks a lot ! The way I’m doing it right now is to have an excel sheet output a list of random chords and I try to play them in sequence on a midi keyboard and though this is good for the muscular memory training, it’s not really helping with the ear training part… but the playlist thing might be a good idea to try too

You are asking for a fairly full-featured patch, but I wonder if all those chord-generating features are completely necessary. Instead, if you are willing to do a little setup work, then just program in a playlist of the specific chords and voicings you want to practice for now.

You can do this with Chords by DocB. You can program in whatever chords you want, in any voicing. The chords you make can be saved and are CV-accessible. Send in random CV to access chords at random.

From this setup, it should be easy enough to program in random key changes by mixing random offset with Chords’ output.

The main missing part is the readout, but you can just look at the Chords module and see what notes it is playing. That tells you the chord and voicing–assuming one knows basic chord-building theory. If one has not fully mastered the theory, this is a good way to practice it: look at the notes and identify the chord and voicing

Or use visualizer to tell you the chord voicing.

Very nice, thanks for that one!

1 Like

I don’t know exactly what your interests are, but most of the modules in that “Sqinktronix” line deal with “standard” diatonic harmony.

I tried the one that makes four part harmony a few weeks back but could not understand it. For example, the key signature in the readout did not match the root note key, even when set to C.

I’m sorry, I don’t understand the issue. Could you explain the issue? You are saying, for example that you set the key signature to C major, but it didn’t display C major? Could you say in more detail what you did, what the results were, and what you expected to happen?

btw, afaik the module usually works - several people have had good luck with it.

Perhaps a screen capture could explain the issue?

Hi everyone,

Thank you again for all your replies. I’ve been making a lot of progress on this, and I’ve reached a first version of an ear training patch.

It’s working pretty good, with some anomalies but not as often as I feared. I kept going with the modules I was the most familiar with because I couldn’t manage to use all the modules everybody recommended at their fullest extent, so I still think there should be room for improvement here.

The version I pulled off only works for triads (but with minor modifications it should be able to work with tetrads too). So, considering the 7 diatonic triads, their alterations I implemented (min, maj, sus2, sus4, dim, aug), the 6 chords available for each of the 5 chromatic steps (major, minor, sus2, sus4, dim, aug), and the 3 inversion options and 4 voicing options (basic, drop bass, drop bass + 5, open chord), you can train with a lot of options ((76)+(56) = 72 chords ; 864 if you take into account the random voicing and inversion, if I estimated accurately).

Merry Christmas to everyone and here’s to making more modular next year ! Can’t wait to read everybody’s thoughts.

Thanks, that’s good to know that it’s working for others. I probably just screwed something up. I like to monkey patch with as little thought as possible. I just plug wires in and turn knobs almost at random until it sounds good. I almost never look at a manual or video tutorial. I rely 95% on my ear rather than reasoning my way through a patch.

It just makes me happier to work this way. Once I got this amazing groove going and could not figure out how I had done it. A few weeks later I realized that I had accidentally created a jittery clock that just happened to groove in a pleasing way. But after I had figured it out, I could never recreate the same magic in subsequent patches. I love these happy accidents.

Ok

Seems to me that you can program all the chords in a polyphonic sequencer, like for instance FourTrack, and set it to random mode. If you want different modes, use a sequencer for each mode, and switch between them (Jooper is great for that). I think that would be much easier.