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 }