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