423 lines
8.5 KiB
Python
423 lines
8.5 KiB
Python
import numpy as np
|
|
|
|
# for chord analysis
|
|
NUM2PITCH = {
|
|
0: 'C',
|
|
1: 'C#',
|
|
2: 'D',
|
|
3: 'D#',
|
|
4: 'E',
|
|
5: 'F',
|
|
6: 'F#',
|
|
7: 'G',
|
|
8: 'G#',
|
|
9: 'A',
|
|
10: 'A#',
|
|
11: 'B',
|
|
}
|
|
|
|
# referred to mmt "https://github.com/salu133445/mmt"
|
|
PROGRAM_INSTRUMENT_MAP = {
|
|
# Pianos
|
|
0: "piano",
|
|
1: "piano",
|
|
2: "piano",
|
|
3: "piano",
|
|
4: "electric-piano",
|
|
5: "electric-piano",
|
|
6: "harpsichord",
|
|
7: "clavinet",
|
|
# Chromatic Percussion
|
|
8: "celesta",
|
|
9: "glockenspiel",
|
|
10: "music-box",
|
|
11: "vibraphone",
|
|
12: "marimba",
|
|
13: "xylophone",
|
|
14: "tubular-bells",
|
|
15: "dulcimer",
|
|
# Organs
|
|
16: "organ",
|
|
17: "organ",
|
|
18: "organ",
|
|
19: "church-organ",
|
|
20: "organ",
|
|
21: "accordion",
|
|
22: "harmonica",
|
|
23: "bandoneon",
|
|
# Guitars
|
|
24: "nylon-string-guitar",
|
|
25: "steel-string-guitar",
|
|
26: "electric-guitar",
|
|
27: "electric-guitar",
|
|
28: "electric-guitar",
|
|
29: "electric-guitar",
|
|
30: "electric-guitar",
|
|
31: "electric-guitar",
|
|
# Basses
|
|
32: "bass",
|
|
33: "electric-bass",
|
|
34: "electric-bass",
|
|
35: "electric-bass",
|
|
36: "slap-bass",
|
|
37: "slap-bass",
|
|
38: "synth-bass",
|
|
39: "synth-bass",
|
|
# Strings
|
|
40: "violin",
|
|
41: "viola",
|
|
42: "cello",
|
|
43: "contrabass",
|
|
44: "strings",
|
|
45: "strings",
|
|
46: "harp",
|
|
47: "timpani",
|
|
# Ensemble
|
|
48: "strings",
|
|
49: "strings",
|
|
50: "synth-strings",
|
|
51: "synth-strings",
|
|
52: "voices",
|
|
53: "voices",
|
|
54: "voices",
|
|
55: "orchestra-hit",
|
|
# Brass
|
|
56: "trumpet",
|
|
57: "trombone",
|
|
58: "tuba",
|
|
59: "trumpet",
|
|
60: "horn",
|
|
61: "brasses",
|
|
62: "synth-brasses",
|
|
63: "synth-brasses",
|
|
# Reed
|
|
64: "soprano-saxophone",
|
|
65: "alto-saxophone",
|
|
66: "tenor-saxophone",
|
|
67: "baritone-saxophone",
|
|
68: "oboe",
|
|
69: "english-horn",
|
|
70: "bassoon",
|
|
71: "clarinet",
|
|
# Pipe
|
|
72: "piccolo",
|
|
73: "flute",
|
|
74: "recorder",
|
|
75: "pan-flute",
|
|
76: None,
|
|
77: None,
|
|
78: None,
|
|
79: "ocarina",
|
|
# Synth Lead
|
|
80: "lead",
|
|
81: "lead",
|
|
82: "lead",
|
|
83: "lead",
|
|
84: "lead",
|
|
85: "lead",
|
|
86: "lead",
|
|
87: "lead",
|
|
# Synth Pad
|
|
88: "pad",
|
|
89: "pad",
|
|
90: "pad",
|
|
91: "pad",
|
|
92: "pad",
|
|
93: "pad",
|
|
94: "pad",
|
|
95: "pad",
|
|
# Synth Effects
|
|
96: None,
|
|
97: None,
|
|
98: None,
|
|
99: None,
|
|
100: None,
|
|
101: None,
|
|
102: None,
|
|
103: None,
|
|
# Ethnic
|
|
104: "sitar",
|
|
105: "banjo",
|
|
106: "shamisen",
|
|
107: "koto",
|
|
108: "kalimba",
|
|
109: "bag-pipe",
|
|
110: "violin",
|
|
111: "shehnai",
|
|
# Percussive
|
|
112: None,
|
|
113: None,
|
|
114: "steel-drums",
|
|
115: None,
|
|
116: None,
|
|
117: "melodic-tom",
|
|
118: "synth-drums",
|
|
119: "synth-drums",
|
|
# Sound effects
|
|
120: None,
|
|
121: None,
|
|
122: None,
|
|
123: None,
|
|
124: None,
|
|
125: None,
|
|
126: None,
|
|
127: None,
|
|
}
|
|
|
|
# referred to mmt "https://github.com/salu133445/mmt"
|
|
INSTRUMENT_PROGRAM_MAP = {
|
|
# Pianos
|
|
"piano": 0,
|
|
"electric-piano": 4,
|
|
"harpsichord": 6,
|
|
"clavinet": 7,
|
|
# Chromatic Percussion
|
|
"celesta": 8,
|
|
"glockenspiel": 9,
|
|
"music-box": 10,
|
|
"vibraphone": 11,
|
|
"marimba": 12,
|
|
"xylophone": 13,
|
|
"tubular-bells": 14,
|
|
"dulcimer": 15,
|
|
# Organs
|
|
"organ": 16,
|
|
"church-organ": 19,
|
|
"accordion": 21,
|
|
"harmonica": 22,
|
|
"bandoneon": 23,
|
|
# Guitars
|
|
"nylon-string-guitar": 24,
|
|
"steel-string-guitar": 25,
|
|
"electric-guitar": 26,
|
|
# Basses
|
|
"bass": 32,
|
|
"electric-bass": 33,
|
|
"slap-bass": 36,
|
|
"synth-bass": 38,
|
|
# Strings
|
|
"violin": 40,
|
|
"viola": 41,
|
|
"cello": 42,
|
|
"contrabass": 43,
|
|
"harp": 46,
|
|
"timpani": 47,
|
|
# Ensemble
|
|
"strings": 49,
|
|
"synth-strings": 50,
|
|
"voices": 52,
|
|
"orchestra-hit": 55,
|
|
# Brass
|
|
"trumpet": 56,
|
|
"trombone": 57,
|
|
"tuba": 58,
|
|
"horn": 60,
|
|
"brasses": 61,
|
|
"synth-brasses": 62,
|
|
# Reed
|
|
"soprano-saxophone": 64,
|
|
"alto-saxophone": 65,
|
|
"tenor-saxophone": 66,
|
|
"baritone-saxophone": 67,
|
|
"oboe": 68,
|
|
"english-horn": 69,
|
|
"bassoon": 70,
|
|
"clarinet": 71,
|
|
# Pipe
|
|
"piccolo": 72,
|
|
"flute": 73,
|
|
"recorder": 74,
|
|
"pan-flute": 75,
|
|
"ocarina": 79,
|
|
# Synth Lead
|
|
"lead": 80,
|
|
# Synth Pad
|
|
"pad": 88,
|
|
# Ethnic
|
|
"sitar": 104,
|
|
"banjo": 105,
|
|
"shamisen": 106,
|
|
"koto": 107,
|
|
"kalimba": 108,
|
|
"bag-pipe": 109,
|
|
"shehnai": 111,
|
|
# Percussive
|
|
"steel-drums": 114,
|
|
"melodic-tom": 117,
|
|
"synth-drums": 118,
|
|
}
|
|
|
|
FINED_PROGRAM_INSTRUMENT_MAP ={
|
|
# Pianos
|
|
0: "Acoustic-Grand-Piano",
|
|
1: "Bright-Acoustic-Piano",
|
|
2: "Electric-Grand-Piano",
|
|
3: "Honky-Tonk-Piano",
|
|
4: "Electric-Piano-1",
|
|
5: "Electric-Piano-2",
|
|
6: "Harpsichord",
|
|
7: "Clavinet",
|
|
|
|
# Chromatic Percussion
|
|
8: "Celesta",
|
|
9: "Glockenspiel",
|
|
10: "Music-Box",
|
|
11: "Vibraphone",
|
|
12: "Marimba",
|
|
13: "Xylophone",
|
|
14: "Tubular-Bells",
|
|
15: "Dulcimer",
|
|
|
|
# Organs
|
|
16: "Drawbar-Organ",
|
|
17: "Percussive-Organ",
|
|
18: "Rock-Organ",
|
|
19: "Church-Organ",
|
|
20: "Reed-Organ",
|
|
21: "Accordion",
|
|
22: "Harmonica",
|
|
23: "Tango-Accordion",
|
|
|
|
# Guitars
|
|
24: "Acoustic-Guitar-nylon",
|
|
25: "Acoustic-Guitar-steel",
|
|
26: "Electric-Guitar-jazz",
|
|
27: "Electric-Guitar-clean",
|
|
28: "Electric-Guitar-muted",
|
|
29: "Overdriven-Guitar",
|
|
30: "Distortion-Guitar",
|
|
31: "Guitar-harmonics",
|
|
|
|
# Basses
|
|
32: "Acoustic-Bass",
|
|
33: "Electric-Bass-finger",
|
|
34: "Electric-Bass-pick",
|
|
35: "Fretless-Bass",
|
|
36: "Slap-Bass-1",
|
|
37: "Slap-Bass-2",
|
|
38: "Synth-Bass-1",
|
|
39: "Synth-Bass-2",
|
|
|
|
# Strings & Orchestral
|
|
40: "Violin",
|
|
41: "Viola",
|
|
42: "Cello",
|
|
43: "Contrabass",
|
|
44: "Tremolo-Strings",
|
|
45: "Pizzicato-Strings",
|
|
46: "Orchestral-Harp",
|
|
47: "Timpani",
|
|
|
|
# Ensemble
|
|
48: "String-Ensemble-1",
|
|
49: "String-Ensemble-2",
|
|
50: "Synth-Strings-1",
|
|
51: "Synth-Strings-2",
|
|
52: "Choir-Aahs",
|
|
53: "Voice-Oohs",
|
|
54: "Synth-Voice",
|
|
55: "Orchestra-Hit",
|
|
|
|
# Brass
|
|
56: "Trumpet",
|
|
57: "Trombone",
|
|
58: "Tuba",
|
|
59: "Muted-Trumpet",
|
|
60: "French-Horn",
|
|
61: "Brass-Section",
|
|
62: "Synth-Brass-1",
|
|
63: "Synth-Brass-2",
|
|
|
|
# Reeds
|
|
64: "Soprano-Sax",
|
|
65: "Alto-Sax",
|
|
66: "Tenor-Sax",
|
|
67: "Baritone-Sax",
|
|
68: "Oboe",
|
|
69: "English-Horn",
|
|
70: "Bassoon",
|
|
71: "Clarinet",
|
|
|
|
# Pipes
|
|
72: "Piccolo",
|
|
73: "Flute",
|
|
74: "Recorder",
|
|
75: "Pan-Flute",
|
|
76: "Blown-Bottle",
|
|
77: "Shakuhachi",
|
|
78: "Whistle",
|
|
79: "Ocarina",
|
|
|
|
# Synth Lead
|
|
80: "Lead-1-square",
|
|
81: "Lead-2-sawtooth",
|
|
82: "Lead-3-calliope",
|
|
83: "Lead-4-chiff",
|
|
84: "Lead-5-charang",
|
|
85: "Lead-6-voice",
|
|
86: "Lead-7-fifths",
|
|
87: "Lead-8-bass+lead",
|
|
|
|
# Synth Pad
|
|
88: "Pad-1-new-age",
|
|
89: "Pad-2-warm",
|
|
90: "Pad-3-polysynth",
|
|
91: "Pad-4-choir",
|
|
92: "Pad-5-bowed",
|
|
93: "Pad-6-metallic",
|
|
94: "Pad-7-halo",
|
|
95: "Pad-8-sweep",
|
|
|
|
# Effects
|
|
96: "FX-1-rain",
|
|
97: "FX-2-soundtrack",
|
|
98: "FX-3-crystal",
|
|
99: "FX-4-atmosphere",
|
|
100: "FX-5-brightness",
|
|
101: "FX-6-goblins",
|
|
102: "FX-7-echoes",
|
|
103: "FX-8-sci-fi",
|
|
|
|
# Ethnic & Percussion
|
|
104: "Sitar",
|
|
105: "Banjo",
|
|
106: "Shamisen",
|
|
107: "Koto",
|
|
108: "Kalimba",
|
|
109: "Bag-pipe",
|
|
110: "Fiddle",
|
|
111: "Shanai",
|
|
|
|
# Percussive
|
|
112: "Tinkle-Bell",
|
|
113: "Agogo",
|
|
114: "Steel-Drums",
|
|
115: "Woodblock",
|
|
116: "Taiko-Drum",
|
|
117: "Melodic-Tom",
|
|
118: "Synth-Drum",
|
|
119: "Reverse-Cymbal",
|
|
|
|
# Sound Effects
|
|
120: "Guitar-Fret-Noise",
|
|
121: "Breath-Noise",
|
|
122: "Seashore",
|
|
123: "Bird-Tweet",
|
|
124: "Telephone-Ring",
|
|
125: "Helicopter",
|
|
126: "Applause",
|
|
127: "Gunshot"
|
|
}
|
|
|
|
|
|
REGULAR_NUM_DENOM = [(1, 1), (1, 2), (2, 2), (3, 2), (4, 2),
|
|
(1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4),
|
|
(1, 8), (2, 8), (3, 8), (4, 8), (5, 8), (6, 8), (7, 8), (8, 8), (9, 8), (11, 8), (12, 8)]
|
|
CORE_NUM_DENOM = [(1, 1), (1, 2), (2, 2), (4, 2),
|
|
(1, 4), (2, 4), (3, 4), (4, 4), (5, 4),
|
|
(1, 8), (2, 8), (3, 8), (6, 8), (9, 8), (12, 8)]
|
|
VALID_TIME_SIGNATURES = ['time_signature_' + str(x[0]) + '/' + str(x[1]) for x in REGULAR_NUM_DENOM]
|
|
|
|
# cover possible time signatures
|
|
REGULAR_TICKS_PER_BEAT = [48, 96, 192, 384, 120, 240, 480, 960, 256, 512, 1024]
|