The Grande Poly Merge Resplit works great
Yeah, I just tried it. nice. I have to say itâs a little difficult to understand which of their merges are âpolyâ and which arenât. But that works great.
I was planning on posting a new build, but I made a nice patch the does, in fact, make 9th chords all the time. But I canât explain some of the notes coming out. Need to investigate more⌠Will post something when Iâm sure it works ok.
I posted a new build. It has the new UI hooked of for setting the trigger input function and for the thing that keeps chords from repeating. Neither fill be super clear until I update the docs. Also, the issue, above, is not a new one, itâs just the way the quantizers work. Iâll have to see if I can improve that. Hereâs the release: Release third test release ¡ squinkylabs/SqHarmony ¡ GitHub
I like the new score display methodology.
I agree 100%. The score is a joy to watch now.
I was confused at first because sometimes I was âsimultaneouslyâ getting two chords displayed with one trigger. And then I realized my Harmony trigger was 1 sample ahead of my sample and hold note change. Harmony was doing exactly what it should, and inserting a sample delay fixed it right up.
Repetition Avoidance is a perfect term. Iâm really curious how you came up with the options of 4,8, and 13. That last one is quite literally an odd number! I havenât used it enough to know whether I wish there were more intermediate values. But I definitely am enjoying both the 4 and 8 values. I donât think the 13 would affect my patch as I change the root every 8 triggers with random sample and hold output. (well, I guess it would come into play if the âchangeâ happens to be the same note)
yeah, thanks everyone for that suggestion on âturning the pageâ on the score. much better.
I am wondering if I should put on option for a 5 sample delay on the pitch input, just like I have on the arpeggiation. I thought maybe that was the cause of the funny harmony I was seeing today, but that one is the quantizer. But still, a trigger delay option could be nice.
As far as 4, 8, 13 - haha - itâs kind of a joke. The algorithm already doesnât really like to repeat stuff, so the effect is a little vague. So like, 4 and 5 are pretty much the same. I was going to to 4,8,12, and, yes, 13 is kind of a joke.
Iâm having trouble understanding your 9th chord patch. It looks like you are adding 7 semitones to the unquantized root, right? If so, wouldnât that be a 5th? A 9th should be an octave plus a second above the root, right? But, then you form a new chord out of that new root and add the first chord. Oh, I need to read how Grande PMR works, so never mind, probably.
Oh, so a 9th chord for a voice leading harmony still just has 4 notes as compared to for a triad becoming a quad with the additional note an octave plus a 2nd above the root?
Could you give a one sentence summary of what the ârepetition avoidanceâ does? Thanks.
Yes. I makes sure the same chord not output again. So if you use the trigger input to generate 8 C chords, and repeat avoid is 8, then no run of 8 chords will have the same four notes. They will all be c chords, but they will be voiced differently.
Well, the idea, that doesnât work is that the second harmony would output chords a fifth higher. The the first one would output 1,3,5, and the second one would output 5,7,9. Mix them together and you get 1,3,5,7,9. Which is of course a ninth chord. But it didnât work right.
I was just reading that common practice is to introduce the 7th making it a dominant 7th and then leave the 5th out.
Oh, for sure this is a hack, and not a proper way to make chords.
No problem. I was just trying to understand and see if I wanted to play with this, but I will wait till you have something for me to test
yeah, the problem with that patch is that if you add seven semitones and then run both through my quantizer the outputs are not always the interval you âwantâ. I have a feeling there is no quantizer that will do this âmagicâ, but Iâm going to investigate that first. Before doing anything more âradicalâ.
An obvious problem is that in CMajor what is a âfifthâ above B? My quantizer happens to turn it into a G, but to make these chords F would be better.
B in context of a C major scale is B diminished, so a flat 5th - and that is where all those problems with 9th are coming from.
If the first or the second harmonizer in your patch has a B as root, it does not work because of that flat 5th. Since your harmony is transposing any off-scale notes on the root input up (right?) the chord generated on the second harmony is a G major.
- F is the correct 5th of the Bdim chord
- F# is the 7 semitone-up transposition of stack
- G is the actual root of Harmony, if F# is fed into the root input
The âcorrect wayâ (in terms of quantizers) of getting a 9th would be to stack another third on top of the 7th (major or minor depending on scale).
Yes, all that is true. And, just to be petulant, how do you imagine I could write this program and not know that in Cmaj the triad on B is diminished. Ok, thatâs it for the petulance.
Anyway, as far as I can see your analysis is correct.
I donât think that is the only problem. I did a rather thorough test of this earlier today and found other places where the output wasnât as desired. Itâs even worse if the input isnât a scale tone. Then you have two quantizers struggling to put the note and the note a fifth up into the scale - they sometimes come out wrong.
In any case, I was able to make the quantizer work âcorrectlyâ in this case, but I found other cases that didnât work, like if you tried to offset them by a third. Fundamentally, I donât think this can work without some special code.
And for sure, as I said before, I am not going to make this particular module into something that can generate 7th and 9th chords. Maybe a future module, but not this one.
I am quite accustomed to your petulance, so everything is fine
I know that you can program a harmonizer, but this did not sound to me as âPlease donât give me an answer.â
The thing is: I donât know how to program a harmonizer or a quantizer. What is it? A lookup-table? Some kind of math? Some kind of both? I imagine the latter, a scale in a lookup-table and then some math to get every second note to stack some chords, depending on parameters like inversion, leading voice, close/spaced voicing, etc.
So from a noob-in-programming- but intermediate-music-theory-knowledge-perspective I tried to help. I did this a while back with two instruo harmonaigs and came to the same conclusion, that there is no simple solution to it.
haha - tx. Yeah, Harmony is what I call âbaby AIâ. It has a set of rules in it, and it makes a big list of all the valid 4 note triads up front.
Once it has the big list it can generate âharmonyâ. So it looks at the last chord (or two) and then finds a chords in the list of possible that fails the fewest rules and uses that.
So one problem is that the ârulesâ are difficult to change, and also they all come from common practice harmony, which is pretty simple (wellâŚ) and well documented. âJazz harmonyâ is something I donât know much about, but I feel itâs much more complex, and not as easy to pick up from three chapters in a book.
But - I am getting some good ideas for a more general module that wouldnât be as âsmartâ, but could do more stuff⌠Iâm sure you will have some good ideas.
This may be just random typing to you, but here is the âProgressionAnalyzerâ thatâs the heard of harmony. (beware - I wrote most of it in 1993). SqHarmony/ProgressionAnalyzer.cpp at main ¡ squinkylabs/SqHarmony ¡ GitHub