Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add and edit scale #44

Open
sugizo opened this issue Sep 5, 2020 · 6 comments
Open

add and edit scale #44

sugizo opened this issue Sep 5, 2020 · 6 comments

Comments

@sugizo
Copy link

sugizo commented Sep 5, 2020

music-module.ts
edit

  • the sequence of diatonic scale, because the 1st index on diatonic scale should goes to major scale / ionian mode
  • rename the jazzminor into ascending melodic minor scale (source wikipedia), it's more common and the sequence between it's mode

add

let majorPentatonicModes: Mode[] = [
    { name: 'Major Pentatonic', index: 0 },
    { name: 'Egyptian', index: 2 },
    { name: 'Blues Minor', index: 4 },
    { name: 'Blues Major', index: 7 },
    { name: 'Minor Pentatonic', index: 9 },
];

let hirajoshiModes: Mode[] = [
    { name: 'Hirajoshi', index: 0 },
    { name: 'Iwato', index: 6 },
    { name: 'In', index: 11 },
];

let majorHexatonicModes: Mode[] = [
    { name: 'Major Hexatonic', index: 0 },
    { name: 'Minor Hexatonic', index: 2 },
];

let diatonicModes: Mode[] = [
    { name: 'Major / Ionian', index: 0 },
    { name: 'Dorian', index: 2 },
    { name: 'Phrygian', index: 4 },
    { name: 'Lydian', index: 5 },
    { name: 'Mixolydian', index: 7 },
    { name: 'N Minor / Aeolian', index: 9 },
    { name: 'Locrian', index: 11 },
];

let doubleHarmonicMajorModes: Mode[] = [
    { name: 'Double Harmonic Major', index: 0 },
    { name: 'Lydian ♯2 ♯6', index: 1 },
    { name: 'Ultraphrygian', index: 4 },
    { name: 'Hungarian / Gypsy Minor', index: 5 },
    { name: 'Oriental', index: 7 },
    { name: 'Ionian ♯2 ♯5', index: 8 },
    { name: 'Locrian ♭♭3  ♭♭7', index: 11 },
];

let harmonicMajorModes: Mode[] = [
    { name: 'Harmonic Major', index: 0 },
    { name: 'Dorian ♭5', index: 2 },
    { name: 'Phrygian ♭4', index: 4 },
    { name: 'Lydian ♭3', index: 5 },
    { name: 'Mixolydian ♭2', index: 7 },
    { name: 'Lydian Augmented #2', index: 8 },
    { name: 'Locrian ♭♭7', index: 11 },
];

let harmonicMinorModes: Mode[] = [
    { name: 'Harmonic Minor', index: 0 },
    { name: 'Locrian ♯6', index: 2 },
    { name: 'Ionian ♯5', index: 3 },
    { name: 'Dorian ♯4', index: 5 },
    { name: 'Phrygian Dominant', index: 7 },
    { name: 'Lydian ♯2', index: 8 },
    { name: 'Superlocrian', index: 11 },
];

let ascendingMelodicMinorModes: Mode[] = [
    { name: 'Ascending Melodic Minor', index: 0 },
    { name: 'Assyrian', index: 2 },
    { name: 'Lydian Augmented', index: 3 },
    { name: 'Lydian Dominant', index: 5 },
    { name: 'Mixolydian ♭6', index: 7 },
    { name: 'Locrian ♮2', index: 9 },
    { name: 'Altered scale', index: 11 },
];

let diminishedModes: Mode[] = [
    { name: 'Whole Half Diminished', index: 0 },
    { name: 'Half Whole Diminished', index: 2 },
];

let majorBebopModes: Mode[] = [
    { name: 'Major Bebop', index: 0 },
    { name: 'Harmonic Minor Bebop', index: 9 },
];

let dominantBebopModes: Mode[] = [
    { name: 'Dominant Bebop', index: 0 },
    { name: 'Locrian Bebop', index: 4 },
    { name: 'Dorian Bebop', index: 7 },
];

