1 |
|
---|
2 | var GM_info =
|
---|
3 |
|
---|
4 | [ { "val": 0, "name": "Acoustic Grand Piano", "group": "Piano"}
|
---|
5 | , { "val": 1, "name": "Bright Acoustic Piano", "group": "Piano"}
|
---|
6 | , { "val": 2, "name": "Electric Grand Piano", "group": "Piano"}
|
---|
7 | , { "val": 3, "name": "Honky-tonk Piano", "group": "Piano"}
|
---|
8 | , { "val": 4, "name": "Electric Piano 1", "group": "Piano"}
|
---|
9 | , { "val": 5, "name": "Electric Piano 2", "group": "Piano"}
|
---|
10 | , { "val": 6, "name": "Harpsichord", "group": "Piano"}
|
---|
11 | , { "val": 7, "name": "Clavinet", "group": "Piano"}
|
---|
12 |
|
---|
13 | , { "val": 8, "name": "Celesta", "group": "Chromatic Percussion"}
|
---|
14 | , { "val": 9, "name": "Glockenspiel", "group": "Chromatic Percussion"}
|
---|
15 | , { "val": 10, "name": "Music Box", "group": "Chromatic Percussion"}
|
---|
16 | , { "val": 11, "name": "Vibraphone", "group": "Chromatic Percussion"}
|
---|
17 | , { "val": 12, "name": "Marimba", "group": "Chromatic Percussion"}
|
---|
18 | , { "val": 13, "name": "Xylophone", "group": "Chromatic Percussion"}
|
---|
19 | , { "val": 14, "name": "Tubular Bells", "group": "Chromatic Percussion"}
|
---|
20 | , { "val": 15, "name": "Dulcimer", "group": "Chromatic Percussion"}
|
---|
21 |
|
---|
22 | , { "val": 16, "name": "Drawbar Organ", "group": "Organ"}
|
---|
23 | , { "val": 17, "name": "Percussive Organ", "group": "Organ"}
|
---|
24 | , { "val": 18, "name": "Rock Organ", "group": "Organ"}
|
---|
25 | , { "val": 19, "name": "Church Organ", "group": "Organ"}
|
---|
26 | , { "val": 20, "name": "Reed Organ", "group": "Organ"}
|
---|
27 | , { "val": 21, "name": "Accordion", "group": "Organ"}
|
---|
28 | , { "val": 22, "name": "Harmonica", "group": "Organ"}
|
---|
29 | , { "val": 23, "name": "Tango Accordion", "group": "Organ"}
|
---|
30 |
|
---|
31 | , { "val": 24, "name": "Acoustic Guitar (nylon)", "group": "Guitar"}
|
---|
32 | , { "val": 25, "name": "Acoustic Guitar (steel)", "group": "Guitar"}
|
---|
33 | , { "val": 26, "name": "Electric Guitar (jazz)", "group": "Guitar"}
|
---|
34 | , { "val": 27, "name": "Electric Guitar (clean)", "group": "Guitar"}
|
---|
35 | , { "val": 28, "name": "Electric Guitar (muted)", "group": "Guitar"}
|
---|
36 | , { "val": 29, "name": "Overdriven Guitar", "group": "Guitar"}
|
---|
37 | , { "val": 30, "name": "Distortion Guitar", "group": "Guitar"}
|
---|
38 | , { "val": 31, "name": "Guitar Harmonics", "group": "Guitar"}
|
---|
39 |
|
---|
40 | , { "val": 32, "name": "Acoustic Bass", "group": "Bass"}
|
---|
41 | , { "val": 33, "name": "Electric Bass (finger)", "group": "Bass"}
|
---|
42 | , { "val": 34, "name": "Electric Bass (pick)", "group": "Bass"}
|
---|
43 | , { "val": 35, "name": "Fretless Bass", "group": "Bass"}
|
---|
44 | , { "val": 36, "name": "Slap Bass 1", "group": "Bass"}
|
---|
45 | , { "val": 37, "name": "Slap Bass 2", "group": "Bass"}
|
---|
46 | , { "val": 38, "name": "Synth Bass 1", "group": "Bass"}
|
---|
47 | , { "val": 39, "name": "Synth Bass 2", "group": "Bass"}
|
---|
48 |
|
---|
49 | , { "val": 40, "name": "Violin", "group": "Strings"}
|
---|
50 | , { "val": 41, "name": "Viola", "group": "Strings"}
|
---|
51 | , { "val": 42, "name": "Cello", "group": "Strings"}
|
---|
52 | , { "val": 43, "name": "Contrabass", "group": "Strings"}
|
---|
53 | , { "val": 44, "name": "Tremolo Strings", "group": "Strings"}
|
---|
54 | , { "val": 45, "name": "Pizzicato Strings", "group": "Strings"}
|
---|
55 | , { "val": 46, "name": "Orchestral Harp", "group": "Strings"}
|
---|
56 | , { "val": 47, "name": "Timpani", "group": "Strings"}
|
---|
57 |
|
---|
58 | , { "val": 48, "name": "String Ensemble 1", "group": "Ensemble"}
|
---|
59 | , { "val": 49, "name": "String Ensemble 2", "group": "Ensemble"}
|
---|
60 | , { "val": 50, "name": "Synth Strings 1", "group": "Ensemble"}
|
---|
61 | , { "val": 51, "name": "Synth Strings 2", "group": "Ensemble"}
|
---|
62 | , { "val": 52, "name": "Choir Aahs", "group": "Ensemble"}
|
---|
63 | , { "val": 53, "name": "Voice Oohs", "group": "Ensemble"}
|
---|
64 | , { "val": 54, "name": "Synth Choir", "group": "Ensemble"}
|
---|
65 | , { "val": 55, "name": "Orchestra Hit", "group": "Ensemble"}
|
---|
66 |
|
---|
67 | , { "val": 56, "name": "Trumpet", "group": "Brass"}
|
---|
68 | , { "val": 57, "name": "Trombone", "group": "Brass"}
|
---|
69 | , { "val": 58, "name": "Tuba", "group": "Brass"}
|
---|
70 | , { "val": 59, "name": "Muted Trumpet", "group": "Brass"}
|
---|
71 | , { "val": 60, "name": "French Horn", "group": "Brass"}
|
---|
72 | , { "val": 61, "name": "Brass Section", "group": "Brass"}
|
---|
73 | , { "val": 62, "name": "Synth Brass 1", "group": "Brass"}
|
---|
74 | , { "val": 63, "name": "Synth Brass 2", "group": "Brass"}
|
---|
75 |
|
---|
76 | , { "val": 64, "name": "Soprano Sax", "group": "Reed"}
|
---|
77 | , { "val": 65, "name": "Alto Sax", "group": "Reed"}
|
---|
78 | , { "val": 66, "name": "Tenor Sax", "group": "Reed"}
|
---|
79 | , { "val": 67, "name": "Baritone Sax", "group": "Reed"}
|
---|
80 | , { "val": 68, "name": "Oboe", "group": "Reed"}
|
---|
81 | , { "val": 69, "name": "English Horn", "group": "Reed"}
|
---|
82 | , { "val": 70, "name": "Bassoon", "group": "Reed"}
|
---|
83 | , { "val": 71, "name": "Clarinet", "group": "Reed"}
|
---|
84 |
|
---|
85 | , { "val": 72, "name": "Piccolo", "group": "Pipe"}
|
---|
86 | , { "val": 73, "name": "Flute", "group": "Pipe"}
|
---|
87 | , { "val": 74, "name": "Recorder", "group": "Pipe"}
|
---|
88 | , { "val": 75, "name": "Pan Flute", "group": "Pipe"}
|
---|
89 | , { "val": 76, "name": "Blown bottle", "group": "Pipe"}
|
---|
90 | , { "val": 77, "name": "Shakuhachi", "group": "Pipe"}
|
---|
91 | , { "val": 78, "name": "Whistle", "group": "Pipe"}
|
---|
92 | , { "val": 79, "name": "Ocarina", "group": "Pipe"}
|
---|
93 |
|
---|
94 | , { "val": 80, "name": "Lead 1 (square)", "group": "Synth Lead"}
|
---|
95 | , { "val": 81, "name": "Lead 2 (sawtooth)", "group": "Synth Lead"}
|
---|
96 | , { "val": 82, "name": "Lead 3 (calliope)", "group": "Synth Lead"}
|
---|
97 | , { "val": 83, "name": "Lead 4 (chiff)", "group": "Synth Lead"}
|
---|
98 | , { "val": 84, "name": "Lead 5 (charang)", "group": "Synth Lead"}
|
---|
99 | , { "val": 85, "name": "Lead 6 (voice)", "group": "Synth Lead"}
|
---|
100 | , { "val": 86, "name": "Lead 7 (fifths)", "group": "Synth Lead"}
|
---|
101 | , { "val": 87, "name": "Lead 8 (bass + lead)", "group": "Synth Lead"}
|
---|
102 |
|
---|
103 | , { "val": 88, "name": "Pad 1 (new age)", "group": "Synth Pad"}
|
---|
104 | , { "val": 89, "name": "Pad 2 (warm)", "group": "Synth Pad"}
|
---|
105 | , { "val": 90, "name": "Pad 3 (polysynth)", "group": "Synth Pad"}
|
---|
106 | , { "val": 91, "name": "Pad 4 (choir)", "group": "Synth Pad"}
|
---|
107 | , { "val": 92, "name": "Pad 5 (bowed)", "group": "Synth Pad"}
|
---|
108 | , { "val": 93, "name": "Pad 6 (metallic)", "group": "Synth Pad"}
|
---|
109 | , { "val": 94, "name": "Pad 7 (halo)", "group": "Synth Pad"}
|
---|
110 | , { "val": 95, "name": "Pad 8 (sweep)", "group": "Synth Pad"}
|
---|
111 |
|
---|
112 | , { "val": 96, "name": "FX 1 (rain)", "group": "Synth Effects"}
|
---|
113 | , { "val": 97, "name": "FX 2 (soundtrack)", "group": "Synth Effects"}
|
---|
114 | , { "val": 98, "name": "FX 3 (crystal)", "group": "Synth Effects"}
|
---|
115 | , { "val": 99, "name": "FX 4 (atmosphere)", "group": "Synth Effects"}
|
---|
116 | , { "val": 100, "name": "FX 5 (brightness)", "group": "Synth Effects"}
|
---|
117 | , { "val": 101, "name": "FX 6 (goblins)", "group": "Synth Effects"}
|
---|
118 | , { "val": 102, "name": "FX 7 (echoes)", "group": "Synth Effects"}
|
---|
119 | , { "val": 103, "name": "FX 8 (sci-fi)", "group": "Synth Effects"}
|
---|
120 |
|
---|
121 | , { "val": 104, "name": "Sitar", "group": "Ethnic"}
|
---|
122 | , { "val": 105, "name": "Banjo", "group": "Ethnic"}
|
---|
123 | , { "val": 106, "name": "Shamisen", "group": "Ethnic"}
|
---|
124 | , { "val": 107, "name": "Koto", "group": "Ethnic"}
|
---|
125 | , { "val": 108, "name": "Kalimba", "group": "Ethnic"}
|
---|
126 | , { "val": 109, "name": "Bagpipe", "group": "Ethnic"}
|
---|
127 | , { "val": 110, "name": "Fiddle", "group": "Ethnic"}
|
---|
128 | , { "val": 111, "name": "Shanai", "group": "Ethnic"}
|
---|
129 |
|
---|
130 | , { "val": 112, "name": "Tinkle Bell", "group": "Percussive"}
|
---|
131 | , { "val": 113, "name": "Agogo", "group": "Percussive"}
|
---|
132 | , { "val": 114, "name": "Steel Drums", "group": "Percussive"}
|
---|
133 | , { "val": 115, "name": "Woodblock", "group": "Percussive"}
|
---|
134 | , { "val": 116, "name": "Taiko Drum", "group": "Percussive"}
|
---|
135 | , { "val": 117, "name": "Melodic Tom", "group": "Percussive"}
|
---|
136 | , { "val": 118, "name": "Synth Drum", "group": "Percussive"}
|
---|
137 | , { "val": 119, "name": "Reverse Cymbal", "group": "Percussive"}
|
---|
138 |
|
---|
139 | , { "val": 120, "name": "Guitar Fret Noise", "group": "Sound effects"}
|
---|
140 | , { "val": 121, "name": "Breath Noise", "group": "Sound effects"}
|
---|
141 | , { "val": 122, "name": "Seashore", "group": "Sound effects"}
|
---|
142 | , { "val": 123, "name": "Bird Tweet", "group": "Sound effects"}
|
---|
143 | , { "val": 124, "name": "Telephone Ring", "group": "Sound effects"}
|
---|
144 | , { "val": 125, "name": "Helicopter", "group": "Sound effects"}
|
---|
145 | , { "val": 126, "name": "Applause", "group": "Sound effects"}
|
---|
146 | , { "val": 127, "name": "Gunshot", "group": "Sound effects"}
|
---|
147 | ];
|
---|
148 |
|
---|
149 | var GM_instrument_to_num_map = null;
|
---|
150 | var GM_num_to_instrument_array = null;
|
---|
151 |
|
---|
152 | //var instrument_name = "lead 1 (square)";
|
---|
153 | //var instrument_name = "lead 2 (sawtooth)";
|
---|
154 | //var instrument_name = "acoustic grand piano";
|
---|
155 | //var instrument_name = "distortion guitar";
|
---|
156 | var instrument_name = "overdriven guitar";
|
---|
157 |
|
---|
158 | window.onload = function () {
|
---|
159 |
|
---|
160 | MIDI.loadPlugin({
|
---|
161 | //soundfontUrl: "./soundfont/",
|
---|
162 | //soundfontUrl: "./FluidR3_GM/",
|
---|
163 | soundfontUrl: gs.variables.httpCollection + "/soundfont-fluidr3-gm/",
|
---|
164 |
|
---|
165 | //instrument: "acoustic_grand_piano",
|
---|
166 | //instrument: "lead_1_square",
|
---|
167 | instrument: instrument_name.replace(/ /g,"_").replace(/[()]/g,""),
|
---|
168 | //instrument: "acoustic_bass",
|
---|
169 | //instrument: "voice_oohs",
|
---|
170 | //instrument: "flute",
|
---|
171 | //instruments: ["acoustic_grand_piano", "church_organ", "acoustic_guitar_nylon", "distortion_guitar"],
|
---|
172 |
|
---|
173 | onprogress: function(state, progress) {
|
---|
174 | //console.log(state, progress);
|
---|
175 | },
|
---|
176 |
|
---|
177 | onsuccess: function () {
|
---|
178 |
|
---|
179 | GM_instrument_to_num_map = {};
|
---|
180 | GM_num_to_instrument_array = [];
|
---|
181 |
|
---|
182 | for (var i = 0; i < GM_info.length; i++) {
|
---|
183 | var gm_rec = GM_info[i];
|
---|
184 | var instrument = gm_rec.name.toLowerCase(); // .replace(/ /g,"_");
|
---|
185 | var number = gm_rec.val;
|
---|
186 |
|
---|
187 | GM_instrument_to_num_map[instrument] = number;
|
---|
188 | GM_num_to_instrument_array[number] = instrument;
|
---|
189 | }
|
---|
190 |
|
---|
191 | var channel = 0; // MIDI allows for 16 channels, 0-15
|
---|
192 | // the xylophone is represented as instrument 13 in General MIDI.
|
---|
193 | var instrument_num = GM_instrument_to_num_map[instrument_name];
|
---|
194 | console.log("*** instrument name: " + instrument_name + ", instrument num = " + instrument_num);
|
---|
195 |
|
---|
196 | // middle C (C4) according to General MIDI
|
---|
197 | var note = 60;
|
---|
198 | var velocity = 127; // how hard the note hits, from 0-127
|
---|
199 | var delay = 1.5; // how long to hold the note, in seconds
|
---|
200 |
|
---|
201 | // play the note
|
---|
202 | MIDI.programChange(0, instrument_num); // Load xylophone into Channel 0
|
---|
203 | //MIDI.noteOn(0, note, velocity) // Play middle C on Channel 0
|
---|
204 | //MIDI.noteOff(0, note, delay) // Release the middle C after 0.5 seconds
|
---|
205 | }
|
---|
206 |
|
---|
207 | });
|
---|
208 | };
|
---|
209 |
|
---|
210 | function changeGMInstrument(instrument_num)
|
---|
211 | {
|
---|
212 | // map instrument name to number ??
|
---|
213 |
|
---|
214 | MIDI.programChange(0, instrument_num);
|
---|
215 | }
|
---|