139 lines
3.6 KiB
Go
139 lines
3.6 KiB
Go
package main
|
|
|
|
import "strings"
|
|
|
|
type ChordCategory map[string][]int
|
|
|
|
func GetChordDefinitions() map[string]ChordCategory {
|
|
return map[string]ChordCategory{
|
|
"triads": {
|
|
"major": {0, 4, 7},
|
|
"minor": {0, 3, 7},
|
|
"dim": {0, 3, 6},
|
|
"aug": {0, 4, 8},
|
|
"sus2": {0, 2, 7},
|
|
"sus4": {0, 5, 7},
|
|
"5": {0, 7},
|
|
},
|
|
"sixths": {
|
|
"6": {0, 4, 7, 9},
|
|
"m6": {0, 3, 7, 9},
|
|
"6/9": {0, 2, 4, 7, 9},
|
|
"m6/9": {0, 2, 3, 7, 9},
|
|
"b6": {0, 4, 7, 8},
|
|
"mb6": {0, 3, 7, 8},
|
|
"b6/9": {0, 2, 4, 7, 8},
|
|
},
|
|
"sevenths": {
|
|
"maj7": {0, 4, 7, 11},
|
|
"7": {0, 4, 7, 10},
|
|
"m7": {0, 3, 7, 10},
|
|
"mmaj7": {0, 3, 7, 11},
|
|
"dim7": {0, 3, 6, 9},
|
|
"m7b5": {0, 3, 6, 10},
|
|
"aug7": {0, 4, 8, 10},
|
|
"augmaj7": {0, 4, 8, 11},
|
|
"7sus4": {0, 5, 7, 10},
|
|
"7sus2": {0, 2, 7, 10},
|
|
"7b5": {0, 4, 6, 10},
|
|
"maj7b5": {0, 4, 6, 11},
|
|
"maj7sus2": {0, 2, 7, 11},
|
|
"maj7sus4": {0, 5, 7, 11},
|
|
},
|
|
"ninths": {
|
|
"9": {0, 2, 4, 7, 10},
|
|
"maj9": {0, 2, 4, 7, 11},
|
|
"m9": {0, 2, 3, 7, 10},
|
|
"mmaj9": {0, 2, 3, 7, 11},
|
|
"7b9": {0, 1, 4, 7, 10},
|
|
"7#9": {0, 3, 4, 7, 10},
|
|
"add9": {0, 2, 4, 7},
|
|
"madd9": {0, 2, 3, 7},
|
|
"9sus4": {0, 2, 5, 7, 10},
|
|
"9b5": {0, 2, 4, 6, 10},
|
|
"7b9b5": {0, 1, 4, 6, 10},
|
|
"7#9b5": {0, 3, 4, 6, 10},
|
|
"7b9#5": {0, 1, 4, 8, 10},
|
|
"7#9#5": {0, 3, 4, 8, 10},
|
|
},
|
|
"elevenths": {
|
|
"11": {0, 2, 4, 5, 7, 10},
|
|
"maj11": {0, 2, 4, 5, 7, 11},
|
|
"m11": {0, 2, 3, 5, 7, 10},
|
|
"7#11": {0, 4, 6, 7, 10},
|
|
"maj7#11": {0, 4, 6, 7, 11},
|
|
"add11": {0, 4, 5, 7},
|
|
"madd11": {0, 3, 5, 7},
|
|
},
|
|
"thirteenths": {
|
|
"13": {0, 2, 4, 7, 9, 10},
|
|
"maj13": {0, 2, 4, 7, 9, 11},
|
|
"m13": {0, 2, 3, 7, 9, 10},
|
|
"7b13": {0, 4, 7, 8, 10},
|
|
},
|
|
}
|
|
}
|
|
|
|
func GetChordAliases() map[string]string {
|
|
return map[string]string{
|
|
"maj": "major", "M": "major",
|
|
"min": "minor", "m": "minor", "-": "minor",
|
|
"diminished": "dim", "\u00b0": "dim",
|
|
"augmented": "aug", "+": "aug",
|
|
"power": "5",
|
|
|
|
"major6": "6", "maj6": "6",
|
|
"minor6": "m6", "min6": "m6", "-6": "m6",
|
|
"6_9": "6/9",
|
|
"flat6": "b6",
|
|
"mflat6": "mb6", "minb6": "mb6", "-b6": "mb6",
|
|
"flat6/9": "b6/9",
|
|
|
|
"major7": "maj7", "M7": "maj7", "\u03947": "maj7", "\u0394": "maj7",
|
|
"dom7": "7", "dominant7": "7", "dominant": "7",
|
|
"min7": "m7", "minor7": "m7", "-7": "m7",
|
|
"m(maj7)": "mmaj7", "min(maj7)": "mmaj7", "mM7": "mmaj7",
|
|
"minmaj7": "mmaj7", "-M7": "mmaj7", "minor-major7": "mmaj7",
|
|
"\u00b07": "dim7", "diminished7": "dim7",
|
|
"\u00f8": "m7b5", "\u00f87": "m7b5", "half-dim": "m7b5",
|
|
"half-dim7": "m7b5", "halfdim": "m7b5", "halfdim7": "m7b5",
|
|
"+7": "aug7", "augmented7": "aug7",
|
|
"+M7": "augmaj7", "+maj7": "augmaj7",
|
|
"maj7#5": "augmaj7", "M7#5": "augmaj7",
|
|
"7sus": "7sus4",
|
|
"majmin7": "7",
|
|
|
|
"dom9": "9", "dominant9": "9",
|
|
"min9": "m9", "minor9": "m9", "-9": "m9",
|
|
"m(maj9)": "mmaj9", "mM9": "mmaj9", "minmaj9": "mmaj9",
|
|
"7flat9": "7b9",
|
|
"7sharp9": "7#9",
|
|
"add2": "add9",
|
|
"madd2": "madd9", "minadd9": "madd9",
|
|
|
|
"dom11": "11", "dominant11": "11",
|
|
"min11": "m11", "minor11": "m11", "-11": "m11",
|
|
"add4": "add11",
|
|
"madd4": "madd11",
|
|
|
|
"dom13": "13", "dominant13": "13",
|
|
"min13": "m13", "minor13": "m13", "-13": "m13",
|
|
"7flat13": "7b13",
|
|
}
|
|
}
|
|
|
|
func ResolveChordName(name string) string {
|
|
name = strings.TrimSpace(name)
|
|
aliases := GetChordAliases()
|
|
if canonical, ok := aliases[name]; ok {
|
|
return canonical
|
|
}
|
|
lower := strings.ToLower(name)
|
|
for alias, canonical := range aliases {
|
|
if strings.ToLower(alias) == lower {
|
|
return canonical
|
|
}
|
|
}
|
|
return name
|
|
}
|