import music21.interval PITCH_CLASS_MAP = { 'Cbb': 0, 'Cb': 1, 'C': 2, 'C#': 3, 'Cx': 4, 'Dbb': 5, 'Db': 6, 'D': 7, 'D#': 8, 'Dx': 9, 'Ebb': 10, 'Eb': 11, 'E': 12, 'E#': 13, 'Ex': 14, 'Fbb': 15, 'Fb': 16, 'F': 17, 'F#': 18, 'Fx': 19, 'Gbb': 20, 'Gb': 21, 'G': 22, 'G#': 23, 'Gx': 24, 'Abb': 25, 'Ab': 26, 'A': 27, 'A#': 28, 'Ax': 29, 'Bbb': 30, 'Bb': 31, 'B': 32, 'B#': 33, 'Bx': 34 } # SCALE_DEGREE_MAP = { # 'd1', 'M2', 'm7', 'P5', 'AA-4', 'd-3', 'P-5', 'dd1', 'd6', 'dd5', 'd-6', 'M-2', 'A-7', 'AA2', 'd-7', 'dd-3', 'A7', # 'AAA-4', 'M-7', 'A3', 'M-6', 'A-4', 'd4', 'A-3', 'A1', 'dd3', 'd5', 'd7', 'AA6', 'AA5', 'M-3', 'A-6', 'AA-6', # 'AA-2', 'AA4', 'm2', 'd2', 'P-4', 'M3', 'A4', 'm-7', 'P1', 'm6', 'A-2', 'd-2', 'AAA4', 'd-5', 'dd-4', 'dd2', 'dd-2', # 'M7', 'AA-5', 'dd4', 'm3', 'm-6', 'AA-3', 'A6', 'AA7', 'd-4', 'dd-5', 'P4', 'AA1', 'm-3', 'd3', 'A-5', 'A5', 'A2', # 'M6', 'AA-7', 'AA3', 'm-2', 'dd-7', 'dd-6' # } # SCALE_DEGREE_MAP = { # 'A2', 'dd3', 'AA7', 'dd-2', 'm2', 'P8', 'A6', 'AAA4', 'd2', 'm7', 'A3', 'd3', 'A7', 'dd5', 'd5', 'd4', 'AA8', 'M2', # 'm6', 'AA2', 'M7', 'dd4', 'm3', 'A5', 'AA5', 'A4', 'AA3', 'ddd5', 'M3', 'P5', 'd7', 'P4', 'AA1', 'dd7', 'AA6', 'A1', # 'M6', 'AA4', 'A8', 'd6', 'dd2', 'dd6' # } SCALE_DEGREE_MAP = [ 'A2', 'm2', 'P8', 'A6', 'A1', 'A5', 'm7', 'M2', 'm6', 'M7', 'm3', 'M3', 'P5', 'd7', 'P4', 'M6', 'A4', 'd5' ] SCALE_DEGREE_MAP = {interval: i for i, interval in enumerate(SCALE_DEGREE_MAP)} DIATONIC_TO_CHROMATIC_INTERVAL = { 1: (0, 0), 2: (1, 2), 3: (3, 4), 4: (5, 5), 5: (7, 7), 6: (8, 9), 7: (10, 11), 8: (12, 12) } SECONDS_TO_QL = lambda x: x * 2 METRIC_STRENGTH_QUARTER_ONSET = { '6/8': { 0: 1, 0.25: 5, 0.5: 3, 0.75: 5, 1: 4, 1.25: 5, 1.5: 2, 1.75: 5, 2: 3, 2.25: 5, 2.5: 4, 2.75: 5 }, '4/4': { 0: 1, 0.25: 5, 0.5: 4, 0.75: 5, 1: 3, 1.25: 5, 1.5: 4, 1.75: 5, 2: 2, 2.25: 5, 2.5: 4, 2.75: 5, 3: 3, 3.25: 5, 3.5: 4, 3.75: 5 }, '3/4': { 0: 1, 0.25: 5, 0.5: 4, 0.75: 5, 1: 2, 1.25: 5, 1.5: 4, 1.75: 5, 2: 3, 2.25: 5, 2.5: 4, 2.75: 5 }, '9/8': { 0: 1, 0.25: 5, 0.5: 4, 0.75: 5, 1: 4, 1.25: 5, 1.5: 2, 1.75: 5, 2: 4, 2.25: 5, 2.5: 4, 2.75: 5, 3: 3, 3.25: 5, 3.5: 4, 3.75: 5, 4: 4, 4.25: 5 }, '2/4': { 0: 1, 0.125: 5, 0.25: 4, 0.375: 5, 0.5: 3, 0.625: 5, 0.75: 4, 0.875: 5, 1: 2, 1.125: 5, 1.25: 4, 1.375: 5, 1.5: 3, 1.625: 5, 1.75: 4, 1.875: 5 }, '4/2': { 0: 1, 0.5: 5, 1: 4, 1.5: 5, 2: 3, 2.5: 5, 3: 4, 3.5: 5, 4: 2, 4.5: 5, 5: 4, 5.5: 5, 6: 3, 6.5: 5, 7: 4, 7.5: 5 }, '12/8': { 0: 1, 0.25: 5, 0.5: 4, 0.75: 5, 1: 4, 1.25: 5, 1.5: 3, 1.75: 5, 2: 4, 2.25: 5, 2.5: 4, 2.75: 5, 3: 2, 3.25: 5, 3.5: 4, 3.75: 5, 4: 4, 4.25: 5, 4.5: 3, 4.75: 5, 5: 4, 5.25: 5, 5.5: 4, 5.75: 5 }, '2/2': { 0: 1, 0.25: 5, 0.5: 4, 0.75: 5, 1: 3, 1.25: 5, 1.5: 4, 1.75: 5, 2: 2, 2.25: 5, 2.5: 4, 2.75: 5, 3: 3, 3.25: 5, 3.5: 4, 3.75: 5 }, '3/8': { 0: 1, 0.125: 5, 0.25: 4, 0.375: 5, 0.5: 2, 0.625: 5, 0.75: 4, 0.875: 5, 1: 3, 1.125: 5, 1.25: 4, 1.375: 5 }, '3/2': { 0: 1, 0.5: 5, 1: 4, 1.5: 5, 2: 2, 2.5: 5, 3: 4, 3.5: 5, 4: 3, 4.5: 5, 5: 4, 5.5: 5 }, '12/16': { 0: 1, 0.125: 5, 0.25: 4, 0.375: 5, 0.5: 4, 0.625: 5, 0.75: 3, 0.875: 5, 1: 4, 1.125: 5, 1.25: 4, 1.375: 5, 1.5: 2, 1.625: 5, 1.75: 4, 1.875: 5, 2: 4, 2.125: 5, 2.25: 3, 2.375: 5, 2.5: 4, 2.625: 5, 2.75: 4, 2.875: 5 }, '2/1': { 0: 1, 0.5: 5, 1: 4, 1.5: 5, 2: 3, 2.5: 5, 3: 4, 3.5: 5, 4: 2, 4.5: 5, 5: 4, 5.5: 5, 6: 3, 6.5: 5, 7: 4, 7.5: 5 }, '6/16': { 0: 1, 0.125: 5, 0.25: 3, 0.375: 5, 0.5: 4, 0.625: 5, 0.75: 2, 0.875: 5, 1: 3, 1.125: 5, 1.25: 4, 1.375: 5 }, } if __name__ == "__main__": # from music21.pitch import Pitch # from music21.interval import Interval # # alterations = ["", "-", "#", "--", "##"] # note_names = ["A", "B", "C", "D", "E", "F", "G"] # pitches = [Pitch(f"{note_name}{alteration}") for alteration in alterations for note_name in note_names] # options = set() # for _, pitch in enumerate(pitches): # for _, note in enumerate(note_names): # i = Interval(Pitch(note), pitch) # options.add(i.directedName) if i.direction is music21.interval.Direction.ASCENDING else options.add(i.complement.directedName) # print(len(options)) # print(options) print(len(SCALE_DEGREE_MAP)) print(SCALE_DEGREE_MAP)