Hi, making a separate topic just for this module. I remember last time the nitty gritty back and forth got a little out of hand in the main announcement.
Anyway, @ale47p posted this: "i LOVE Arpeggiator, and the Phasepattern is very interesting, thank you!
I have studied harmony (with 3 different teachers) on Piston’s book (it’s like Pro Tools: awful but it’s everywhere LOL, expecially the exercises) and I can only think about how much logic there would be to get a 500 pages right in a module (and I have seen much more difficult books, I remember a French one, from which my teacher took excercises…in one word: nightmare)
my first thoughts:
-the soprano should not “jump” that much (it happens sometimes). if the soprano “jumps” there are problems 90% of the times (ok, it stays within 1 octave range, but it sounds way better (more 1700-ish) if the soprano gets the closest available note), maybe an additional context flag “choose soprano closest note” or something
-seeing root C# and 5 flats on the display make me ask you if it would be possible to have a separate window to choose from sharps or flats, for my teacher’s sake in the end the module’s name is Harmony, not Jazzy Enharmony
-I thought immediately that “retrig on notes and CV” should be OFF by default, but I’m not a “legato” guy, probably it’s just a problem of mine and the way I am. then I discovered that leaving it ON by default, it generates 2 chords, not one, when inputting notes froma a keyboard connected both to CV and GATE. I would put it OFF by default and revome the choice from the context menu
-from V to VI the voicing should be 3-3-5 (and it’s rare that the soprano goes up) but here we start an infinite logic trip with a preferred style in ambiguous situations
btw I’m having fun with the module, I will use it for sure!" I’ll try to answer below.
First, about the sop voice jumping. It does sound interesting to add a rule for this. Could you take a screen shot or something that will show this? I do have to warn you, though, making the sop closer might violate some other “rule”. I’ll bet what is being generated is “legal” according to “harmony”. Maybe not good according to “counterpoint”… Anyway, some a specific example would be helpful.
Could you tell me exactly the behavior you want, and conversely how to create two chords by mistake? I have to admit that a lot of the retrigger stuff was added at the very end of the “old” test period, so for sure there may be some bad or undesirable things here. Anyway, please give me more details.
haha - well, the common practice part of Piston is only the first two or three chapters, I think? After that when you get to things like Beethoven - neither I nor this module know how to write like that.
fwiw, this was my first c++ program, written in maybe 1989? Over the years I’ve re-packaged it, this time obviously as a VCV module. Another aside - I worked on Pro Tools development for a few years, but I never did learn how to use it well
Prelude: I’m not a teacher and I don’t know the truth: I just report what I have learned, possibly with some mistakes. Harmony is not that easy. [legend says that even W.A.Mozart during one of his trips in Italy would not have passed the Harmony exam without some help].
Furthermore, if we are talking about SATB as human voices, the rules are stronger than a 4 instrument piece. If you ask yourself WHY, just listen to a choir. Some “mistakes” immediately reach your brain, if you are used to listen to this kind of ancient music. The gaps (and some “weird” movements) between the middle and low voices are more tolerated because they are fulfilled by the “power” of the harmonic content in the low register. A Bass jump is pleasant to hear, if the Soprano jumps instead it could be too strong/distracting. This is what I was taught and, again, I can’t call it truth.
So, before posting a couple of examples, I would say that today’s default setting of the module don’t return the best results. From what I have learned, it is more important to move as little as possible a voice, and I have never been reprimanded for making 2 consecutive chords in a fundamental state. ok, with inversions you avoid some mistakes, but in a practical situation it is very “dangerous” only if the 2 chords don’t have common notes.
Two unfortunate things of this module: it cannot see 2 steps ahead, and it has no clue on the movement of the bass (up or down) because we don’t input the bass, we input the grade. This kills some logical reasoning.
My suggested default settings, and - if possible - with priority:
centered preference: narrow range
inversion preference: don’t care
no notes in common rule: disabled (it seems silly at first sight, but in the end everybody’s happy with unisons, and they solve some problems as well when you go forward with rules)
on this example, the first unhappy choice of the module (imho) is the second inversion of the 5th grade, which leads us to the second unhappy choice: the first inversion of the 6th grade, which is almost never done in real world. Mr. Piston is a master on putting these stuff in his exercises. I have prepared 2 different solutions staying at a beginner level, one above and one below (I don’t see why I should do the second choice…done just for fun…to see if I could fix the software’s first bad choice)
then playing around a little bit, always in C major, something like that happened, more than once:
unfortunately we cannot see the chord before GBDB so we don’t know where we are coming from, but in C major is not tolerated to have 2 Bs at the same time in a 4 voices chorale, without exceptions. this rule should be TOP priority in this module’s logic.
my suggestion is to replace one of the 2 buttons on the left: they already have 3 steps (flats, no accidentals, sharps). which one? I have seen something “strange” in every case, if you can wait few days I’ll tell you which one returns the best results so you choose which one to sacrifice
Probably it was my mistake, but I have seen that the module sometimes is not generating a new chord when I would expect, but I cannot replicate it now, so I’ll dig a little bit and post about that lately.
lol didn’t know it, never miss an opportunity to show my nature
There does exist a version of this program that will look ahead or backtrack, which is of course what a human would do. For obvious reasons that had to be sacrificed to make this a synth module. Not much to be done about that, I don’t think.
Many of your suggestions are a version the the quite reasonable observation “I don’t like Piston’s rules, there are simpler rules that everyone uses now”. That’s fine, but that is perilously close to being a new module - something I’m not interested in doing at the moment.
I’ve looked into some questionable chord choices when I first wrote this module (1.5 years ago). Usually I found that the reason it wasn’t picking the “obvious” chord is because the obvious choice was violating one of the “rules”. That might be a case where a human would back track to avoid that situation, or might decide to “violate” a rule. Unfortunately Harmony (the module) is not smart enough to do that.
Now, if you think that the “common practice” section of Piston says “never double the leading tone” then certainly that’s a bug!
Anyway, I appreciate the thought you are putting into this. I hope you continue to do so.
I was thinking about a 3-way switch, to fix the default way that the display shows the accidentals. I just realize that maybe could be easier for you to add a D flat choice in the menu, close to C#, showing the correct accidentals
I don’t want your module to do what I like, W.Piston (italian edition, page 24):
“first practical rule: if 2 triads have one or more common notes, these common notes will be repeated by the same voices; the other voices will go to the remaining notes of the chord, making the closest possible movement”
“second practical rule: if 2 triads have no common notes, [with triads they mean chords, now we see why] the 3 upper voices will move in the opposite direction of the lowest one (bass), always moving to the closest possible position”
“exception on 5 to 6: leading tone goes up, the other 2 voices go down to the closest possible position…always when the soprano has the leading tone, otherwise we can use the second practical rule or this exeption”
it sounds like an exeption, but it is not: it is one of the first rules we are told to always follow. if we don’t follow this rule we have big mistakes. indeed you learn this in the very beginning of the classes. look at the examples (ordinary, ordinary, to be avoided, rare): 5 to 6 are always in the fundamental state, and there’s no need to invert one of them, not even for Piston. a beginner is told to never write a second inversion of the 5th or the first inversion of the 6th, because we clash on exeptions.
this leads to my default suggestions: narrow range and so on (see above), it’s not my taste.
I am going to start testing the module with 1 6 4 2 5 1 (easiest) progression in C major and see what it returns on different switch settings, then I’ll take a look to the 5 to 6 movement. I think it is a starting point, and somewhere we will stop to take a look at the minor progressions.
I am not a teacher, but it would be a pleasure for me to help if possible
And that’s fine. You can probably go to the “issues” database and use it, but I’m happy to move things from community forum to github issues. I prefer to keep things there, because it’s easy for me to lose things here in the community forum.