g0dd4rd / Note-Generator

GNU General Public License v3.0
0 stars 0 forks source link

Incorrect notes & starting note: analysis #4

Open HexeDecima opened 2 months ago

HexeDecima commented 2 months ago

I figured out that the starting note is wrong when modes are anything different than Ionian and in certain cases, the sharps/flats parent set is not correctly identified. The accidentals are most of the time chosen from the correct parent set but the starting note seems to be the 1st degree of the Ionian mode from the given note. E.g. D aeolian shows flats but starts counting as if it's D ionian, in which case the aeolian mode relative to root D happens to be B minor, so the absolute values of the notes are actually Bm aeolian but shown with enharmonic flat notation: B, Db, D, E, Gb, G, A is enharmonic to B, C#, D, E, F#, G, A

Incorrectly identifying the sharp/flat set: B ionian gives B, Db, Eb, E, Gb, Ab, Bb which have correct absolute value but enharmonic flat notation. The correct one should be B, C#, D#, E, F#, G#, A#.

Another important example with both mode offset and wrong accidentals is Bb phrygian. It gives D, Eb, F, G, A, Bb, C which is correctly identified phrygian mode but starts from D, which is the relative of B if we consider D ionian/B aeolian. In this case, the mode formula is correct, the key signature is Bb major (somehow detecting Ionian formula for the accidentals) and then using this note set to render phrygian mode from the relative minor of the rendered starting note. My assumption is that perhaps somehow B and Bb aren't identified properly, causing B to get associated with minor, then logically associating D as the relative major, which would give the wrong starting note.

Mode displacement in clearer form:

g0dd4rd commented 1 month ago

All of that is correct. There are two things: First, wrong note names in some cases. I believe that is clear. Second issue stems from how the modes are derived. I know of two ways how to derive a mode from natural major scale (am sure there are more). For example, A aeolian:

  1. derived from A natural major, flattening the 3rd, 6th and 7th: A B C#D E F# G# -> A B C D E F

  2. derived from C natural major, using its 6th degree as a starting point: C D E F G A B C -> A B C D E F G

The program, if you read it carefully, uses the second option. That is counter-intuitive if: a) the help doesn't mention it b) the source code is not available

There's a version that does what you expect it to do: A aeoilian -> A B C D E F G

It does so by:

  1. figuring out what the parent scale of a given mode is. For example for A aeolian, it identifies C natural major as a parent scale.
  2. figuring out what degree of the parent scale (C natural major) corresponds to the mode name. In the case of A aeolian, the mode name corresponds to the sixth degree of the C natural major.
  3. it then prints the result, which is: A B C D E F G

but I won't release that version, because: a) it still has some note names wrong b) am working on a version that uses different approach and has (hopefully) higher chance to be finally correct