export let scaleFamily: ScaleFamily[] = [
    { name: "Major Pentatonic", intervals: new mod.Mod([true, false, true, false, true, false, false, true, false, true, false, false]), modes: majorPentatonicModes, defaultModeIndex: 0 },
    { name: "Hirajoshi", intervals: new mod.Mod([true, false, false, false, true, false, true, true, false, false, false, true]), modes: hirajoshiModes, defaultModeIndex: 0 },
    { name: "Major Hexatonic", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, false, false]), modes: majorHexatonicModes, defaultModeIndex: 0 },
    { name: "Augmented", intervals: new mod.Mod([true, false, false, true, true, false, false, true, true, false, false, true]), modes: [{ name: 'Augmented', index: 0}], defaultModeIndex: 0 },
    { name: "Blues", intervals: new mod.Mod([true, false, false, true, false, true, true, true, false, false, true, false]), modes: [{ name: 'Blues', index: 0}], defaultModeIndex: 0 },
    { name: "Prometheus", intervals: new mod.Mod([true, false, true, false, true, false, true, false, false, true, true, false]), modes: [{ name: 'Prometheus', index: 0}], defaultModeIndex: 0 },
    { name: "TriTone", intervals: new mod.Mod([true, true, false, false, true, false, true, true, false, false, true, false]), modes: [{ name: 'TriTone', index: 0}], defaultModeIndex: 0 },
    { name: "Whole Tone", intervals: new mod.Mod([true, false, true, false, true, false, true, false, true, false, true, false]), modes: [{ name: 'Whole Tone', index: 0}], defaultModeIndex: 0 },
    { name: "Diatonic", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, false, true]), modes: diatonicModes, defaultModeIndex: 0 },
    { name: "Double Harmonic Major", intervals: new mod.Mod([true, true, false, false, true, true, false, true, true, false, false, true]), modes: doubleHarmonicMajorModes, defaultModeIndex: 0 },
    { name: "Harmonic Major", intervals: new mod.Mod([true, false, true, false, true, true, false, true, true, false, false, true]), modes: harmonicMajorModes, defaultModeIndex: 0 },
    { name: "Harmonic Minor", intervals: new mod.Mod([true, false, true, true, false, true, false, true, true, false, false, true]), modes: harmonicMinorModes, defaultModeIndex: 0 },
    { name: "Ascending Melodic Minor", intervals: new mod.Mod([true, false, true, true, false, true, false, true, false, true, false, true]), modes: ascendingMelodicMinorModes, defaultModeIndex: 0 },
    { name: "Diminished", intervals: new mod.Mod([true, false, true, true, false, true, true, false, true, true, false, true]), modes: diminishedModes, defaultModeIndex: 0 },
    { name: "Major Bebop", intervals: new mod.Mod([true, false, true, false, true, true, false, true, true, true, false, true]), modes: majorBebopModes, defaultModeIndex: 0 },
    { name: "Dominant Bebop", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, true, true]), modes: dominantBebopModes, defaultModeIndex: 0 },
    { name: "Melodic Minor Bebop", intervals: new mod.Mod([true, false, true, true, false, true, false, true, true, true, false, true]), modes: [{ name: 'Melodic Minor Bebop', index: 0}], defaultModeIndex: 0 },
    { name: "Phrygian Dominant Bebop", intervals: new mod.Mod([true, true, false, false, true, true, false, true, true, false, true, true]), modes: [{ name: 'Phrygian Dominant Bebop', index: 0}], defaultModeIndex: 0 },
];

thanks

@mikehadlow
Copy link
Owner

Thanks, this is excellent, I'll add all these.

@mikehadlow
Copy link
Owner

Question about this:
"the sequence of diatonic scale, because the 1st index on diatonic scale should goes to major scale / ionian mode"
So, one of the really nice things I've learnt from making guitar dashboard is the 'harmonic progress' of the diatonic modes. I put them in the order:
Lydian - Major - Mixolydian - Dorian - N Minor - Phrygian - Locrian
because it shows the progression from more major modes to more minor modes. Each step requires the change of just one interval, and this is beautifully displayed on the circle of fifths as the highlighted notes moves counter clockwise. We'd lose that by ordering the modes in 'starting note order'. (although I now realise that I haven't followed this principle for the other modes). What do you think?

@sugizo
Copy link
Author

sugizo commented Sep 7, 2020

