Yes, if at all possible! I think that would be better!
Don’t worry… this is a monstrous task and it is a good idea to re-cap what you have done and how you have done it. If nothing else, this is probably a great exercise just for your own benefit
As you can see it has 12 entries, with 3 notes in each entry (except the last one). This represents all the notes and their enharmonics.
The degrees also have an equivalent set, with 12 entries and all possible types of degrees within an octave. Compound intervals are calculated to match these.
I then use the Natural scale + the Degrees array to infer which single notes to show. This ensures the diatonic rule of not repeating letters while also covering non-diatonic scales
C Natural Scale = {
1: c,
2: d,
3: e,
4: f,
5: g,
6: a,
7: b,
8: c,
}
Coming from the Scale Degrees I know the note with the corresponding index should start with that given note. Example: 3.3b on the scale degrees corresponds to the 3.e on the Natural scale.
From the example, I know the 3rd degree should start with an e. On the scale notes, 3rd degree, I have [‘d#’, ‘eb’, ‘fbb’]. The only one that starts with ‘e’ is ‘eb’.
So at the end of these calculations I get to “c d eb f g ab bb c”
To create Chords I follow the exact same pattern.
Ok, now to onto Scale derivations on the Chords page.
Using the algorithm explained on the Scales segment, I come to “c eb g” (and the corresponding Note indexes: 1, 4, 8)
Using the note indexes (previously I was using just the notes, but with note indexes I cover all the enharmonics), I run through all the scales I have configured on the app and check which ones contain those note indexes
Now onto Chord derivations on the Scales page.
Every scale has N notes. So I do a loop through all the notes/degrees on the scale
For the first mode, I use the scale degrees. (1 2 3b 4 5 6b 7b 8). I run it through the note-index algorithm and run through all the chords defined on the app to find matches.
For the second mode, I start the scale from the second degree and calculate the degrees from there, which now has the following degrees: (1 2b 3b 4 5b 6b 7b 8), I run it through the algorithm to get the note indexes and run through all the chords defined on the app to find matches.
etc until I reach the last mode.
Addendum: I’m not checking for enharmonics yet on the chord derivations!
I hope this clears a bit of what’s going on under the hood. I also can see how this can be unhelpful and create more confusion
Just want to second this notion @gcancella - the app is looking really cool, but I think given that you’re still learning all the theory stuff, you should get someone with that expertise to consult with you more thoroughly. I don’t have the bandwidth, but maybe @Gio would be up for talking about that? I’m sure there are a lot of theory professors looking for work right now too!
I do not have anything valuable for the theory discussion but again: great work with the tool. Really comes along great. Hopefully someone can help figuring out the enharmonics and check the tool overall. It’s just not me
Thank you for your words, @JoshFossgreen. I’m sure there are, and would be the optimal path for the tool of course. Unfortunately this is a non-profit and non-funded tool, it’s just something I’m doing on my free time and I simply don’t have the means to pay for professional consultancy, at least on a ongoing basis. Maybe when it reaches the maturity, in terms of features I’m aiming for, I can raise funds for a one-shot kind of thing.
Ahaha, actually I was thinking of you when I wrote that
Thank you @Gio for your availability! I’ll gather my questions and send you a message. If you can help, great, if not I won’t hold it against you .
This is a lovely concept. One of those that I’m sorry I didn’t think about. Actually I have some stuff color related, but it’s note oriented and not interval oriented.
My birthday is on the 9th, I think I will order myself a little gift.
Needed a refresher on notes and chord locations on the fretboard. This app was great before, but even better now - nice quick visual that I needed for it to all come back! Thanks
Yep and yep! Yeah it has a lot of performance issues I haven’t found the will to tackle yet.
It’s very javascript intensive too, which doesn’t help. I might have to prerrender some of the stuff before deploy. The scales/chords and their derivations etc are all calculated on the fly, and that could be pre-calculated quite easily.
Having the entire bootstrap loaded also doesn’t help and is unnecessary, I plan to discard bootstrap entirely once I leave the alpha version and have my own (mini) design system implementend.
This all began as a prototype/proof of concept for the fretboard component only, it grew out of hand quite quickly as I got excited with it and started implementing more and more features.
I haven’t done any work with Vue.js but if it’s anything like React / Angular it seems like you have a lot of unnecessary re-rendering going on. Try to decouple your components using some sort of Flex (Redux) architecture and use memoization (Reselect) to prevent unnecessary renders.