Files
2025-09-08 14:49:28 +08:00

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]