when people learn the scale usually put the root note e.g.
c major scale consist of c-d-e-f-g-a-b
d dorian consist of d-e-f-g-a-b-c
e phrygian consist of e-f-g-a-b-c-d
f lydian consist of f-g-a-b-c-d-e
g mixolydian consist of g-a-b-c-d-e-f
a aeolian consist of a-b-c-d-e-f-g
b locrian consist of b-c-d-e-f-g-a

for the same reason want to revise my previous proposal change
from

let hirajoshiModes: Mode[] = [
    { name: 'Hirajoshi', index: 0 },
    { name: 'Iwato', index: 6 },
    { name: 'In', index: 11 },
];

    { name: "hirajoshi", intervals: new mod.Mod([true, false, false, false, true, false, true, true, false, false, false, true]), modes: hirajoshiModes, defaultModeIndex: 0 },

into

let inModes: Mode[] = [
    { name: 'In', index: 0 },
    { name: 'Hirajoshi', index: 1 },
    { name: 'Iwato', index: 7 },
];

    { name: "In", intervals: new mod.Mod([true, true, false, false, false, true, false, true, true, false, false, false]), modes: inModes, defaultModeIndex: 0 },

in mode consist of e-f-a-b-c
hirajoshi mode consist of f-a-b-c-e
iwato mode consist of b-c-e-f-a

ref
https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes

thanks

@mikehadlow
Copy link
Owner

OK, I think both approaches are valid then: either modes ordered by ascending root note, or by fifths (as the diatonic modes are currently). I might add an option here.

@sugizo
Copy link
Author

sugizo commented Sep 9, 2020

base on wiki link above add some scale

    let neapolitanMinorModes: Mode[] = [
        { name: 'Neapolitan Minor', index: 0 },
        { name: 'Gypsy', index: 5 },
    ];

        { name: "Insen", intervals: new mod.Mod([true, true, false, false, false, true, false, true, false, false, true, false]), modes: [{ name: 'Insen', index: 0}], defaultModeIndex: 0 },
        { name: "Neapolitan Minor", intervals: new mod.Mod([true, true, false, true, false, true, false, true, true, false, false, true]), modes: neapolitanMinorModes, defaultModeIndex: 0 },
        { name: "Neapolitan Major", intervals: new mod.Mod([true, true, false, true, false, true, false, true, false, true, false, true]), modes: [{ name: 'Neapolitan Major', index: 0}], defaultModeIndex: 0 },
        { name: "Flamenco", intervals: new mod.Mod([true, true, false, false, true, true, false, true, true, false, false, true]), modes: [{ name: 'Flamenco', index: 0}], defaultModeIndex: 0 },
        { name: "Persian", intervals: new mod.Mod([true, true, false, false, true, true, true, false, true, false, false, true]), modes: [{ name: 'Persian', index: 0}], defaultModeIndex: 0 },
        { name: "Enigmatic", intervals: new mod.Mod([true, true, false, false, true, false, true, false, true, false, true, true]), modes: [{ name: 'Enigmatic', index: 0}], defaultModeIndex: 0 },
        { name: "Hungarian Major", intervals: new mod.Mod([true, false, false, true, true, false, true, true, false, true, true, false]), modes: [{ name: 'Hungarian Major', index: 0}], defaultModeIndex: 0 },
        { name: "Ukrainian Dorian", intervals: new mod.Mod([true, false, true, true, false, false, true, true, false, true, true, false]), modes: [{ name: 'Ukrainian Dorian', index: 0}], defaultModeIndex: 0 },
        { name: "Major Locrian", intervals: new mod.Mod([true, false, true, false, true, true, true, false, true, false, true, false]), modes: [{ name: 'Major Locrian', index: 0}], defaultModeIndex: 0 },

thanks

@sugizo
Copy link
Author

sugizo commented Sep 17, 2020

./src/music-module.ts

    let bluesHexatonicModes: Mode[] = [
        { name: 'Blues Major Hexatonic', index: 0 },
        { name: 'Blues Minor Hexatonic', index: 9 },
    ];

        { name: "Blues Major Hexatonic", intervals: new mod.Mod([true, false, true, true, true, false, false, true, false, true, false, false]), modes: bluesHexatonicModes, defaultModeIndex: 0 },

ref
https://en.wikipedia.org/wiki/Blues_scale#Hexatonic

thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants