Closed ohmycode closed 2 years ago
Hello!
Yes, there are an inconsistency between how chrome is used. Basically the "chroma" for scales are always "interval based", and that means that ALWAYS the first interval will be 1P and therefor the leftmost number of the chroma will be 1.
I know this is confusing. That's a consequence of using string for chroma instead of more specific data structure. I'll try to find a solution or mitigation.
Ah! now I understand! I thought that the normalised representation could be based on the intervals (or each scale shifted to C as root note). But I guess it depends on the use case to see what makes more sense. Anyway, thank you for the explanation!
PS: I think it's a really cool idea to use a bitmask as datastructure for scale notes.
Hey, I just came across this too and am wrapping my head around it. Am I understanding correctly?
In my projects I've been referring to the bitset left-aligned to the root as the "shape". Maybe it'd make sense to have four properties:
chroma
normalizedChroma
shape
normalizedShape
This way scale and chord info objects could carry info about both.
Hi @micahscopes, the chroma for scales (and I guess chords as well) are based on intervals, not on the chroma/pitch-class. An interval set for any scale always starts on 1P, therefore they don't have to be rotated to have a "1" at the first position.
So for example the C-Pentatonic: intervals: ["1P", "2M", "3M", "5P", "6M"], chroma: "101010010100"
@ohmycode I think we are getting at the same thing? I don't mean that under the hood there is a literal rotation of the chroma somewhere in the code (maybe there is, maybe not)... just that starting with the pitchclass-chroma of a given scale and rotating so that the tonic is at the left-most bit would give the same result as building off of the intervals directly.
@micahscopes yeah, you're right, that should result in the same pattern. And that is my initial point:
that means, all 12 scales of the same scale type will all have the same chroma, which makes me wonder what normalized
could be used for, apart of generating a setNum
integer.
@danigb maybe adding a scaleType chroma (based on the intervals) in addition to a scale chroma (based on the actual pitch classes) would be a solution.
makes me wonder what normalized could be used for @ohmycode Basically is a way to detect modes (aka: rotations). For example, major and dorian shares the same "shape" but rotated: they have the same normalized chroma.
scaleChroma (or pitch class chroma) vs scaleTypeChroma (or intervals chroma) maybe are good starting point... 🤔
@micahscopes If I understand correctly, chroma
and shape
are the same as pitch class chroma and interval chroma, right? The normalized chroma is a different thing: is an arbitrary way to select only one chroma from all posible rotations.
Hi @danigb, I stumbled across the following issue:
returns:
I think neither the chroma nor the normalized chroma is correct.
whereas
returns
011010110101
which works as expected.I tried to find the bug, but couldn't find it.
Any Idea?