Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/share/classes/com/sun/media/sound/EmergencySoundbank.java
41161 views
1
/*
2
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package com.sun.media.sound;
27
28
import java.util.Random;
29
30
import javax.sound.midi.Patch;
31
import javax.sound.sampled.AudioFormat;
32
33
/**
34
* Emergency Soundbank generator.
35
* Used when no other default soundbank can be found.
36
*
37
* @author Karl Helgason
38
*/
39
public final class EmergencySoundbank {
40
41
private static final String[] general_midi_instruments = {
42
"Acoustic Grand Piano",
43
"Bright Acoustic Piano",
44
"Electric Grand Piano",
45
"Honky-tonk Piano",
46
"Electric Piano 1",
47
"Electric Piano 2",
48
"Harpsichord",
49
"Clavi",
50
"Celesta",
51
"Glockenspiel",
52
"Music Box",
53
"Vibraphone",
54
"Marimba",
55
"Xylophone",
56
"Tubular Bells",
57
"Dulcimer",
58
"Drawbar Organ",
59
"Percussive Organ",
60
"Rock Organ",
61
"Church Organ",
62
"Reed Organ",
63
"Accordion",
64
"Harmonica",
65
"Tango Accordion",
66
"Acoustic Guitar (nylon)",
67
"Acoustic Guitar (steel)",
68
"Electric Guitar (jazz)",
69
"Electric Guitar (clean)",
70
"Electric Guitar (muted)",
71
"Overdriven Guitar",
72
"Distortion Guitar",
73
"Guitar harmonics",
74
"Acoustic Bass",
75
"Electric Bass (finger)",
76
"Electric Bass (pick)",
77
"Fretless Bass",
78
"Slap Bass 1",
79
"Slap Bass 2",
80
"Synth Bass 1",
81
"Synth Bass 2",
82
"Violin",
83
"Viola",
84
"Cello",
85
"Contrabass",
86
"Tremolo Strings",
87
"Pizzicato Strings",
88
"Orchestral Harp",
89
"Timpani",
90
"String Ensemble 1",
91
"String Ensemble 2",
92
"SynthStrings 1",
93
"SynthStrings 2",
94
"Choir Aahs",
95
"Voice Oohs",
96
"Synth Voice",
97
"Orchestra Hit",
98
"Trumpet",
99
"Trombone",
100
"Tuba",
101
"Muted Trumpet",
102
"French Horn",
103
"Brass Section",
104
"SynthBrass 1",
105
"SynthBrass 2",
106
"Soprano Sax",
107
"Alto Sax",
108
"Tenor Sax",
109
"Baritone Sax",
110
"Oboe",
111
"English Horn",
112
"Bassoon",
113
"Clarinet",
114
"Piccolo",
115
"Flute",
116
"Recorder",
117
"Pan Flute",
118
"Blown Bottle",
119
"Shakuhachi",
120
"Whistle",
121
"Ocarina",
122
"Lead 1 (square)",
123
"Lead 2 (sawtooth)",
124
"Lead 3 (calliope)",
125
"Lead 4 (chiff)",
126
"Lead 5 (charang)",
127
"Lead 6 (voice)",
128
"Lead 7 (fifths)",
129
"Lead 8 (bass + lead)",
130
"Pad 1 (new age)",
131
"Pad 2 (warm)",
132
"Pad 3 (polysynth)",
133
"Pad 4 (choir)",
134
"Pad 5 (bowed)",
135
"Pad 6 (metallic)",
136
"Pad 7 (halo)",
137
"Pad 8 (sweep)",
138
"FX 1 (rain)",
139
"FX 2 (soundtrack)",
140
"FX 3 (crystal)",
141
"FX 4 (atmosphere)",
142
"FX 5 (brightness)",
143
"FX 6 (goblins)",
144
"FX 7 (echoes)",
145
"FX 8 (sci-fi)",
146
"Sitar",
147
"Banjo",
148
"Shamisen",
149
"Koto",
150
"Kalimba",
151
"Bag pipe",
152
"Fiddle",
153
"Shanai",
154
"Tinkle Bell",
155
"Agogo",
156
"Steel Drums",
157
"Woodblock",
158
"Taiko Drum",
159
"Melodic Tom",
160
"Synth Drum",
161
"Reverse Cymbal",
162
"Guitar Fret Noise",
163
"Breath Noise",
164
"Seashore",
165
"Bird Tweet",
166
"Telephone Ring",
167
"Helicopter",
168
"Applause",
169
"Gunshot"
170
};
171
172
public static SF2Soundbank createSoundbank() throws Exception {
173
SF2Soundbank sf2 = new SF2Soundbank();
174
sf2.setName("Emergency GM sound set");
175
sf2.setVendor("Generated");
176
sf2.setDescription("Emergency generated soundbank");
177
178
/*
179
* percussion instruments
180
*/
181
182
SF2Layer bass_drum = new_bass_drum(sf2);
183
SF2Layer snare_drum = new_snare_drum(sf2);
184
SF2Layer tom = new_tom(sf2);
185
SF2Layer open_hihat = new_open_hihat(sf2);
186
SF2Layer closed_hihat = new_closed_hihat(sf2);
187
SF2Layer crash_cymbal = new_crash_cymbal(sf2);
188
SF2Layer side_stick = new_side_stick(sf2);
189
190
SF2Layer[] drums = new SF2Layer[128];
191
drums[35] = bass_drum;
192
drums[36] = bass_drum;
193
drums[38] = snare_drum;
194
drums[40] = snare_drum;
195
drums[41] = tom;
196
drums[43] = tom;
197
drums[45] = tom;
198
drums[47] = tom;
199
drums[48] = tom;
200
drums[50] = tom;
201
drums[42] = closed_hihat;
202
drums[44] = closed_hihat;
203
drums[46] = open_hihat;
204
drums[49] = crash_cymbal;
205
drums[51] = crash_cymbal;
206
drums[52] = crash_cymbal;
207
drums[55] = crash_cymbal;
208
drums[57] = crash_cymbal;
209
drums[59] = crash_cymbal;
210
211
// Use side_stick for missing drums:
212
drums[37] = side_stick;
213
drums[39] = side_stick;
214
drums[53] = side_stick;
215
drums[54] = side_stick;
216
drums[56] = side_stick;
217
drums[58] = side_stick;
218
drums[69] = side_stick;
219
drums[70] = side_stick;
220
drums[75] = side_stick;
221
drums[60] = side_stick;
222
drums[61] = side_stick;
223
drums[62] = side_stick;
224
drums[63] = side_stick;
225
drums[64] = side_stick;
226
drums[65] = side_stick;
227
drums[66] = side_stick;
228
drums[67] = side_stick;
229
drums[68] = side_stick;
230
drums[71] = side_stick;
231
drums[72] = side_stick;
232
drums[73] = side_stick;
233
drums[74] = side_stick;
234
drums[76] = side_stick;
235
drums[77] = side_stick;
236
drums[78] = side_stick;
237
drums[79] = side_stick;
238
drums[80] = side_stick;
239
drums[81] = side_stick;
240
241
242
SF2Instrument drum_instrument = new SF2Instrument(sf2);
243
drum_instrument.setName("Standard Kit");
244
drum_instrument.setPatch(new ModelPatch(0, 0, true));
245
sf2.addInstrument(drum_instrument);
246
for (int i = 0; i < drums.length; i++) {
247
if (drums[i] != null) {
248
SF2InstrumentRegion region = new SF2InstrumentRegion();
249
region.setLayer(drums[i]);
250
region.putBytes(SF2InstrumentRegion.GENERATOR_KEYRANGE,
251
new byte[]{(byte) i, (byte) i});
252
drum_instrument.getRegions().add(region);
253
}
254
}
255
256
257
/*
258
* melodic instruments
259
*/
260
261
SF2Layer gpiano = new_gpiano(sf2);
262
SF2Layer gpiano2 = new_gpiano2(sf2);
263
SF2Layer gpiano_hammer = new_piano_hammer(sf2);
264
SF2Layer piano1 = new_piano1(sf2);
265
SF2Layer epiano1 = new_epiano1(sf2);
266
SF2Layer epiano2 = new_epiano2(sf2);
267
268
SF2Layer guitar = new_guitar1(sf2);
269
SF2Layer guitar_pick = new_guitar_pick(sf2);
270
SF2Layer guitar_dist = new_guitar_dist(sf2);
271
SF2Layer bass1 = new_bass1(sf2);
272
SF2Layer bass2 = new_bass2(sf2);
273
SF2Layer synthbass = new_synthbass(sf2);
274
SF2Layer string2 = new_string2(sf2);
275
SF2Layer orchhit = new_orchhit(sf2);
276
SF2Layer choir = new_choir(sf2);
277
SF2Layer solostring = new_solostring(sf2);
278
SF2Layer organ = new_organ(sf2);
279
SF2Layer ch_organ = new_ch_organ(sf2);
280
SF2Layer bell = new_bell(sf2);
281
SF2Layer flute = new_flute(sf2);
282
283
SF2Layer timpani = new_timpani(sf2);
284
SF2Layer melodic_toms = new_melodic_toms(sf2);
285
SF2Layer trumpet = new_trumpet(sf2);
286
SF2Layer trombone = new_trombone(sf2);
287
SF2Layer brass_section = new_brass_section(sf2);
288
SF2Layer horn = new_horn(sf2);
289
SF2Layer sax = new_sax(sf2);
290
SF2Layer oboe = new_oboe(sf2);
291
SF2Layer bassoon = new_bassoon(sf2);
292
SF2Layer clarinet = new_clarinet(sf2);
293
SF2Layer reverse_cymbal = new_reverse_cymbal(sf2);
294
295
SF2Layer defaultsound = piano1;
296
297
newInstrument(sf2, "Piano", new Patch(0, 0), gpiano, gpiano_hammer);
298
newInstrument(sf2, "Piano", new Patch(0, 1), gpiano2, gpiano_hammer);
299
newInstrument(sf2, "Piano", new Patch(0, 2), piano1);
300
{
301
SF2Instrument ins = newInstrument(sf2, "Honky-tonk Piano",
302
new Patch(0, 3), piano1, piano1);
303
SF2InstrumentRegion region = ins.getRegions().get(0);
304
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 80);
305
region.putInteger(SF2Region.GENERATOR_FINETUNE, 30);
306
region = ins.getRegions().get(1);
307
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 30);
308
}
309
newInstrument(sf2, "Rhodes", new Patch(0, 4), epiano2);
310
newInstrument(sf2, "Rhodes", new Patch(0, 5), epiano2);
311
newInstrument(sf2, "Clavinet", new Patch(0, 6), epiano1);
312
newInstrument(sf2, "Clavinet", new Patch(0, 7), epiano1);
313
newInstrument(sf2, "Rhodes", new Patch(0, 8), epiano2);
314
newInstrument(sf2, "Bell", new Patch(0, 9), bell);
315
newInstrument(sf2, "Bell", new Patch(0, 10), bell);
316
newInstrument(sf2, "Vibraphone", new Patch(0, 11), bell);
317
newInstrument(sf2, "Marimba", new Patch(0, 12), bell);
318
newInstrument(sf2, "Marimba", new Patch(0, 13), bell);
319
newInstrument(sf2, "Bell", new Patch(0, 14), bell);
320
newInstrument(sf2, "Rock Organ", new Patch(0, 15), organ);
321
newInstrument(sf2, "Rock Organ", new Patch(0, 16), organ);
322
newInstrument(sf2, "Perc Organ", new Patch(0, 17), organ);
323
newInstrument(sf2, "Rock Organ", new Patch(0, 18), organ);
324
newInstrument(sf2, "Church Organ", new Patch(0, 19), ch_organ);
325
newInstrument(sf2, "Accordion", new Patch(0, 20), organ);
326
newInstrument(sf2, "Accordion", new Patch(0, 21), organ);
327
newInstrument(sf2, "Accordion", new Patch(0, 22), organ);
328
newInstrument(sf2, "Accordion", new Patch(0, 23), organ);
329
newInstrument(sf2, "Guitar", new Patch(0, 24), guitar, guitar_pick);
330
newInstrument(sf2, "Guitar", new Patch(0, 25), guitar, guitar_pick);
331
newInstrument(sf2, "Guitar", new Patch(0, 26), guitar, guitar_pick);
332
newInstrument(sf2, "Guitar", new Patch(0, 27), guitar, guitar_pick);
333
newInstrument(sf2, "Guitar", new Patch(0, 28), guitar, guitar_pick);
334
newInstrument(sf2, "Distorted Guitar", new Patch(0, 29), guitar_dist);
335
newInstrument(sf2, "Distorted Guitar", new Patch(0, 30), guitar_dist);
336
newInstrument(sf2, "Guitar", new Patch(0, 31), guitar, guitar_pick);
337
newInstrument(sf2, "Finger Bass", new Patch(0, 32), bass1);
338
newInstrument(sf2, "Finger Bass", new Patch(0, 33), bass1);
339
newInstrument(sf2, "Finger Bass", new Patch(0, 34), bass1);
340
newInstrument(sf2, "Frettless Bass", new Patch(0, 35), bass2);
341
newInstrument(sf2, "Frettless Bass", new Patch(0, 36), bass2);
342
newInstrument(sf2, "Frettless Bass", new Patch(0, 37), bass2);
343
newInstrument(sf2, "Synth Bass1", new Patch(0, 38), synthbass);
344
newInstrument(sf2, "Synth Bass2", new Patch(0, 39), synthbass);
345
newInstrument(sf2, "Solo String", new Patch(0, 40), string2, solostring);
346
newInstrument(sf2, "Solo String", new Patch(0, 41), string2, solostring);
347
newInstrument(sf2, "Solo String", new Patch(0, 42), string2, solostring);
348
newInstrument(sf2, "Solo String", new Patch(0, 43), string2, solostring);
349
newInstrument(sf2, "Solo String", new Patch(0, 44), string2, solostring);
350
newInstrument(sf2, "Def", new Patch(0, 45), defaultsound);
351
newInstrument(sf2, "Harp", new Patch(0, 46), bell);
352
newInstrument(sf2, "Timpani", new Patch(0, 47), timpani);
353
newInstrument(sf2, "Strings", new Patch(0, 48), string2);
354
SF2Instrument slow_strings =
355
newInstrument(sf2, "Slow Strings", new Patch(0, 49), string2);
356
SF2InstrumentRegion region = slow_strings.getRegions().get(0);
357
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, 2500);
358
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 2000);
359
newInstrument(sf2, "Synth Strings", new Patch(0, 50), string2);
360
newInstrument(sf2, "Synth Strings", new Patch(0, 51), string2);
361
362
363
newInstrument(sf2, "Choir", new Patch(0, 52), choir);
364
newInstrument(sf2, "Choir", new Patch(0, 53), choir);
365
newInstrument(sf2, "Choir", new Patch(0, 54), choir);
366
{
367
SF2Instrument ins = newInstrument(sf2, "Orch Hit",
368
new Patch(0, 55), orchhit, orchhit, timpani);
369
region = ins.getRegions().get(0);
370
region.putInteger(SF2Region.GENERATOR_COARSETUNE, -12);
371
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
372
}
373
newInstrument(sf2, "Trumpet", new Patch(0, 56), trumpet);
374
newInstrument(sf2, "Trombone", new Patch(0, 57), trombone);
375
newInstrument(sf2, "Trombone", new Patch(0, 58), trombone);
376
newInstrument(sf2, "Trumpet", new Patch(0, 59), trumpet);
377
newInstrument(sf2, "Horn", new Patch(0, 60), horn);
378
newInstrument(sf2, "Brass Section", new Patch(0, 61), brass_section);
379
newInstrument(sf2, "Brass Section", new Patch(0, 62), brass_section);
380
newInstrument(sf2, "Brass Section", new Patch(0, 63), brass_section);
381
newInstrument(sf2, "Sax", new Patch(0, 64), sax);
382
newInstrument(sf2, "Sax", new Patch(0, 65), sax);
383
newInstrument(sf2, "Sax", new Patch(0, 66), sax);
384
newInstrument(sf2, "Sax", new Patch(0, 67), sax);
385
newInstrument(sf2, "Oboe", new Patch(0, 68), oboe);
386
newInstrument(sf2, "Horn", new Patch(0, 69), horn);
387
newInstrument(sf2, "Bassoon", new Patch(0, 70), bassoon);
388
newInstrument(sf2, "Clarinet", new Patch(0, 71), clarinet);
389
newInstrument(sf2, "Flute", new Patch(0, 72), flute);
390
newInstrument(sf2, "Flute", new Patch(0, 73), flute);
391
newInstrument(sf2, "Flute", new Patch(0, 74), flute);
392
newInstrument(sf2, "Flute", new Patch(0, 75), flute);
393
newInstrument(sf2, "Flute", new Patch(0, 76), flute);
394
newInstrument(sf2, "Flute", new Patch(0, 77), flute);
395
newInstrument(sf2, "Flute", new Patch(0, 78), flute);
396
newInstrument(sf2, "Flute", new Patch(0, 79), flute);
397
newInstrument(sf2, "Organ", new Patch(0, 80), organ);
398
newInstrument(sf2, "Organ", new Patch(0, 81), organ);
399
newInstrument(sf2, "Flute", new Patch(0, 82), flute);
400
newInstrument(sf2, "Organ", new Patch(0, 83), organ);
401
newInstrument(sf2, "Organ", new Patch(0, 84), organ);
402
newInstrument(sf2, "Choir", new Patch(0, 85), choir);
403
newInstrument(sf2, "Organ", new Patch(0, 86), organ);
404
newInstrument(sf2, "Organ", new Patch(0, 87), organ);
405
newInstrument(sf2, "Synth Strings", new Patch(0, 88), string2);
406
newInstrument(sf2, "Organ", new Patch(0, 89), organ);
407
newInstrument(sf2, "Def", new Patch(0, 90), defaultsound);
408
newInstrument(sf2, "Choir", new Patch(0, 91), choir);
409
newInstrument(sf2, "Organ", new Patch(0, 92), organ);
410
newInstrument(sf2, "Organ", new Patch(0, 93), organ);
411
newInstrument(sf2, "Organ", new Patch(0, 94), organ);
412
newInstrument(sf2, "Organ", new Patch(0, 95), organ);
413
newInstrument(sf2, "Organ", new Patch(0, 96), organ);
414
newInstrument(sf2, "Organ", new Patch(0, 97), organ);
415
newInstrument(sf2, "Bell", new Patch(0, 98), bell);
416
newInstrument(sf2, "Organ", new Patch(0, 99), organ);
417
newInstrument(sf2, "Organ", new Patch(0, 100), organ);
418
newInstrument(sf2, "Organ", new Patch(0, 101), organ);
419
newInstrument(sf2, "Def", new Patch(0, 102), defaultsound);
420
newInstrument(sf2, "Synth Strings", new Patch(0, 103), string2);
421
newInstrument(sf2, "Def", new Patch(0, 104), defaultsound);
422
newInstrument(sf2, "Def", new Patch(0, 105), defaultsound);
423
newInstrument(sf2, "Def", new Patch(0, 106), defaultsound);
424
newInstrument(sf2, "Def", new Patch(0, 107), defaultsound);
425
newInstrument(sf2, "Marimba", new Patch(0, 108), bell);
426
newInstrument(sf2, "Sax", new Patch(0, 109), sax);
427
newInstrument(sf2, "Solo String", new Patch(0, 110), string2, solostring);
428
newInstrument(sf2, "Oboe", new Patch(0, 111), oboe);
429
newInstrument(sf2, "Bell", new Patch(0, 112), bell);
430
newInstrument(sf2, "Melodic Toms", new Patch(0, 113), melodic_toms);
431
newInstrument(sf2, "Marimba", new Patch(0, 114), bell);
432
newInstrument(sf2, "Melodic Toms", new Patch(0, 115), melodic_toms);
433
newInstrument(sf2, "Melodic Toms", new Patch(0, 116), melodic_toms);
434
newInstrument(sf2, "Melodic Toms", new Patch(0, 117), melodic_toms);
435
newInstrument(sf2, "Reverse Cymbal", new Patch(0, 118), reverse_cymbal);
436
newInstrument(sf2, "Reverse Cymbal", new Patch(0, 119), reverse_cymbal);
437
newInstrument(sf2, "Guitar", new Patch(0, 120), guitar);
438
newInstrument(sf2, "Def", new Patch(0, 121), defaultsound);
439
{
440
SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",
441
new Patch(0, 122), reverse_cymbal);
442
region = ins.getRegions().get(0);
443
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
444
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);
445
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);
446
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);
447
}
448
{
449
SF2Instrument ins = newInstrument(sf2, "Bird/Flute",
450
new Patch(0, 123), flute);
451
region = ins.getRegions().get(0);
452
region.putInteger(SF2Region.GENERATOR_COARSETUNE, 24);
453
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -3000);
454
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
455
}
456
newInstrument(sf2, "Def", new Patch(0, 124), side_stick);
457
{
458
SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",
459
new Patch(0, 125), reverse_cymbal);
460
region = ins.getRegions().get(0);
461
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
462
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);
463
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);
464
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);
465
}
466
newInstrument(sf2, "Applause/crash_cymbal",
467
new Patch(0, 126), crash_cymbal);
468
newInstrument(sf2, "Gunshot/side_stick", new Patch(0, 127), side_stick);
469
470
for (SF2Instrument instrument : sf2.getInstruments()) {
471
Patch patch = instrument.getPatch();
472
if (patch instanceof ModelPatch) {
473
if (((ModelPatch) patch).isPercussion())
474
continue;
475
}
476
instrument.setName(general_midi_instruments[patch.getProgram()]);
477
}
478
479
return sf2;
480
481
}
482
483
public static SF2Layer new_bell(SF2Soundbank sf2) {
484
Random random = new Random(102030201);
485
int x = 8;
486
int fftsize = 4096 * x;
487
double[] data = new double[fftsize * 2];
488
double base = x * 25;
489
double start_w = 0.01;
490
double end_w = 0.05;
491
double start_a = 0.2;
492
double end_a = 0.00001;
493
double a = start_a;
494
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
495
for (int i = 0; i < 40; i++) {
496
double detune = 1 + (random.nextDouble() * 2 - 1) * 0.01;
497
double w = start_w + (end_w - start_w) * (i / 40.0);
498
complexGaussianDist(data, base * (i + 1) * detune, w, a);
499
a *= a_step;
500
}
501
SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
502
SF2Layer layer = newLayer(sf2, "EPiano", sample);
503
SF2Region region = layer.getRegions().get(0);
504
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
505
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
506
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
507
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
508
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
509
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);
510
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
511
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
512
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
513
return layer;
514
}
515
516
public static SF2Layer new_guitar1(SF2Soundbank sf2) {
517
518
int x = 8;
519
int fftsize = 4096 * x;
520
double[] data = new double[fftsize * 2];
521
double base = x * 25;
522
double start_w = 0.01;
523
double end_w = 0.01;
524
double start_a = 2;
525
double end_a = 0.01;
526
double a = start_a;
527
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
528
529
double[] aa = new double[40];
530
for (int i = 0; i < 40; i++) {
531
aa[i] = a;
532
a *= a_step;
533
}
534
535
aa[0] = 2;
536
aa[1] = 0.5;
537
aa[2] = 0.45;
538
aa[3] = 0.2;
539
aa[4] = 1;
540
aa[5] = 0.5;
541
aa[6] = 2;
542
aa[7] = 1;
543
aa[8] = 0.5;
544
aa[9] = 1;
545
aa[9] = 0.5;
546
aa[10] = 0.2;
547
aa[11] = 1;
548
aa[12] = 0.7;
549
aa[13] = 0.5;
550
aa[14] = 1;
551
552
for (int i = 0; i < 40; i++) {
553
double w = start_w + (end_w - start_w) * (i / 40.0);
554
complexGaussianDist(data, base * (i + 1), w, aa[i]);
555
}
556
557
SF2Sample sample = newSimpleFFTSample(sf2, "Guitar", data, base);
558
SF2Layer layer = newLayer(sf2, "Guitar", sample);
559
SF2Region region = layer.getRegions().get(0);
560
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
561
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
562
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
563
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
564
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
565
566
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
567
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
568
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -6000);
569
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
570
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
571
return layer;
572
}
573
574
public static SF2Layer new_guitar_dist(SF2Soundbank sf2) {
575
576
int x = 8;
577
int fftsize = 4096 * x;
578
double[] data = new double[fftsize * 2];
579
double base = x * 25;
580
double start_w = 0.01;
581
double end_w = 0.01;
582
double start_a = 2;
583
double end_a = 0.01;
584
double a = start_a;
585
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
586
587
double[] aa = new double[40];
588
for (int i = 0; i < 40; i++) {
589
aa[i] = a;
590
a *= a_step;
591
}
592
593
aa[0] = 5;
594
aa[1] = 2;
595
aa[2] = 0.45;
596
aa[3] = 0.2;
597
aa[4] = 1;
598
aa[5] = 0.5;
599
aa[6] = 2;
600
aa[7] = 1;
601
aa[8] = 0.5;
602
aa[9] = 1;
603
aa[9] = 0.5;
604
aa[10] = 0.2;
605
aa[11] = 1;
606
aa[12] = 0.7;
607
aa[13] = 0.5;
608
aa[14] = 1;
609
610
for (int i = 0; i < 40; i++) {
611
double w = start_w + (end_w - start_w) * (i / 40.0);
612
complexGaussianDist(data, base * (i + 1), w, aa[i]);
613
}
614
615
616
SF2Sample sample = newSimpleFFTSample_dist(sf2, "Distorted Guitar",
617
data, base, 10000.0);
618
619
620
SF2Layer layer = newLayer(sf2, "Distorted Guitar", sample);
621
SF2Region region = layer.getRegions().get(0);
622
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
623
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
624
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
625
//region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
626
//region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 200);
627
628
//region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
629
//region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
630
//region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -1000);
631
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
632
//region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
633
return layer;
634
}
635
636
public static SF2Layer new_guitar_pick(SF2Soundbank sf2) {
637
638
double[] datab;
639
640
// Make treble part
641
{
642
int m = 2;
643
int fftlen = 4096 * m;
644
double[] data = new double[2 * fftlen];
645
Random random = new Random(3049912);
646
for (int i = 0; i < data.length; i += 2)
647
data[i] = (2.0 * (random.nextDouble() - 0.5));
648
fft(data);
649
// Remove all negative frequency
650
for (int i = fftlen / 2; i < data.length; i++)
651
data[i] = 0;
652
for (int i = 0; i < 2048 * m; i++) {
653
data[i] *= Math.exp(-Math.abs((i - 23) / ((double) m)) * 1.2)
654
+ Math.exp(-Math.abs((i - 40) / ((double) m)) * 0.9);
655
}
656
randomPhase(data, new Random(3049912));
657
ifft(data);
658
normalize(data, 0.8);
659
data = realPart(data);
660
double gain = 1.0;
661
for (int i = 0; i < data.length; i++) {
662
data[i] *= gain;
663
gain *= 0.9994;
664
}
665
datab = data;
666
667
fadeUp(data, 80);
668
}
669
670
SF2Sample sample = newSimpleDrumSample(sf2, "Guitar Noise", datab);
671
672
SF2Layer layer = new SF2Layer(sf2);
673
layer.setName("Guitar Noise");
674
675
SF2GlobalRegion global = new SF2GlobalRegion();
676
layer.setGlobalZone(global);
677
sf2.addResource(layer);
678
679
SF2LayerRegion region = new SF2LayerRegion();
680
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
681
//region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
682
// region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
683
/*
684
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);
685
region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);
686
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
687
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);
688
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);
689
*/
690
691
region.setSample(sample);
692
layer.getRegions().add(region);
693
694
return layer;
695
}
696
697
public static SF2Layer new_gpiano(SF2Soundbank sf2) {
698
//Random random = new Random(302030201);
699
int x = 8;
700
int fftsize = 4096 * x;
701
double[] data = new double[fftsize * 2];
702
double base = x * 25;
703
double start_a = 0.2;
704
double end_a = 0.001;
705
double a = start_a;
706
double a_step = Math.pow(end_a / start_a, 1.0 / 15.0);
707
708
double[] aa = new double[30];
709
for (int i = 0; i < 30; i++) {
710
aa[i] = a;
711
a *= a_step;
712
}
713
714
aa[0] *= 2;
715
//aa[2] *= 0.1;
716
aa[4] *= 2;
717
718
719
aa[12] *= 0.9;
720
aa[13] *= 0.7;
721
for (int i = 14; i < 30; i++) {
722
aa[i] *= 0.5;
723
}
724
725
726
for (int i = 0; i < 30; i++) {
727
//double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
728
double w = 0.2;
729
double ai = aa[i];
730
if (i > 10) {
731
w = 5;
732
ai *= 10;
733
}
734
int adjust = 0;
735
if (i > 5) {
736
adjust = (i - 5) * 7;
737
}
738
complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
739
}
740
741
SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
742
SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
743
SF2Region region = layer.getRegions().get(0);
744
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
745
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
746
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
747
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
748
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
749
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
750
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
751
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
752
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
753
return layer;
754
}
755
756
public static SF2Layer new_gpiano2(SF2Soundbank sf2) {
757
//Random random = new Random(302030201);
758
int x = 8;
759
int fftsize = 4096 * x;
760
double[] data = new double[fftsize * 2];
761
double base = x * 25;
762
double start_a = 0.2;
763
double end_a = 0.001;
764
double a = start_a;
765
double a_step = Math.pow(end_a / start_a, 1.0 / 20.0);
766
767
double[] aa = new double[30];
768
for (int i = 0; i < 30; i++) {
769
aa[i] = a;
770
a *= a_step;
771
}
772
773
aa[0] *= 1;
774
//aa[2] *= 0.1;
775
aa[4] *= 2;
776
777
778
aa[12] *= 0.9;
779
aa[13] *= 0.7;
780
for (int i = 14; i < 30; i++) {
781
aa[i] *= 0.5;
782
}
783
784
785
for (int i = 0; i < 30; i++) {
786
//double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
787
double w = 0.2;
788
double ai = aa[i];
789
if (i > 10) {
790
w = 5;
791
ai *= 10;
792
}
793
int adjust = 0;
794
if (i > 5) {
795
adjust = (i - 5) * 7;
796
}
797
complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
798
}
799
800
SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
801
SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
802
SF2Region region = layer.getRegions().get(0);
803
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
804
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
805
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
806
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
807
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
808
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
809
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
810
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
811
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
812
return layer;
813
}
814
815
public static SF2Layer new_piano_hammer(SF2Soundbank sf2) {
816
817
double[] datab;
818
819
// Make treble part
820
{
821
int m = 2;
822
int fftlen = 4096 * m;
823
double[] data = new double[2 * fftlen];
824
Random random = new Random(3049912);
825
for (int i = 0; i < data.length; i += 2)
826
data[i] = (2.0 * (random.nextDouble() - 0.5));
827
fft(data);
828
// Remove all negative frequency
829
for (int i = fftlen / 2; i < data.length; i++)
830
data[i] = 0;
831
for (int i = 0; i < 2048 * m; i++)
832
data[i] *= Math.exp(-Math.abs((i - 37) / ((double) m)) * 0.05);
833
randomPhase(data, new Random(3049912));
834
ifft(data);
835
normalize(data, 0.6);
836
data = realPart(data);
837
double gain = 1.0;
838
for (int i = 0; i < data.length; i++) {
839
data[i] *= gain;
840
gain *= 0.9997;
841
}
842
datab = data;
843
844
fadeUp(data, 80);
845
}
846
847
SF2Sample sample = newSimpleDrumSample(sf2, "Piano Hammer", datab);
848
849
SF2Layer layer = new SF2Layer(sf2);
850
layer.setName("Piano Hammer");
851
852
SF2GlobalRegion global = new SF2GlobalRegion();
853
layer.setGlobalZone(global);
854
sf2.addResource(layer);
855
856
SF2LayerRegion region = new SF2LayerRegion();
857
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
858
//region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
859
/*
860
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);
861
region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);
862
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
863
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);
864
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);
865
*/
866
867
region.setSample(sample);
868
layer.getRegions().add(region);
869
870
return layer;
871
}
872
873
public static SF2Layer new_piano1(SF2Soundbank sf2) {
874
//Random random = new Random(302030201);
875
int x = 8;
876
int fftsize = 4096 * x;
877
double[] data = new double[fftsize * 2];
878
double base = x * 25;
879
double start_a = 0.2;
880
double end_a = 0.0001;
881
double a = start_a;
882
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
883
884
double[] aa = new double[30];
885
for (int i = 0; i < 30; i++) {
886
aa[i] = a;
887
a *= a_step;
888
}
889
890
aa[0] *= 5;
891
aa[2] *= 0.1;
892
aa[7] *= 5;
893
894
895
for (int i = 0; i < 30; i++) {
896
//double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
897
double w = 0.2;
898
double ai = aa[i];
899
if (i > 12) {
900
w = 5;
901
ai *= 10;
902
}
903
int adjust = 0;
904
if (i > 5) {
905
adjust = (i - 5) * 7;
906
}
907
complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
908
}
909
910
complexGaussianDist(data, base * (15.5), 1, 0.1);
911
complexGaussianDist(data, base * (17.5), 1, 0.01);
912
913
SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base, 200);
914
SF2Layer layer = newLayer(sf2, "EPiano", sample);
915
SF2Region region = layer.getRegions().get(0);
916
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
917
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
918
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
919
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
920
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
921
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -1200);
922
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
923
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
924
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
925
return layer;
926
}
927
928
public static SF2Layer new_epiano1(SF2Soundbank sf2) {
929
Random random = new Random(302030201);
930
int x = 8;
931
int fftsize = 4096 * x;
932
double[] data = new double[fftsize * 2];
933
double base = x * 25;
934
double start_w = 0.05;
935
double end_w = 0.05;
936
double start_a = 0.2;
937
double end_a = 0.0001;
938
double a = start_a;
939
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
940
for (int i = 0; i < 40; i++) {
941
double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;
942
double w = start_w + (end_w - start_w) * (i / 40.0);
943
complexGaussianDist(data, base * (i + 1) * detune, w, a);
944
a *= a_step;
945
}
946
947
948
949
SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
950
SF2Layer layer = newLayer(sf2, "EPiano", sample);
951
SF2Region region = layer.getRegions().get(0);
952
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
953
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
954
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
955
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
956
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
957
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);
958
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
959
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
960
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
961
return layer;
962
}
963
964
public static SF2Layer new_epiano2(SF2Soundbank sf2) {
965
Random random = new Random(302030201);
966
int x = 8;
967
int fftsize = 4096 * x;
968
double[] data = new double[fftsize * 2];
969
double base = x * 25;
970
double start_w = 0.01;
971
double end_w = 0.05;
972
double start_a = 0.2;
973
double end_a = 0.00001;
974
double a = start_a;
975
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
976
for (int i = 0; i < 40; i++) {
977
double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;
978
double w = start_w + (end_w - start_w) * (i / 40.0);
979
complexGaussianDist(data, base * (i + 1) * detune, w, a);
980
a *= a_step;
981
}
982
983
SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
984
SF2Layer layer = newLayer(sf2, "EPiano", sample);
985
SF2Region region = layer.getRegions().get(0);
986
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
987
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
988
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
989
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 8000);
990
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
991
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 2400);
992
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
993
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
994
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
995
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
996
return layer;
997
}
998
999
public static SF2Layer new_bass1(SF2Soundbank sf2) {
1000
int x = 8;
1001
int fftsize = 4096 * x;
1002
double[] data = new double[fftsize * 2];
1003
double base = x * 25;
1004
double start_w = 0.05;
1005
double end_w = 0.05;
1006
double start_a = 0.2;
1007
double end_a = 0.02;
1008
double a = start_a;
1009
double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
1010
1011
double[] aa = new double[25];
1012
for (int i = 0; i < 25; i++) {
1013
aa[i] = a;
1014
a *= a_step;
1015
}
1016
1017
aa[0] *= 8;
1018
aa[1] *= 4;
1019
aa[3] *= 8;
1020
aa[5] *= 8;
1021
1022
for (int i = 0; i < 25; i++) {
1023
double w = start_w + (end_w - start_w) * (i / 40.0);
1024
complexGaussianDist(data, base * (i + 1), w, aa[i]);
1025
}
1026
1027
1028
SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);
1029
SF2Layer layer = newLayer(sf2, "Bass", sample);
1030
SF2Region region = layer.getRegions().get(0);
1031
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1032
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
1033
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
1034
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1035
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
1036
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
1037
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1038
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5000);
1039
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 11000);
1040
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1041
return layer;
1042
}
1043
1044
public static SF2Layer new_synthbass(SF2Soundbank sf2) {
1045
int x = 8;
1046
int fftsize = 4096 * x;
1047
double[] data = new double[fftsize * 2];
1048
double base = x * 25;
1049
double start_w = 0.05;
1050
double end_w = 0.05;
1051
double start_a = 0.2;
1052
double end_a = 0.02;
1053
double a = start_a;
1054
double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
1055
1056
double[] aa = new double[25];
1057
for (int i = 0; i < 25; i++) {
1058
aa[i] = a;
1059
a *= a_step;
1060
}
1061
1062
aa[0] *= 16;
1063
aa[1] *= 4;
1064
aa[3] *= 16;
1065
aa[5] *= 8;
1066
1067
for (int i = 0; i < 25; i++) {
1068
double w = start_w + (end_w - start_w) * (i / 40.0);
1069
complexGaussianDist(data, base * (i + 1), w, aa[i]);
1070
}
1071
1072
1073
SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);
1074
SF2Layer layer = newLayer(sf2, "Bass", sample);
1075
SF2Region region = layer.getRegions().get(0);
1076
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1077
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
1078
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
1079
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1080
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
1081
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
1082
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1083
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -3000);
1084
region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 100);
1085
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
1086
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1087
return layer;
1088
}
1089
1090
public static SF2Layer new_bass2(SF2Soundbank sf2) {
1091
int x = 8;
1092
int fftsize = 4096 * x;
1093
double[] data = new double[fftsize * 2];
1094
double base = x * 25;
1095
double start_w = 0.05;
1096
double end_w = 0.05;
1097
double start_a = 0.2;
1098
double end_a = 0.002;
1099
double a = start_a;
1100
double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
1101
1102
double[] aa = new double[25];
1103
for (int i = 0; i < 25; i++) {
1104
aa[i] = a;
1105
a *= a_step;
1106
}
1107
1108
aa[0] *= 8;
1109
aa[1] *= 4;
1110
aa[3] *= 8;
1111
aa[5] *= 8;
1112
1113
for (int i = 0; i < 25; i++) {
1114
double w = start_w + (end_w - start_w) * (i / 40.0);
1115
complexGaussianDist(data, base * (i + 1), w, aa[i]);
1116
}
1117
1118
1119
SF2Sample sample = newSimpleFFTSample(sf2, "Bass2", data, base);
1120
SF2Layer layer = newLayer(sf2, "Bass2", sample);
1121
SF2Region region = layer.getRegions().get(0);
1122
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1123
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);
1124
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
1125
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1126
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
1127
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
1128
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1129
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 5000);
1130
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1131
return layer;
1132
}
1133
1134
public static SF2Layer new_solostring(SF2Soundbank sf2) {
1135
int x = 8;
1136
int fftsize = 4096 * x;
1137
double[] data = new double[fftsize * 2];
1138
double base = x * 25;
1139
double start_w = 2;
1140
double end_w = 2;
1141
double start_a = 0.2;
1142
double end_a = 0.01;
1143
1144
double[] aa = new double[18];
1145
double a = start_a;
1146
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1147
for (int i = 0; i < aa.length; i++) {
1148
a *= a_step;
1149
aa[i] = a;
1150
}
1151
1152
aa[0] *= 5;
1153
aa[1] *= 5;
1154
aa[2] *= 5;
1155
aa[3] *= 4;
1156
aa[4] *= 4;
1157
aa[5] *= 3;
1158
aa[6] *= 3;
1159
aa[7] *= 2;
1160
1161
for (int i = 0; i < aa.length; i++) {
1162
double w = start_w + (end_w - start_w) * (i / 40.0);
1163
complexGaussianDist(data, base * (i + 1), w, a);
1164
}
1165
SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
1166
SF2Layer layer = newLayer(sf2, "Strings", sample);
1167
SF2Region region = layer.getRegions().get(0);
1168
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1169
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
1170
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
1171
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1172
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1173
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1174
region.putInteger(SF2Region.GENERATOR_FREQVIBLFO, -1000);
1175
region.putInteger(SF2Region.GENERATOR_VIBLFOTOPITCH, 15);
1176
return layer;
1177
1178
}
1179
1180
public static SF2Layer new_orchhit(SF2Soundbank sf2) {
1181
int x = 8;
1182
int fftsize = 4096 * x;
1183
double[] data = new double[fftsize * 2];
1184
double base = x * 25;
1185
double start_w = 2;
1186
double end_w = 80;
1187
double start_a = 0.2;
1188
double end_a = 0.001;
1189
double a = start_a;
1190
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1191
for (int i = 0; i < 40; i++) {
1192
double w = start_w + (end_w - start_w) * (i / 40.0);
1193
complexGaussianDist(data, base * (i + 1), w, a);
1194
a *= a_step;
1195
}
1196
complexGaussianDist(data, base * 4, 300, 1);
1197
1198
1199
SF2Sample sample = newSimpleFFTSample(sf2, "Och Strings", data, base);
1200
SF2Layer layer = newLayer(sf2, "Och Strings", sample);
1201
SF2Region region = layer.getRegions().get(0);
1202
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1203
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
1204
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 200);
1205
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 200);
1206
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
1207
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1208
return layer;
1209
1210
}
1211
1212
public static SF2Layer new_string2(SF2Soundbank sf2) {
1213
int x = 8;
1214
int fftsize = 4096 * x;
1215
double[] data = new double[fftsize * 2];
1216
double base = x * 25;
1217
double start_w = 2;
1218
double end_w = 80;
1219
double start_a = 0.2;
1220
double end_a = 0.001;
1221
double a = start_a;
1222
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1223
for (int i = 0; i < 40; i++) {
1224
double w = start_w + (end_w - start_w) * (i / 40.0);
1225
complexGaussianDist(data, base * (i + 1), w, a);
1226
a *= a_step;
1227
}
1228
SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
1229
SF2Layer layer = newLayer(sf2, "Strings", sample);
1230
SF2Region region = layer.getRegions().get(0);
1231
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1232
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
1233
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
1234
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1235
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1236
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1237
return layer;
1238
1239
}
1240
1241
public static SF2Layer new_choir(SF2Soundbank sf2) {
1242
int x = 8;
1243
int fftsize = 4096 * x;
1244
double[] data = new double[fftsize * 2];
1245
double base = x * 25;
1246
double start_w = 2;
1247
double end_w = 80;
1248
double start_a = 0.2;
1249
double end_a = 0.001;
1250
double a = start_a;
1251
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1252
double[] aa = new double[40];
1253
for (int i = 0; i < aa.length; i++) {
1254
a *= a_step;
1255
aa[i] = a;
1256
}
1257
1258
aa[5] *= 0.1;
1259
aa[6] *= 0.01;
1260
aa[7] *= 0.1;
1261
aa[8] *= 0.1;
1262
1263
for (int i = 0; i < aa.length; i++) {
1264
double w = start_w + (end_w - start_w) * (i / 40.0);
1265
complexGaussianDist(data, base * (i + 1), w, aa[i]);
1266
}
1267
SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
1268
SF2Layer layer = newLayer(sf2, "Strings", sample);
1269
SF2Region region = layer.getRegions().get(0);
1270
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1271
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
1272
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
1273
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1274
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1275
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1276
return layer;
1277
1278
}
1279
1280
public static SF2Layer new_organ(SF2Soundbank sf2) {
1281
Random random = new Random(102030201);
1282
int x = 1;
1283
int fftsize = 4096 * x;
1284
double[] data = new double[fftsize * 2];
1285
double base = x * 15;
1286
double start_w = 0.01;
1287
double end_w = 0.01;
1288
double start_a = 0.2;
1289
double end_a = 0.001;
1290
double a = start_a;
1291
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1292
1293
for (int i = 0; i < 12; i++) {
1294
double w = start_w + (end_w - start_w) * (i / 40.0);
1295
complexGaussianDist(data, base * (i + 1), w,
1296
a * (0.5 + 3 * (random.nextDouble())));
1297
a *= a_step;
1298
}
1299
SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);
1300
SF2Layer layer = newLayer(sf2, "Organ", sample);
1301
SF2Region region = layer.getRegions().get(0);
1302
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1303
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1304
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1305
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1306
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1307
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1308
return layer;
1309
1310
}
1311
1312
public static SF2Layer new_ch_organ(SF2Soundbank sf2) {
1313
int x = 1;
1314
int fftsize = 4096 * x;
1315
double[] data = new double[fftsize * 2];
1316
double base = x * 15;
1317
double start_w = 0.01;
1318
double end_w = 0.01;
1319
double start_a = 0.2;
1320
double end_a = 0.001;
1321
double a = start_a;
1322
double a_step = Math.pow(end_a / start_a, 1.0 / 60.0);
1323
1324
double[] aa = new double[60];
1325
for (int i = 0; i < aa.length; i++) {
1326
a *= a_step;
1327
aa[i] = a;
1328
}
1329
1330
aa[0] *= 5;
1331
aa[1] *= 2;
1332
aa[2] = 0;
1333
aa[4] = 0;
1334
aa[5] = 0;
1335
aa[7] *= 7;
1336
aa[9] = 0;
1337
aa[10] = 0;
1338
aa[12] = 0;
1339
aa[15] *= 7;
1340
aa[18] = 0;
1341
aa[20] = 0;
1342
aa[24] = 0;
1343
aa[27] *= 5;
1344
aa[29] = 0;
1345
aa[30] = 0;
1346
aa[33] = 0;
1347
aa[36] *= 4;
1348
aa[37] = 0;
1349
aa[39] = 0;
1350
aa[42] = 0;
1351
aa[43] = 0;
1352
aa[47] = 0;
1353
aa[50] *= 4;
1354
aa[52] = 0;
1355
aa[55] = 0;
1356
aa[57] = 0;
1357
1358
1359
aa[10] *= 0.1;
1360
aa[11] *= 0.1;
1361
aa[12] *= 0.1;
1362
aa[13] *= 0.1;
1363
1364
aa[17] *= 0.1;
1365
aa[18] *= 0.1;
1366
aa[19] *= 0.1;
1367
aa[20] *= 0.1;
1368
1369
for (int i = 0; i < 60; i++) {
1370
double w = start_w + (end_w - start_w) * (i / 40.0);
1371
complexGaussianDist(data, base * (i + 1), w, aa[i]);
1372
a *= a_step;
1373
}
1374
SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);
1375
SF2Layer layer = newLayer(sf2, "Organ", sample);
1376
SF2Region region = layer.getRegions().get(0);
1377
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1378
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);
1379
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1380
return layer;
1381
1382
}
1383
1384
public static SF2Layer new_flute(SF2Soundbank sf2) {
1385
int x = 8;
1386
int fftsize = 4096 * x;
1387
double[] data = new double[fftsize * 2];
1388
double base = x * 15;
1389
1390
complexGaussianDist(data, base * 1, 0.001, 0.5);
1391
complexGaussianDist(data, base * 2, 0.001, 0.5);
1392
complexGaussianDist(data, base * 3, 0.001, 0.5);
1393
complexGaussianDist(data, base * 4, 0.01, 0.5);
1394
1395
complexGaussianDist(data, base * 4, 100, 120);
1396
complexGaussianDist(data, base * 6, 100, 40);
1397
complexGaussianDist(data, base * 8, 100, 80);
1398
1399
complexGaussianDist(data, base * 5, 0.001, 0.05);
1400
complexGaussianDist(data, base * 6, 0.001, 0.06);
1401
complexGaussianDist(data, base * 7, 0.001, 0.04);
1402
complexGaussianDist(data, base * 8, 0.005, 0.06);
1403
complexGaussianDist(data, base * 9, 0.005, 0.06);
1404
complexGaussianDist(data, base * 10, 0.01, 0.1);
1405
complexGaussianDist(data, base * 11, 0.08, 0.7);
1406
complexGaussianDist(data, base * 12, 0.08, 0.6);
1407
complexGaussianDist(data, base * 13, 0.08, 0.6);
1408
complexGaussianDist(data, base * 14, 0.08, 0.6);
1409
complexGaussianDist(data, base * 15, 0.08, 0.5);
1410
complexGaussianDist(data, base * 16, 0.08, 0.5);
1411
complexGaussianDist(data, base * 17, 0.08, 0.2);
1412
1413
1414
complexGaussianDist(data, base * 1, 10, 8);
1415
complexGaussianDist(data, base * 2, 10, 8);
1416
complexGaussianDist(data, base * 3, 10, 8);
1417
complexGaussianDist(data, base * 4, 10, 8);
1418
complexGaussianDist(data, base * 5, 10, 8);
1419
complexGaussianDist(data, base * 6, 20, 9);
1420
complexGaussianDist(data, base * 7, 20, 9);
1421
complexGaussianDist(data, base * 8, 20, 9);
1422
complexGaussianDist(data, base * 9, 20, 8);
1423
complexGaussianDist(data, base * 10, 30, 8);
1424
complexGaussianDist(data, base * 11, 30, 9);
1425
complexGaussianDist(data, base * 12, 30, 9);
1426
complexGaussianDist(data, base * 13, 30, 8);
1427
complexGaussianDist(data, base * 14, 30, 8);
1428
complexGaussianDist(data, base * 15, 30, 7);
1429
complexGaussianDist(data, base * 16, 30, 7);
1430
complexGaussianDist(data, base * 17, 30, 6);
1431
1432
SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);
1433
SF2Layer layer = newLayer(sf2, "Flute", sample);
1434
SF2Region region = layer.getRegions().get(0);
1435
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1436
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1437
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1438
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1439
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1440
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1441
return layer;
1442
1443
}
1444
1445
public static SF2Layer new_horn(SF2Soundbank sf2) {
1446
int x = 8;
1447
int fftsize = 4096 * x;
1448
double[] data = new double[fftsize * 2];
1449
double base = x * 15;
1450
1451
double start_a = 0.5;
1452
double end_a = 0.00000000001;
1453
double a = start_a;
1454
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1455
for (int i = 0; i < 40; i++) {
1456
if (i == 0)
1457
complexGaussianDist(data, base * (i + 1), 0.1, a * 0.2);
1458
else
1459
complexGaussianDist(data, base * (i + 1), 0.1, a);
1460
a *= a_step;
1461
}
1462
1463
complexGaussianDist(data, base * 2, 100, 1);
1464
1465
1466
SF2Sample sample = newSimpleFFTSample(sf2, "Horn", data, base);
1467
SF2Layer layer = newLayer(sf2, "Horn", sample);
1468
SF2Region region = layer.getRegions().get(0);
1469
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1470
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1471
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1472
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1473
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1474
1475
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -500);
1476
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1477
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
1478
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
1479
return layer;
1480
1481
}
1482
1483
public static SF2Layer new_trumpet(SF2Soundbank sf2) {
1484
int x = 8;
1485
int fftsize = 4096 * x;
1486
double[] data = new double[fftsize * 2];
1487
double base = x * 15;
1488
1489
double start_a = 0.5;
1490
double end_a = 0.00001;
1491
double a = start_a;
1492
double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);
1493
double[] aa = new double[80];
1494
for (int i = 0; i < 80; i++) {
1495
aa[i] = a;
1496
a *= a_step;
1497
}
1498
1499
aa[0] *= 0.05;
1500
aa[1] *= 0.2;
1501
aa[2] *= 0.5;
1502
aa[3] *= 0.85;
1503
1504
for (int i = 0; i < 80; i++) {
1505
complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);
1506
}
1507
1508
complexGaussianDist(data, base * 5, 300, 3);
1509
1510
1511
SF2Sample sample = newSimpleFFTSample(sf2, "Trumpet", data, base);
1512
SF2Layer layer = newLayer(sf2, "Trumpet", sample);
1513
SF2Region region = layer.getRegions().get(0);
1514
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1515
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);
1516
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
1517
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1518
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1519
1520
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -4000);
1521
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, -2500);
1522
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
1523
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
1524
region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);
1525
return layer;
1526
1527
}
1528
1529
public static SF2Layer new_brass_section(SF2Soundbank sf2) {
1530
int x = 8;
1531
int fftsize = 4096 * x;
1532
double[] data = new double[fftsize * 2];
1533
double base = x * 15;
1534
1535
double start_a = 0.5;
1536
double end_a = 0.005;
1537
double a = start_a;
1538
double a_step = Math.pow(end_a / start_a, 1.0 / 30.0);
1539
double[] aa = new double[30];
1540
for (int i = 0; i < 30; i++) {
1541
aa[i] = a;
1542
a *= a_step;
1543
}
1544
1545
aa[0] *= 0.8;
1546
aa[1] *= 0.9;
1547
1548
double w = 5;
1549
for (int i = 0; i < 30; i++) {
1550
complexGaussianDist(data, base * (i + 1), 0.1 * w, aa[i] * w);
1551
w += 6; //*= w_step;
1552
}
1553
1554
complexGaussianDist(data, base * 6, 300, 2);
1555
1556
1557
SF2Sample sample = newSimpleFFTSample(sf2, "Brass Section", data, base);
1558
SF2Layer layer = newLayer(sf2, "Brass Section", sample);
1559
SF2Region region = layer.getRegions().get(0);
1560
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1561
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -9200);
1562
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1563
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1564
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1565
1566
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
1567
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1568
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
1569
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
1570
return layer;
1571
1572
}
1573
1574
public static SF2Layer new_trombone(SF2Soundbank sf2) {
1575
int x = 8;
1576
int fftsize = 4096 * x;
1577
double[] data = new double[fftsize * 2];
1578
double base = x * 15;
1579
1580
double start_a = 0.5;
1581
double end_a = 0.001;
1582
double a = start_a;
1583
double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);
1584
double[] aa = new double[80];
1585
for (int i = 0; i < 80; i++) {
1586
aa[i] = a;
1587
a *= a_step;
1588
}
1589
1590
aa[0] *= 0.3;
1591
aa[1] *= 0.7;
1592
1593
for (int i = 0; i < 80; i++) {
1594
complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);
1595
}
1596
1597
complexGaussianDist(data, base * 6, 300, 2);
1598
1599
1600
SF2Sample sample = newSimpleFFTSample(sf2, "Trombone", data, base);
1601
SF2Layer layer = newLayer(sf2, "Trombone", sample);
1602
SF2Region region = layer.getRegions().get(0);
1603
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1604
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);
1605
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1606
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1607
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1608
1609
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -2000);
1610
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1611
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
1612
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
1613
region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);
1614
return layer;
1615
1616
}
1617
1618
public static SF2Layer new_sax(SF2Soundbank sf2) {
1619
int x = 8;
1620
int fftsize = 4096 * x;
1621
double[] data = new double[fftsize * 2];
1622
double base = x * 15;
1623
1624
double start_a = 0.5;
1625
double end_a = 0.01;
1626
double a = start_a;
1627
double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
1628
for (int i = 0; i < 40; i++) {
1629
if (i == 0 || i == 2)
1630
complexGaussianDist(data, base * (i + 1), 0.1, a * 4);
1631
else
1632
complexGaussianDist(data, base * (i + 1), 0.1, a);
1633
a *= a_step;
1634
}
1635
1636
complexGaussianDist(data, base * 4, 200, 1);
1637
1638
SF2Sample sample = newSimpleFFTSample(sf2, "Sax", data, base);
1639
SF2Layer layer = newLayer(sf2, "Sax", sample);
1640
SF2Region region = layer.getRegions().get(0);
1641
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1642
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1643
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1644
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1645
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1646
1647
region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
1648
region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
1649
region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
1650
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
1651
return layer;
1652
1653
}
1654
1655
public static SF2Layer new_oboe(SF2Soundbank sf2) {
1656
int x = 8;
1657
int fftsize = 4096 * x;
1658
double[] data = new double[fftsize * 2];
1659
double base = x * 15;
1660
1661
complexGaussianDist(data, base * 5, 100, 80);
1662
1663
1664
complexGaussianDist(data, base * 1, 0.01, 0.53);
1665
complexGaussianDist(data, base * 2, 0.01, 0.51);
1666
complexGaussianDist(data, base * 3, 0.01, 0.48);
1667
complexGaussianDist(data, base * 4, 0.01, 0.49);
1668
complexGaussianDist(data, base * 5, 0.01, 5);
1669
complexGaussianDist(data, base * 6, 0.01, 0.51);
1670
complexGaussianDist(data, base * 7, 0.01, 0.50);
1671
complexGaussianDist(data, base * 8, 0.01, 0.59);
1672
complexGaussianDist(data, base * 9, 0.01, 0.61);
1673
complexGaussianDist(data, base * 10, 0.01, 0.52);
1674
complexGaussianDist(data, base * 11, 0.01, 0.49);
1675
complexGaussianDist(data, base * 12, 0.01, 0.51);
1676
complexGaussianDist(data, base * 13, 0.01, 0.48);
1677
complexGaussianDist(data, base * 14, 0.01, 0.51);
1678
complexGaussianDist(data, base * 15, 0.01, 0.46);
1679
complexGaussianDist(data, base * 16, 0.01, 0.35);
1680
complexGaussianDist(data, base * 17, 0.01, 0.20);
1681
complexGaussianDist(data, base * 18, 0.01, 0.10);
1682
complexGaussianDist(data, base * 19, 0.01, 0.5);
1683
complexGaussianDist(data, base * 20, 0.01, 0.1);
1684
1685
1686
SF2Sample sample = newSimpleFFTSample(sf2, "Oboe", data, base);
1687
SF2Layer layer = newLayer(sf2, "Oboe", sample);
1688
SF2Region region = layer.getRegions().get(0);
1689
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1690
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1691
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1692
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1693
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1694
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1695
return layer;
1696
1697
}
1698
1699
public static SF2Layer new_bassoon(SF2Soundbank sf2) {
1700
int x = 8;
1701
int fftsize = 4096 * x;
1702
double[] data = new double[fftsize * 2];
1703
double base = x * 15;
1704
1705
complexGaussianDist(data, base * 2, 100, 40);
1706
complexGaussianDist(data, base * 4, 100, 20);
1707
1708
complexGaussianDist(data, base * 1, 0.01, 0.53);
1709
complexGaussianDist(data, base * 2, 0.01, 5);
1710
complexGaussianDist(data, base * 3, 0.01, 0.51);
1711
complexGaussianDist(data, base * 4, 0.01, 0.48);
1712
complexGaussianDist(data, base * 5, 0.01, 1.49);
1713
complexGaussianDist(data, base * 6, 0.01, 0.51);
1714
complexGaussianDist(data, base * 7, 0.01, 0.50);
1715
complexGaussianDist(data, base * 8, 0.01, 0.59);
1716
complexGaussianDist(data, base * 9, 0.01, 0.61);
1717
complexGaussianDist(data, base * 10, 0.01, 0.52);
1718
complexGaussianDist(data, base * 11, 0.01, 0.49);
1719
complexGaussianDist(data, base * 12, 0.01, 0.51);
1720
complexGaussianDist(data, base * 13, 0.01, 0.48);
1721
complexGaussianDist(data, base * 14, 0.01, 0.51);
1722
complexGaussianDist(data, base * 15, 0.01, 0.46);
1723
complexGaussianDist(data, base * 16, 0.01, 0.35);
1724
complexGaussianDist(data, base * 17, 0.01, 0.20);
1725
complexGaussianDist(data, base * 18, 0.01, 0.10);
1726
complexGaussianDist(data, base * 19, 0.01, 0.5);
1727
complexGaussianDist(data, base * 20, 0.01, 0.1);
1728
1729
1730
SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);
1731
SF2Layer layer = newLayer(sf2, "Flute", sample);
1732
SF2Region region = layer.getRegions().get(0);
1733
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1734
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1735
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1736
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1737
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1738
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1739
return layer;
1740
1741
}
1742
1743
public static SF2Layer new_clarinet(SF2Soundbank sf2) {
1744
int x = 8;
1745
int fftsize = 4096 * x;
1746
double[] data = new double[fftsize * 2];
1747
double base = x * 15;
1748
1749
complexGaussianDist(data, base * 1, 0.001, 0.5);
1750
complexGaussianDist(data, base * 2, 0.001, 0.02);
1751
complexGaussianDist(data, base * 3, 0.001, 0.2);
1752
complexGaussianDist(data, base * 4, 0.01, 0.1);
1753
1754
complexGaussianDist(data, base * 4, 100, 60);
1755
complexGaussianDist(data, base * 6, 100, 20);
1756
complexGaussianDist(data, base * 8, 100, 20);
1757
1758
complexGaussianDist(data, base * 5, 0.001, 0.1);
1759
complexGaussianDist(data, base * 6, 0.001, 0.09);
1760
complexGaussianDist(data, base * 7, 0.001, 0.02);
1761
complexGaussianDist(data, base * 8, 0.005, 0.16);
1762
complexGaussianDist(data, base * 9, 0.005, 0.96);
1763
complexGaussianDist(data, base * 10, 0.01, 0.9);
1764
complexGaussianDist(data, base * 11, 0.08, 1.2);
1765
complexGaussianDist(data, base * 12, 0.08, 1.8);
1766
complexGaussianDist(data, base * 13, 0.08, 1.6);
1767
complexGaussianDist(data, base * 14, 0.08, 1.2);
1768
complexGaussianDist(data, base * 15, 0.08, 0.9);
1769
complexGaussianDist(data, base * 16, 0.08, 0.5);
1770
complexGaussianDist(data, base * 17, 0.08, 0.2);
1771
1772
1773
complexGaussianDist(data, base * 1, 10, 8);
1774
complexGaussianDist(data, base * 2, 10, 8);
1775
complexGaussianDist(data, base * 3, 10, 8);
1776
complexGaussianDist(data, base * 4, 10, 8);
1777
complexGaussianDist(data, base * 5, 10, 8);
1778
complexGaussianDist(data, base * 6, 20, 9);
1779
complexGaussianDist(data, base * 7, 20, 9);
1780
complexGaussianDist(data, base * 8, 20, 9);
1781
complexGaussianDist(data, base * 9, 20, 8);
1782
complexGaussianDist(data, base * 10, 30, 8);
1783
complexGaussianDist(data, base * 11, 30, 9);
1784
complexGaussianDist(data, base * 12, 30, 9);
1785
complexGaussianDist(data, base * 13, 30, 8);
1786
complexGaussianDist(data, base * 14, 30, 8);
1787
complexGaussianDist(data, base * 15, 30, 7);
1788
complexGaussianDist(data, base * 16, 30, 7);
1789
complexGaussianDist(data, base * 17, 30, 6);
1790
1791
SF2Sample sample = newSimpleFFTSample(sf2, "Clarinet", data, base);
1792
SF2Layer layer = newLayer(sf2, "Clarinet", sample);
1793
SF2Region region = layer.getRegions().get(0);
1794
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1795
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1796
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1797
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1798
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1799
region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1800
return layer;
1801
1802
}
1803
1804
public static SF2Layer new_timpani(SF2Soundbank sf2) {
1805
1806
double[] datab;
1807
double[] datah;
1808
1809
// Make Bass Part
1810
{
1811
int fftlen = 4096 * 8;
1812
double[] data = new double[2 * fftlen];
1813
double base = 48;
1814
complexGaussianDist(data, base * 2, 0.2, 1);
1815
complexGaussianDist(data, base * 3, 0.2, 0.7);
1816
complexGaussianDist(data, base * 5, 10, 1);
1817
complexGaussianDist(data, base * 6, 9, 1);
1818
complexGaussianDist(data, base * 8, 15, 1);
1819
complexGaussianDist(data, base * 9, 18, 0.8);
1820
complexGaussianDist(data, base * 11, 21, 0.5);
1821
complexGaussianDist(data, base * 13, 28, 0.3);
1822
complexGaussianDist(data, base * 14, 22, 0.1);
1823
randomPhase(data, new Random(3049912));
1824
ifft(data);
1825
normalize(data, 0.5);
1826
data = realPart(data);
1827
1828
double d_len = data.length;
1829
for (int i = 0; i < data.length; i++) {
1830
double g = (1.0 - (i / d_len));
1831
data[i] *= g * g;
1832
}
1833
fadeUp(data, 40);
1834
datab = data;
1835
}
1836
1837
// Make treble part
1838
{
1839
int fftlen = 4096 * 4;
1840
double[] data = new double[2 * fftlen];
1841
Random random = new Random(3049912);
1842
for (int i = 0; i < data.length; i += 2) {
1843
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
1844
}
1845
fft(data);
1846
// Remove all negative frequency
1847
for (int i = fftlen / 2; i < data.length; i++)
1848
data[i] = 0;
1849
for (int i = 1024 * 4; i < 2048 * 4; i++)
1850
data[i] = 1.0 - (i - 4096) / 4096.0;
1851
for (int i = 0; i < 300; i++) {
1852
double g = (1.0 - (i / 300.0));
1853
data[i] *= 1.0 + 20 * g * g;
1854
}
1855
for (int i = 0; i < 24; i++)
1856
data[i] = 0;
1857
randomPhase(data, new Random(3049912));
1858
ifft(data);
1859
normalize(data, 0.9);
1860
data = realPart(data);
1861
double gain = 1.0;
1862
for (int i = 0; i < data.length; i++) {
1863
data[i] *= gain;
1864
gain *= 0.9998;
1865
}
1866
datah = data;
1867
}
1868
1869
for (int i = 0; i < datah.length; i++)
1870
datab[i] += datah[i] * 0.02;
1871
1872
normalize(datab, 0.9);
1873
1874
SF2Sample sample = newSimpleDrumSample(sf2, "Timpani", datab);
1875
1876
SF2Layer layer = new SF2Layer(sf2);
1877
layer.setName("Timpani");
1878
1879
SF2GlobalRegion global = new SF2GlobalRegion();
1880
layer.setGlobalZone(global);
1881
sf2.addResource(layer);
1882
1883
SF2LayerRegion region = new SF2LayerRegion();
1884
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1885
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1886
region.setSample(sample);
1887
layer.getRegions().add(region);
1888
1889
return layer;
1890
}
1891
1892
public static SF2Layer new_melodic_toms(SF2Soundbank sf2) {
1893
1894
double[] datab;
1895
double[] datah;
1896
1897
// Make Bass Part
1898
{
1899
int fftlen = 4096 * 4;
1900
double[] data = new double[2 * fftlen];
1901
complexGaussianDist(data, 30, 0.5, 1);
1902
randomPhase(data, new Random(3049912));
1903
ifft(data);
1904
normalize(data, 0.8);
1905
data = realPart(data);
1906
1907
double d_len = data.length;
1908
for (int i = 0; i < data.length; i++)
1909
data[i] *= (1.0 - (i / d_len));
1910
datab = data;
1911
}
1912
1913
// Make treble part
1914
{
1915
int fftlen = 4096 * 4;
1916
double[] data = new double[2 * fftlen];
1917
Random random = new Random(3049912);
1918
for (int i = 0; i < data.length; i += 2)
1919
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
1920
fft(data);
1921
// Remove all negative frequency
1922
for (int i = fftlen / 2; i < data.length; i++)
1923
data[i] = 0;
1924
for (int i = 1024 * 4; i < 2048 * 4; i++)
1925
data[i] = 1.0 - (i - 4096) / 4096.0;
1926
for (int i = 0; i < 200; i++) {
1927
double g = (1.0 - (i / 200.0));
1928
data[i] *= 1.0 + 20 * g * g;
1929
}
1930
for (int i = 0; i < 30; i++)
1931
data[i] = 0;
1932
randomPhase(data, new Random(3049912));
1933
ifft(data);
1934
normalize(data, 0.9);
1935
data = realPart(data);
1936
double gain = 1.0;
1937
for (int i = 0; i < data.length; i++) {
1938
data[i] *= gain;
1939
gain *= 0.9996;
1940
}
1941
datah = data;
1942
}
1943
1944
for (int i = 0; i < datah.length; i++)
1945
datab[i] += datah[i] * 0.5;
1946
for (int i = 0; i < 5; i++)
1947
datab[i] *= i / 5.0;
1948
1949
normalize(datab, 0.99);
1950
1951
SF2Sample sample = newSimpleDrumSample(sf2, "Melodic Toms", datab);
1952
sample.setOriginalPitch(63);
1953
1954
SF2Layer layer = new SF2Layer(sf2);
1955
layer.setName("Melodic Toms");
1956
1957
SF2GlobalRegion global = new SF2GlobalRegion();
1958
layer.setGlobalZone(global);
1959
sf2.addResource(layer);
1960
1961
SF2LayerRegion region = new SF2LayerRegion();
1962
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1963
//region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
1964
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1965
region.setSample(sample);
1966
layer.getRegions().add(region);
1967
1968
return layer;
1969
}
1970
1971
public static SF2Layer new_reverse_cymbal(SF2Soundbank sf2) {
1972
double[] datah;
1973
{
1974
int fftlen = 4096 * 4;
1975
double[] data = new double[2 * fftlen];
1976
Random random = new Random(3049912);
1977
for (int i = 0; i < data.length; i += 2)
1978
data[i] = (2.0 * (random.nextDouble() - 0.5));
1979
for (int i = fftlen / 2; i < data.length; i++)
1980
data[i] = 0;
1981
for (int i = 0; i < 100; i++)
1982
data[i] = 0;
1983
1984
for (int i = 0; i < 512 * 2; i++) {
1985
double gain = (i / (512.0 * 2.0));
1986
data[i] = 1 - gain;
1987
}
1988
datah = data;
1989
}
1990
1991
SF2Sample sample = newSimpleFFTSample(sf2, "Reverse Cymbal",
1992
datah, 100, 20);
1993
1994
SF2Layer layer = new SF2Layer(sf2);
1995
layer.setName("Reverse Cymbal");
1996
1997
SF2GlobalRegion global = new SF2GlobalRegion();
1998
layer.setGlobalZone(global);
1999
sf2.addResource(layer);
2000
2001
SF2LayerRegion region = new SF2LayerRegion();
2002
region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -200);
2003
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -12000);
2004
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2005
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
2006
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2007
region.setSample(sample);
2008
layer.getRegions().add(region);
2009
2010
return layer;
2011
}
2012
2013
public static SF2Layer new_snare_drum(SF2Soundbank sf2) {
2014
2015
double[] datab;
2016
double[] datah;
2017
2018
// Make Bass Part
2019
{
2020
int fftlen = 4096 * 4;
2021
double[] data = new double[2 * fftlen];
2022
complexGaussianDist(data, 24, 0.5, 1);
2023
randomPhase(data, new Random(3049912));
2024
ifft(data);
2025
normalize(data, 0.5);
2026
data = realPart(data);
2027
2028
double d_len = data.length;
2029
for (int i = 0; i < data.length; i++)
2030
data[i] *= (1.0 - (i / d_len));
2031
datab = data;
2032
}
2033
2034
// Make treble part
2035
{
2036
int fftlen = 4096 * 4;
2037
double[] data = new double[2 * fftlen];
2038
Random random = new Random(3049912);
2039
for (int i = 0; i < data.length; i += 2)
2040
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2041
fft(data);
2042
// Remove all negative frequency
2043
for (int i = fftlen / 2; i < data.length; i++)
2044
data[i] = 0;
2045
for (int i = 1024 * 4; i < 2048 * 4; i++)
2046
data[i] = 1.0 - (i - 4096) / 4096.0;
2047
for (int i = 0; i < 300; i++) {
2048
double g = (1.0 - (i / 300.0));
2049
data[i] *= 1.0 + 20 * g * g;
2050
}
2051
for (int i = 0; i < 24; i++)
2052
data[i] = 0;
2053
randomPhase(data, new Random(3049912));
2054
ifft(data);
2055
normalize(data, 0.9);
2056
data = realPart(data);
2057
double gain = 1.0;
2058
for (int i = 0; i < data.length; i++) {
2059
data[i] *= gain;
2060
gain *= 0.9998;
2061
}
2062
datah = data;
2063
}
2064
2065
for (int i = 0; i < datah.length; i++)
2066
datab[i] += datah[i];
2067
for (int i = 0; i < 5; i++)
2068
datab[i] *= i / 5.0;
2069
2070
SF2Sample sample = newSimpleDrumSample(sf2, "Snare Drum", datab);
2071
2072
SF2Layer layer = new SF2Layer(sf2);
2073
layer.setName("Snare Drum");
2074
2075
SF2GlobalRegion global = new SF2GlobalRegion();
2076
layer.setGlobalZone(global);
2077
sf2.addResource(layer);
2078
2079
SF2LayerRegion region = new SF2LayerRegion();
2080
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2081
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2082
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2083
region.setSample(sample);
2084
layer.getRegions().add(region);
2085
2086
return layer;
2087
}
2088
2089
public static SF2Layer new_bass_drum(SF2Soundbank sf2) {
2090
2091
double[] datab;
2092
double[] datah;
2093
2094
// Make Bass Part
2095
{
2096
int fftlen = 4096 * 4;
2097
double[] data = new double[2 * fftlen];
2098
complexGaussianDist(data, 1.8 * 5 + 1, 2, 1);
2099
complexGaussianDist(data, 1.8 * 9 + 1, 2, 1);
2100
randomPhase(data, new Random(3049912));
2101
ifft(data);
2102
normalize(data, 0.9);
2103
data = realPart(data);
2104
double d_len = data.length;
2105
for (int i = 0; i < data.length; i++)
2106
data[i] *= (1.0 - (i / d_len));
2107
datab = data;
2108
}
2109
2110
// Make treble part
2111
{
2112
int fftlen = 4096;
2113
double[] data = new double[2 * fftlen];
2114
Random random = new Random(3049912);
2115
for (int i = 0; i < data.length; i += 2)
2116
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2117
fft(data);
2118
// Remove all negative frequency
2119
for (int i = fftlen / 2; i < data.length; i++)
2120
data[i] = 0;
2121
for (int i = 1024; i < 2048; i++)
2122
data[i] = 1.0 - (i - 1024) / 1024.0;
2123
for (int i = 0; i < 512; i++)
2124
data[i] = 10 * i / 512.0;
2125
for (int i = 0; i < 10; i++)
2126
data[i] = 0;
2127
randomPhase(data, new Random(3049912));
2128
ifft(data);
2129
normalize(data, 0.9);
2130
data = realPart(data);
2131
double gain = 1.0;
2132
for (int i = 0; i < data.length; i++) {
2133
data[i] *= gain;
2134
gain *= 0.999;
2135
}
2136
datah = data;
2137
}
2138
2139
for (int i = 0; i < datah.length; i++)
2140
datab[i] += datah[i] * 0.5;
2141
for (int i = 0; i < 5; i++)
2142
datab[i] *= i / 5.0;
2143
2144
SF2Sample sample = newSimpleDrumSample(sf2, "Bass Drum", datab);
2145
2146
SF2Layer layer = new SF2Layer(sf2);
2147
layer.setName("Bass Drum");
2148
2149
SF2GlobalRegion global = new SF2GlobalRegion();
2150
layer.setGlobalZone(global);
2151
sf2.addResource(layer);
2152
2153
SF2LayerRegion region = new SF2LayerRegion();
2154
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2155
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2156
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2157
region.setSample(sample);
2158
layer.getRegions().add(region);
2159
2160
return layer;
2161
}
2162
2163
public static SF2Layer new_tom(SF2Soundbank sf2) {
2164
2165
double[] datab;
2166
double[] datah;
2167
2168
// Make Bass Part
2169
{
2170
int fftlen = 4096 * 4;
2171
double[] data = new double[2 * fftlen];
2172
complexGaussianDist(data, 30, 0.5, 1);
2173
randomPhase(data, new Random(3049912));
2174
ifft(data);
2175
normalize(data, 0.8);
2176
data = realPart(data);
2177
2178
double d_len = data.length;
2179
for (int i = 0; i < data.length; i++)
2180
data[i] *= (1.0 - (i / d_len));
2181
datab = data;
2182
}
2183
2184
// Make treble part
2185
{
2186
int fftlen = 4096 * 4;
2187
double[] data = new double[2 * fftlen];
2188
Random random = new Random(3049912);
2189
for (int i = 0; i < data.length; i += 2)
2190
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2191
fft(data);
2192
// Remove all negative frequency
2193
for (int i = fftlen / 2; i < data.length; i++)
2194
data[i] = 0;
2195
for (int i = 1024 * 4; i < 2048 * 4; i++)
2196
data[i] = 1.0 - (i - 4096) / 4096.0;
2197
for (int i = 0; i < 200; i++) {
2198
double g = (1.0 - (i / 200.0));
2199
data[i] *= 1.0 + 20 * g * g;
2200
}
2201
for (int i = 0; i < 30; i++)
2202
data[i] = 0;
2203
randomPhase(data, new Random(3049912));
2204
ifft(data);
2205
normalize(data, 0.9);
2206
data = realPart(data);
2207
double gain = 1.0;
2208
for (int i = 0; i < data.length; i++) {
2209
data[i] *= gain;
2210
gain *= 0.9996;
2211
}
2212
datah = data;
2213
}
2214
2215
for (int i = 0; i < datah.length; i++)
2216
datab[i] += datah[i] * 0.5;
2217
for (int i = 0; i < 5; i++)
2218
datab[i] *= i / 5.0;
2219
2220
normalize(datab, 0.99);
2221
2222
SF2Sample sample = newSimpleDrumSample(sf2, "Tom", datab);
2223
sample.setOriginalPitch(50);
2224
2225
SF2Layer layer = new SF2Layer(sf2);
2226
layer.setName("Tom");
2227
2228
SF2GlobalRegion global = new SF2GlobalRegion();
2229
layer.setGlobalZone(global);
2230
sf2.addResource(layer);
2231
2232
SF2LayerRegion region = new SF2LayerRegion();
2233
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2234
//region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2235
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2236
region.setSample(sample);
2237
layer.getRegions().add(region);
2238
2239
return layer;
2240
}
2241
2242
public static SF2Layer new_closed_hihat(SF2Soundbank sf2) {
2243
double[] datah;
2244
2245
// Make treble part
2246
{
2247
int fftlen = 4096 * 4;
2248
double[] data = new double[2 * fftlen];
2249
Random random = new Random(3049912);
2250
for (int i = 0; i < data.length; i += 2)
2251
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2252
fft(data);
2253
// Remove all negative frequency
2254
for (int i = fftlen / 2; i < data.length; i++)
2255
data[i] = 0;
2256
for (int i = 1024 * 4; i < 2048 * 4; i++)
2257
data[i] = 1.0 - (i - 4096) / 4096.0;
2258
for (int i = 0; i < 2048; i++)
2259
data[i] = 0.2 + 0.8 * (i / 2048.0);
2260
randomPhase(data, new Random(3049912));
2261
ifft(data);
2262
normalize(data, 0.9);
2263
data = realPart(data);
2264
double gain = 1.0;
2265
for (int i = 0; i < data.length; i++) {
2266
data[i] *= gain;
2267
gain *= 0.9996;
2268
}
2269
datah = data;
2270
}
2271
2272
for (int i = 0; i < 5; i++)
2273
datah[i] *= i / 5.0;
2274
SF2Sample sample = newSimpleDrumSample(sf2, "Closed Hi-Hat", datah);
2275
2276
SF2Layer layer = new SF2Layer(sf2);
2277
layer.setName("Closed Hi-Hat");
2278
2279
SF2GlobalRegion global = new SF2GlobalRegion();
2280
layer.setGlobalZone(global);
2281
sf2.addResource(layer);
2282
2283
SF2LayerRegion region = new SF2LayerRegion();
2284
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2285
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2286
region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2287
region.setSample(sample);
2288
layer.getRegions().add(region);
2289
2290
return layer;
2291
}
2292
2293
public static SF2Layer new_open_hihat(SF2Soundbank sf2) {
2294
double[] datah;
2295
{
2296
int fftlen = 4096 * 4;
2297
double[] data = new double[2 * fftlen];
2298
Random random = new Random(3049912);
2299
for (int i = 0; i < data.length; i += 2)
2300
data[i] = (2.0 * (random.nextDouble() - 0.5));
2301
for (int i = fftlen / 2; i < data.length; i++)
2302
data[i] = 0;
2303
for (int i = 0; i < 200; i++)
2304
data[i] = 0;
2305
for (int i = 0; i < 2048 * 4; i++) {
2306
double gain = (i / (2048.0 * 4.0));
2307
data[i] = gain;
2308
}
2309
datah = data;
2310
}
2311
2312
SF2Sample sample = newSimpleFFTSample(sf2, "Open Hi-Hat", datah, 1000, 5);
2313
2314
SF2Layer layer = new SF2Layer(sf2);
2315
layer.setName("Open Hi-Hat");
2316
2317
SF2GlobalRegion global = new SF2GlobalRegion();
2318
layer.setGlobalZone(global);
2319
sf2.addResource(layer);
2320
2321
SF2LayerRegion region = new SF2LayerRegion();
2322
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1500);
2323
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2324
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1500);
2325
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2326
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2327
region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2328
region.setSample(sample);
2329
layer.getRegions().add(region);
2330
2331
return layer;
2332
}
2333
2334
public static SF2Layer new_crash_cymbal(SF2Soundbank sf2) {
2335
double[] datah;
2336
{
2337
int fftlen = 4096 * 4;
2338
double[] data = new double[2 * fftlen];
2339
Random random = new Random(3049912);
2340
for (int i = 0; i < data.length; i += 2)
2341
data[i] = (2.0 * (random.nextDouble() - 0.5));
2342
for (int i = fftlen / 2; i < data.length; i++)
2343
data[i] = 0;
2344
for (int i = 0; i < 100; i++)
2345
data[i] = 0;
2346
for (int i = 0; i < 512 * 2; i++) {
2347
double gain = (i / (512.0 * 2.0));
2348
data[i] = gain;
2349
}
2350
datah = data;
2351
}
2352
2353
SF2Sample sample = newSimpleFFTSample(sf2, "Crash Cymbal", datah, 1000, 5);
2354
2355
SF2Layer layer = new SF2Layer(sf2);
2356
layer.setName("Crash Cymbal");
2357
2358
SF2GlobalRegion global = new SF2GlobalRegion();
2359
layer.setGlobalZone(global);
2360
sf2.addResource(layer);
2361
2362
SF2LayerRegion region = new SF2LayerRegion();
2363
region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1800);
2364
region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2365
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1800);
2366
region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2367
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2368
region.setSample(sample);
2369
layer.getRegions().add(region);
2370
2371
return layer;
2372
}
2373
2374
public static SF2Layer new_side_stick(SF2Soundbank sf2) {
2375
double[] datab;
2376
2377
// Make treble part
2378
{
2379
int fftlen = 4096 * 4;
2380
double[] data = new double[2 * fftlen];
2381
Random random = new Random(3049912);
2382
for (int i = 0; i < data.length; i += 2)
2383
data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2384
fft(data);
2385
// Remove all negative frequency
2386
for (int i = fftlen / 2; i < data.length; i++)
2387
data[i] = 0;
2388
for (int i = 1024 * 4; i < 2048 * 4; i++)
2389
data[i] = 1.0 - (i - 4096) / 4096.0;
2390
for (int i = 0; i < 200; i++) {
2391
double g = (1.0 - (i / 200.0));
2392
data[i] *= 1.0 + 20 * g * g;
2393
}
2394
for (int i = 0; i < 30; i++)
2395
data[i] = 0;
2396
randomPhase(data, new Random(3049912));
2397
ifft(data);
2398
normalize(data, 0.9);
2399
data = realPart(data);
2400
double gain = 1.0;
2401
for (int i = 0; i < data.length; i++) {
2402
data[i] *= gain;
2403
gain *= 0.9996;
2404
}
2405
datab = data;
2406
}
2407
2408
for (int i = 0; i < 10; i++)
2409
datab[i] *= i / 10.0;
2410
2411
SF2Sample sample = newSimpleDrumSample(sf2, "Side Stick", datab);
2412
2413
SF2Layer layer = new SF2Layer(sf2);
2414
layer.setName("Side Stick");
2415
2416
SF2GlobalRegion global = new SF2GlobalRegion();
2417
layer.setGlobalZone(global);
2418
sf2.addResource(layer);
2419
2420
SF2LayerRegion region = new SF2LayerRegion();
2421
region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2422
region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2423
region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -50);
2424
region.setSample(sample);
2425
layer.getRegions().add(region);
2426
2427
return layer;
2428
2429
}
2430
2431
public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,
2432
double[] data, double base) {
2433
return newSimpleFFTSample(sf2, name, data, base, 10);
2434
}
2435
2436
public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,
2437
double[] data, double base, int fadeuptime) {
2438
2439
int fftsize = data.length / 2;
2440
AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
2441
double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;
2442
2443
randomPhase(data);
2444
ifft(data);
2445
data = realPart(data);
2446
normalize(data, 0.9);
2447
float[] fdata = toFloat(data);
2448
fdata = loopExtend(fdata, fdata.length + 512);
2449
fadeUp(fdata, fadeuptime);
2450
byte[] bdata = toBytes(fdata, format);
2451
2452
/*
2453
* Create SoundFont2 sample.
2454
*/
2455
SF2Sample sample = new SF2Sample(sf2);
2456
sample.setName(name);
2457
sample.setData(bdata);
2458
sample.setStartLoop(256);
2459
sample.setEndLoop(fftsize + 256);
2460
sample.setSampleRate((long) format.getSampleRate());
2461
double orgnote = (69 + 12)
2462
+ (12 * Math.log(basefreq / 440.0) / Math.log(2));
2463
sample.setOriginalPitch((int) orgnote);
2464
sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));
2465
sf2.addResource(sample);
2466
2467
return sample;
2468
}
2469
2470
public static SF2Sample newSimpleFFTSample_dist(SF2Soundbank sf2,
2471
String name, double[] data, double base, double preamp) {
2472
2473
int fftsize = data.length / 2;
2474
AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
2475
double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;
2476
2477
randomPhase(data);
2478
ifft(data);
2479
data = realPart(data);
2480
2481
for (int i = 0; i < data.length; i++) {
2482
data[i] = (1 - Math.exp(-Math.abs(data[i] * preamp)))
2483
* Math.signum(data[i]);
2484
}
2485
2486
normalize(data, 0.9);
2487
float[] fdata = toFloat(data);
2488
fdata = loopExtend(fdata, fdata.length + 512);
2489
fadeUp(fdata, 80);
2490
byte[] bdata = toBytes(fdata, format);
2491
2492
/*
2493
* Create SoundFont2 sample.
2494
*/
2495
SF2Sample sample = new SF2Sample(sf2);
2496
sample.setName(name);
2497
sample.setData(bdata);
2498
sample.setStartLoop(256);
2499
sample.setEndLoop(fftsize + 256);
2500
sample.setSampleRate((long) format.getSampleRate());
2501
double orgnote = (69 + 12)
2502
+ (12 * Math.log(basefreq / 440.0) / Math.log(2));
2503
sample.setOriginalPitch((int) orgnote);
2504
sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));
2505
sf2.addResource(sample);
2506
2507
return sample;
2508
}
2509
2510
public static SF2Sample newSimpleDrumSample(SF2Soundbank sf2, String name,
2511
double[] data) {
2512
2513
int fftsize = data.length;
2514
AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
2515
2516
byte[] bdata = toBytes(toFloat(realPart(data)), format);
2517
2518
/*
2519
* Create SoundFont2 sample.
2520
*/
2521
SF2Sample sample = new SF2Sample(sf2);
2522
sample.setName(name);
2523
sample.setData(bdata);
2524
sample.setStartLoop(256);
2525
sample.setEndLoop(fftsize + 256);
2526
sample.setSampleRate((long) format.getSampleRate());
2527
sample.setOriginalPitch(60);
2528
sf2.addResource(sample);
2529
2530
return sample;
2531
}
2532
2533
public static SF2Layer newLayer(SF2Soundbank sf2, String name, SF2Sample sample) {
2534
SF2LayerRegion region = new SF2LayerRegion();
2535
region.setSample(sample);
2536
2537
SF2Layer layer = new SF2Layer(sf2);
2538
layer.setName(name);
2539
layer.getRegions().add(region);
2540
sf2.addResource(layer);
2541
2542
return layer;
2543
}
2544
2545
public static SF2Instrument newInstrument(SF2Soundbank sf2, String name,
2546
Patch patch, SF2Layer... layers) {
2547
2548
/*
2549
* Create SoundFont2 instrument.
2550
*/
2551
SF2Instrument ins = new SF2Instrument(sf2);
2552
ins.setPatch(patch);
2553
ins.setName(name);
2554
sf2.addInstrument(ins);
2555
2556
/*
2557
* Create region for instrument.
2558
*/
2559
for (int i = 0; i < layers.length; i++) {
2560
SF2InstrumentRegion insregion = new SF2InstrumentRegion();
2561
insregion.setLayer(layers[i]);
2562
ins.getRegions().add(insregion);
2563
}
2564
2565
return ins;
2566
}
2567
2568
public static void ifft(double[] data) {
2569
new FFT(data.length / 2, 1).transform(data);
2570
}
2571
2572
public static void fft(double[] data) {
2573
new FFT(data.length / 2, -1).transform(data);
2574
}
2575
2576
public static void complexGaussianDist(double[] cdata, double m,
2577
double s, double v) {
2578
for (int x = 0; x < cdata.length / 4; x++) {
2579
cdata[x * 2] += v * (1.0 / (s * Math.sqrt(2 * Math.PI))
2580
* Math.exp((-1.0 / 2.0) * Math.pow((x - m) / s, 2.0)));
2581
}
2582
}
2583
2584
public static void randomPhase(double[] data) {
2585
for (int i = 0; i < data.length; i += 2) {
2586
double phase = Math.random() * 2 * Math.PI;
2587
double d = data[i];
2588
data[i] = Math.sin(phase) * d;
2589
data[i + 1] = Math.cos(phase) * d;
2590
}
2591
}
2592
2593
public static void randomPhase(double[] data, Random random) {
2594
for (int i = 0; i < data.length; i += 2) {
2595
double phase = random.nextDouble() * 2 * Math.PI;
2596
double d = data[i];
2597
data[i] = Math.sin(phase) * d;
2598
data[i + 1] = Math.cos(phase) * d;
2599
}
2600
}
2601
2602
public static void normalize(double[] data, double target) {
2603
double maxvalue = 0;
2604
for (int i = 0; i < data.length; i++) {
2605
if (data[i] > maxvalue)
2606
maxvalue = data[i];
2607
if (-data[i] > maxvalue)
2608
maxvalue = -data[i];
2609
}
2610
if (maxvalue == 0)
2611
return;
2612
double gain = target / maxvalue;
2613
for (int i = 0; i < data.length; i++)
2614
data[i] *= gain;
2615
}
2616
2617
public static void normalize(float[] data, double target) {
2618
double maxvalue = 0.5;
2619
for (int i = 0; i < data.length; i++) {
2620
if (data[i * 2] > maxvalue)
2621
maxvalue = data[i * 2];
2622
if (-data[i * 2] > maxvalue)
2623
maxvalue = -data[i * 2];
2624
}
2625
double gain = target / maxvalue;
2626
for (int i = 0; i < data.length; i++)
2627
data[i * 2] *= gain;
2628
}
2629
2630
public static double[] realPart(double[] in) {
2631
double[] out = new double[in.length / 2];
2632
for (int i = 0; i < out.length; i++) {
2633
out[i] = in[i * 2];
2634
}
2635
return out;
2636
}
2637
2638
public static double[] imgPart(double[] in) {
2639
double[] out = new double[in.length / 2];
2640
for (int i = 0; i < out.length; i++) {
2641
out[i] = in[i * 2];
2642
}
2643
return out;
2644
}
2645
2646
public static float[] toFloat(double[] in) {
2647
float[] out = new float[in.length];
2648
for (int i = 0; i < out.length; i++) {
2649
out[i] = (float) in[i];
2650
}
2651
return out;
2652
}
2653
2654
public static byte[] toBytes(float[] in, AudioFormat format) {
2655
byte[] out = new byte[in.length * format.getFrameSize()];
2656
return AudioFloatConverter.getConverter(format).toByteArray(in, out);
2657
}
2658
2659
public static void fadeUp(double[] data, int samples) {
2660
double dsamples = samples;
2661
for (int i = 0; i < samples; i++)
2662
data[i] *= i / dsamples;
2663
}
2664
2665
public static void fadeUp(float[] data, int samples) {
2666
double dsamples = samples;
2667
for (int i = 0; i < samples; i++)
2668
data[i] *= i / dsamples;
2669
}
2670
2671
public static double[] loopExtend(double[] data, int newsize) {
2672
double[] outdata = new double[newsize];
2673
int p_len = data.length;
2674
int p_ps = 0;
2675
for (int i = 0; i < outdata.length; i++) {
2676
outdata[i] = data[p_ps];
2677
p_ps++;
2678
if (p_ps == p_len)
2679
p_ps = 0;
2680
}
2681
return outdata;
2682
}
2683
2684
public static float[] loopExtend(float[] data, int newsize) {
2685
float[] outdata = new float[newsize];
2686
int p_len = data.length;
2687
int p_ps = 0;
2688
for (int i = 0; i < outdata.length; i++) {
2689
outdata[i] = data[p_ps];
2690
p_ps++;
2691
if (p_ps == p_len)
2692
p_ps = 0;
2693
}
2694
return outdata;
2695
}
2696
}
2697
2698