| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
package com.sun.media.sound;  | 
 | 
 | 
 | 
import java.util.Random;  | 
 | 
 | 
 | 
import javax.sound.midi.Patch;  | 
 | 
import javax.sound.sampled.AudioFormat;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public final class EmergencySoundbank { | 
 | 
 | 
 | 
    private final static String[] general_midi_instruments = { | 
 | 
        "Acoustic Grand Piano",  | 
 | 
        "Bright Acoustic Piano",  | 
 | 
        "Electric Grand Piano",  | 
 | 
        "Honky-tonk Piano",  | 
 | 
        "Electric Piano 1",  | 
 | 
        "Electric Piano 2",  | 
 | 
        "Harpsichord",  | 
 | 
        "Clavi",  | 
 | 
        "Celesta",  | 
 | 
        "Glockenspiel",  | 
 | 
        "Music Box",  | 
 | 
        "Vibraphone",  | 
 | 
        "Marimba",  | 
 | 
        "Xylophone",  | 
 | 
        "Tubular Bells",  | 
 | 
        "Dulcimer",  | 
 | 
        "Drawbar Organ",  | 
 | 
        "Percussive Organ",  | 
 | 
        "Rock Organ",  | 
 | 
        "Church Organ",  | 
 | 
        "Reed Organ",  | 
 | 
        "Accordion",  | 
 | 
        "Harmonica",  | 
 | 
        "Tango Accordion",  | 
 | 
        "Acoustic Guitar (nylon)",  | 
 | 
        "Acoustic Guitar (steel)",  | 
 | 
        "Electric Guitar (jazz)",  | 
 | 
        "Electric Guitar (clean)",  | 
 | 
        "Electric Guitar (muted)",  | 
 | 
        "Overdriven Guitar",  | 
 | 
        "Distortion Guitar",  | 
 | 
        "Guitar harmonics",  | 
 | 
        "Acoustic Bass",  | 
 | 
        "Electric Bass (finger)",  | 
 | 
        "Electric Bass (pick)",  | 
 | 
        "Fretless Bass",  | 
 | 
        "Slap Bass 1",  | 
 | 
        "Slap Bass 2",  | 
 | 
        "Synth Bass 1",  | 
 | 
        "Synth Bass 2",  | 
 | 
        "Violin",  | 
 | 
        "Viola",  | 
 | 
        "Cello",  | 
 | 
        "Contrabass",  | 
 | 
        "Tremolo Strings",  | 
 | 
        "Pizzicato Strings",  | 
 | 
        "Orchestral Harp",  | 
 | 
        "Timpani",  | 
 | 
        "String Ensemble 1",  | 
 | 
        "String Ensemble 2",  | 
 | 
        "SynthStrings 1",  | 
 | 
        "SynthStrings 2",  | 
 | 
        "Choir Aahs",  | 
 | 
        "Voice Oohs",  | 
 | 
        "Synth Voice",  | 
 | 
        "Orchestra Hit",  | 
 | 
        "Trumpet",  | 
 | 
        "Trombone",  | 
 | 
        "Tuba",  | 
 | 
        "Muted Trumpet",  | 
 | 
        "French Horn",  | 
 | 
        "Brass Section",  | 
 | 
        "SynthBrass 1",  | 
 | 
        "SynthBrass 2",  | 
 | 
        "Soprano Sax",  | 
 | 
        "Alto Sax",  | 
 | 
        "Tenor Sax",  | 
 | 
        "Baritone Sax",  | 
 | 
        "Oboe",  | 
 | 
        "English Horn",  | 
 | 
        "Bassoon",  | 
 | 
        "Clarinet",  | 
 | 
        "Piccolo",  | 
 | 
        "Flute",  | 
 | 
        "Recorder",  | 
 | 
        "Pan Flute",  | 
 | 
        "Blown Bottle",  | 
 | 
        "Shakuhachi",  | 
 | 
        "Whistle",  | 
 | 
        "Ocarina",  | 
 | 
        "Lead 1 (square)",  | 
 | 
        "Lead 2 (sawtooth)",  | 
 | 
        "Lead 3 (calliope)",  | 
 | 
        "Lead 4 (chiff)",  | 
 | 
        "Lead 5 (charang)",  | 
 | 
        "Lead 6 (voice)",  | 
 | 
        "Lead 7 (fifths)",  | 
 | 
        "Lead 8 (bass + lead)",  | 
 | 
        "Pad 1 (new age)",  | 
 | 
        "Pad 2 (warm)",  | 
 | 
        "Pad 3 (polysynth)",  | 
 | 
        "Pad 4 (choir)",  | 
 | 
        "Pad 5 (bowed)",  | 
 | 
        "Pad 6 (metallic)",  | 
 | 
        "Pad 7 (halo)",  | 
 | 
        "Pad 8 (sweep)",  | 
 | 
        "FX 1 (rain)",  | 
 | 
        "FX 2 (soundtrack)",  | 
 | 
        "FX 3 (crystal)",  | 
 | 
        "FX 4 (atmosphere)",  | 
 | 
        "FX 5 (brightness)",  | 
 | 
        "FX 6 (goblins)",  | 
 | 
        "FX 7 (echoes)",  | 
 | 
        "FX 8 (sci-fi)",  | 
 | 
        "Sitar",  | 
 | 
        "Banjo",  | 
 | 
        "Shamisen",  | 
 | 
        "Koto",  | 
 | 
        "Kalimba",  | 
 | 
        "Bag pipe",  | 
 | 
        "Fiddle",  | 
 | 
        "Shanai",  | 
 | 
        "Tinkle Bell",  | 
 | 
        "Agogo",  | 
 | 
        "Steel Drums",  | 
 | 
        "Woodblock",  | 
 | 
        "Taiko Drum",  | 
 | 
        "Melodic Tom",  | 
 | 
        "Synth Drum",  | 
 | 
        "Reverse Cymbal",  | 
 | 
        "Guitar Fret Noise",  | 
 | 
        "Breath Noise",  | 
 | 
        "Seashore",  | 
 | 
        "Bird Tweet",  | 
 | 
        "Telephone Ring",  | 
 | 
        "Helicopter",  | 
 | 
        "Applause",  | 
 | 
        "Gunshot"  | 
 | 
    };  | 
 | 
 | 
 | 
    public static SF2Soundbank createSoundbank() throws Exception { | 
 | 
        SF2Soundbank sf2 = new SF2Soundbank();  | 
 | 
        sf2.setName("Emergency GM sound set"); | 
 | 
        sf2.setVendor("Generated"); | 
 | 
        sf2.setDescription("Emergency generated soundbank"); | 
 | 
 | 
 | 
        /*  | 
 | 
         *  percussion instruments  | 
 | 
         */  | 
 | 
 | 
 | 
        SF2Layer bass_drum = new_bass_drum(sf2);  | 
 | 
        SF2Layer snare_drum = new_snare_drum(sf2);  | 
 | 
        SF2Layer tom = new_tom(sf2);  | 
 | 
        SF2Layer open_hihat = new_open_hihat(sf2);  | 
 | 
        SF2Layer closed_hihat = new_closed_hihat(sf2);  | 
 | 
        SF2Layer crash_cymbal = new_crash_cymbal(sf2);  | 
 | 
        SF2Layer side_stick = new_side_stick(sf2);  | 
 | 
 | 
 | 
        SF2Layer[] drums = new SF2Layer[128];  | 
 | 
        drums[35] = bass_drum;  | 
 | 
        drums[36] = bass_drum;  | 
 | 
        drums[38] = snare_drum;  | 
 | 
        drums[40] = snare_drum;  | 
 | 
        drums[41] = tom;  | 
 | 
        drums[43] = tom;  | 
 | 
        drums[45] = tom;  | 
 | 
        drums[47] = tom;  | 
 | 
        drums[48] = tom;  | 
 | 
        drums[50] = tom;  | 
 | 
        drums[42] = closed_hihat;  | 
 | 
        drums[44] = closed_hihat;  | 
 | 
        drums[46] = open_hihat;  | 
 | 
        drums[49] = crash_cymbal;  | 
 | 
        drums[51] = crash_cymbal;  | 
 | 
        drums[52] = crash_cymbal;  | 
 | 
        drums[55] = crash_cymbal;  | 
 | 
        drums[57] = crash_cymbal;  | 
 | 
        drums[59] = crash_cymbal;  | 
 | 
 | 
 | 
          | 
 | 
        drums[37] = side_stick;  | 
 | 
        drums[39] = side_stick;  | 
 | 
        drums[53] = side_stick;  | 
 | 
        drums[54] = side_stick;  | 
 | 
        drums[56] = side_stick;  | 
 | 
        drums[58] = side_stick;  | 
 | 
        drums[69] = side_stick;  | 
 | 
        drums[70] = side_stick;  | 
 | 
        drums[75] = side_stick;  | 
 | 
        drums[60] = side_stick;  | 
 | 
        drums[61] = side_stick;  | 
 | 
        drums[62] = side_stick;  | 
 | 
        drums[63] = side_stick;  | 
 | 
        drums[64] = side_stick;  | 
 | 
        drums[65] = side_stick;  | 
 | 
        drums[66] = side_stick;  | 
 | 
        drums[67] = side_stick;  | 
 | 
        drums[68] = side_stick;  | 
 | 
        drums[71] = side_stick;  | 
 | 
        drums[72] = side_stick;  | 
 | 
        drums[73] = side_stick;  | 
 | 
        drums[74] = side_stick;  | 
 | 
        drums[76] = side_stick;  | 
 | 
        drums[77] = side_stick;  | 
 | 
        drums[78] = side_stick;  | 
 | 
        drums[79] = side_stick;  | 
 | 
        drums[80] = side_stick;  | 
 | 
        drums[81] = side_stick;  | 
 | 
 | 
 | 
 | 
 | 
        SF2Instrument drum_instrument = new SF2Instrument(sf2);  | 
 | 
        drum_instrument.setName("Standard Kit"); | 
 | 
        drum_instrument.setPatch(new ModelPatch(0, 0, true));  | 
 | 
        sf2.addInstrument(drum_instrument);  | 
 | 
        for (int i = 0; i < drums.length; i++) { | 
 | 
            if (drums[i] != null) { | 
 | 
                SF2InstrumentRegion region = new SF2InstrumentRegion();  | 
 | 
                region.setLayer(drums[i]);  | 
 | 
                region.putBytes(SF2InstrumentRegion.GENERATOR_KEYRANGE,  | 
 | 
                        new byte[]{(byte) i, (byte) i}); | 
 | 
                drum_instrument.getRegions().add(region);  | 
 | 
            }  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        /*  | 
 | 
         *  melodic instruments  | 
 | 
         */  | 
 | 
 | 
 | 
        SF2Layer gpiano = new_gpiano(sf2);  | 
 | 
        SF2Layer gpiano2 = new_gpiano2(sf2);  | 
 | 
        SF2Layer gpiano_hammer = new_piano_hammer(sf2);  | 
 | 
        SF2Layer piano1 = new_piano1(sf2);  | 
 | 
        SF2Layer epiano1 = new_epiano1(sf2);  | 
 | 
        SF2Layer epiano2 = new_epiano2(sf2);  | 
 | 
 | 
 | 
        SF2Layer guitar = new_guitar1(sf2);  | 
 | 
        SF2Layer guitar_pick = new_guitar_pick(sf2);  | 
 | 
        SF2Layer guitar_dist = new_guitar_dist(sf2);  | 
 | 
        SF2Layer bass1 = new_bass1(sf2);  | 
 | 
        SF2Layer bass2 = new_bass2(sf2);  | 
 | 
        SF2Layer synthbass = new_synthbass(sf2);  | 
 | 
        SF2Layer string2 = new_string2(sf2);  | 
 | 
        SF2Layer orchhit = new_orchhit(sf2);  | 
 | 
        SF2Layer choir = new_choir(sf2);  | 
 | 
        SF2Layer solostring = new_solostring(sf2);  | 
 | 
        SF2Layer organ = new_organ(sf2);  | 
 | 
        SF2Layer ch_organ = new_ch_organ(sf2);  | 
 | 
        SF2Layer bell = new_bell(sf2);  | 
 | 
        SF2Layer flute = new_flute(sf2);  | 
 | 
 | 
 | 
        SF2Layer timpani = new_timpani(sf2);  | 
 | 
        SF2Layer melodic_toms = new_melodic_toms(sf2);  | 
 | 
        SF2Layer trumpet = new_trumpet(sf2);  | 
 | 
        SF2Layer trombone = new_trombone(sf2);  | 
 | 
        SF2Layer brass_section = new_brass_section(sf2);  | 
 | 
        SF2Layer horn = new_horn(sf2);  | 
 | 
        SF2Layer sax = new_sax(sf2);  | 
 | 
        SF2Layer oboe = new_oboe(sf2);  | 
 | 
        SF2Layer bassoon = new_bassoon(sf2);  | 
 | 
        SF2Layer clarinet = new_clarinet(sf2);  | 
 | 
        SF2Layer reverse_cymbal = new_reverse_cymbal(sf2);  | 
 | 
 | 
 | 
        SF2Layer defaultsound = piano1;  | 
 | 
 | 
 | 
        newInstrument(sf2, "Piano", new Patch(0, 0), gpiano, gpiano_hammer);  | 
 | 
        newInstrument(sf2, "Piano", new Patch(0, 1), gpiano2, gpiano_hammer);  | 
 | 
        newInstrument(sf2, "Piano", new Patch(0, 2), piano1);  | 
 | 
        { | 
 | 
            SF2Instrument ins = newInstrument(sf2, "Honky-tonk Piano",  | 
 | 
                    new Patch(0, 3), piano1, piano1);  | 
 | 
            SF2InstrumentRegion region = ins.getRegions().get(0);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 80);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_FINETUNE, 30);  | 
 | 
            region = ins.getRegions().get(1);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 30);  | 
 | 
        }  | 
 | 
        newInstrument(sf2, "Rhodes", new Patch(0, 4), epiano2);  | 
 | 
        newInstrument(sf2, "Rhodes", new Patch(0, 5), epiano2);  | 
 | 
        newInstrument(sf2, "Clavinet", new Patch(0, 6), epiano1);  | 
 | 
        newInstrument(sf2, "Clavinet", new Patch(0, 7), epiano1);  | 
 | 
        newInstrument(sf2, "Rhodes", new Patch(0, 8), epiano2);  | 
 | 
        newInstrument(sf2, "Bell", new Patch(0, 9), bell);  | 
 | 
        newInstrument(sf2, "Bell", new Patch(0, 10), bell);  | 
 | 
        newInstrument(sf2, "Vibraphone", new Patch(0, 11), bell);  | 
 | 
        newInstrument(sf2, "Marimba", new Patch(0, 12), bell);  | 
 | 
        newInstrument(sf2, "Marimba", new Patch(0, 13), bell);  | 
 | 
        newInstrument(sf2, "Bell", new Patch(0, 14), bell);  | 
 | 
        newInstrument(sf2, "Rock Organ", new Patch(0, 15), organ);  | 
 | 
        newInstrument(sf2, "Rock Organ", new Patch(0, 16), organ);  | 
 | 
        newInstrument(sf2, "Perc Organ", new Patch(0, 17), organ);  | 
 | 
        newInstrument(sf2, "Rock Organ", new Patch(0, 18), organ);  | 
 | 
        newInstrument(sf2, "Church Organ", new Patch(0, 19), ch_organ);  | 
 | 
        newInstrument(sf2, "Accordion", new Patch(0, 20), organ);  | 
 | 
        newInstrument(sf2, "Accordion", new Patch(0, 21), organ);  | 
 | 
        newInstrument(sf2, "Accordion", new Patch(0, 22), organ);  | 
 | 
        newInstrument(sf2, "Accordion", new Patch(0, 23), organ);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 24), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 25), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 26), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 27), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 28), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Distorted Guitar", new Patch(0, 29), guitar_dist);  | 
 | 
        newInstrument(sf2, "Distorted Guitar", new Patch(0, 30), guitar_dist);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 31), guitar, guitar_pick);  | 
 | 
        newInstrument(sf2, "Finger Bass", new Patch(0, 32), bass1);  | 
 | 
        newInstrument(sf2, "Finger Bass", new Patch(0, 33), bass1);  | 
 | 
        newInstrument(sf2, "Finger Bass", new Patch(0, 34), bass1);  | 
 | 
        newInstrument(sf2, "Frettless Bass", new Patch(0, 35), bass2);  | 
 | 
        newInstrument(sf2, "Frettless Bass", new Patch(0, 36), bass2);  | 
 | 
        newInstrument(sf2, "Frettless Bass", new Patch(0, 37), bass2);  | 
 | 
        newInstrument(sf2, "Synth Bass1", new Patch(0, 38), synthbass);  | 
 | 
        newInstrument(sf2, "Synth Bass2", new Patch(0, 39), synthbass);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 40), string2, solostring);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 41), string2, solostring);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 42), string2, solostring);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 43), string2, solostring);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 44), string2, solostring);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 45), defaultsound);  | 
 | 
        newInstrument(sf2, "Harp", new Patch(0, 46), bell);  | 
 | 
        newInstrument(sf2, "Timpani", new Patch(0, 47), timpani);  | 
 | 
        newInstrument(sf2, "Strings", new Patch(0, 48), string2);  | 
 | 
        SF2Instrument slow_strings =  | 
 | 
                newInstrument(sf2, "Slow Strings", new Patch(0, 49), string2);  | 
 | 
        SF2InstrumentRegion region = slow_strings.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, 2500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 2000);  | 
 | 
        newInstrument(sf2, "Synth Strings", new Patch(0, 50), string2);  | 
 | 
        newInstrument(sf2, "Synth Strings", new Patch(0, 51), string2);  | 
 | 
 | 
 | 
 | 
 | 
        newInstrument(sf2, "Choir", new Patch(0, 52), choir);  | 
 | 
        newInstrument(sf2, "Choir", new Patch(0, 53), choir);  | 
 | 
        newInstrument(sf2, "Choir", new Patch(0, 54), choir);  | 
 | 
        { | 
 | 
            SF2Instrument ins = newInstrument(sf2, "Orch Hit",  | 
 | 
                    new Patch(0, 55), orchhit, orchhit, timpani);  | 
 | 
            region = ins.getRegions().get(0);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_COARSETUNE, -12);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        }  | 
 | 
        newInstrument(sf2, "Trumpet", new Patch(0, 56), trumpet);  | 
 | 
        newInstrument(sf2, "Trombone", new Patch(0, 57), trombone);  | 
 | 
        newInstrument(sf2, "Trombone", new Patch(0, 58), trombone);  | 
 | 
        newInstrument(sf2, "Trumpet", new Patch(0, 59), trumpet);  | 
 | 
        newInstrument(sf2, "Horn", new Patch(0, 60), horn);  | 
 | 
        newInstrument(sf2, "Brass Section", new Patch(0, 61), brass_section);  | 
 | 
        newInstrument(sf2, "Brass Section", new Patch(0, 62), brass_section);  | 
 | 
        newInstrument(sf2, "Brass Section", new Patch(0, 63), brass_section);  | 
 | 
        newInstrument(sf2, "Sax", new Patch(0, 64), sax);  | 
 | 
        newInstrument(sf2, "Sax", new Patch(0, 65), sax);  | 
 | 
        newInstrument(sf2, "Sax", new Patch(0, 66), sax);  | 
 | 
        newInstrument(sf2, "Sax", new Patch(0, 67), sax);  | 
 | 
        newInstrument(sf2, "Oboe", new Patch(0, 68), oboe);  | 
 | 
        newInstrument(sf2, "Horn", new Patch(0, 69), horn);  | 
 | 
        newInstrument(sf2, "Bassoon", new Patch(0, 70), bassoon);  | 
 | 
        newInstrument(sf2, "Clarinet", new Patch(0, 71), clarinet);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 72), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 73), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 74), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 75), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 76), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 77), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 78), flute);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 79), flute);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 80), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 81), organ);  | 
 | 
        newInstrument(sf2, "Flute", new Patch(0, 82), flute);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 83), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 84), organ);  | 
 | 
        newInstrument(sf2, "Choir", new Patch(0, 85), choir);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 86), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 87), organ);  | 
 | 
        newInstrument(sf2, "Synth Strings", new Patch(0, 88), string2);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 89), organ);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 90), defaultsound);  | 
 | 
        newInstrument(sf2, "Choir", new Patch(0, 91), choir);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 92), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 93), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 94), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 95), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 96), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 97), organ);  | 
 | 
        newInstrument(sf2, "Bell", new Patch(0, 98), bell);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 99), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 100), organ);  | 
 | 
        newInstrument(sf2, "Organ", new Patch(0, 101), organ);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 102), defaultsound);  | 
 | 
        newInstrument(sf2, "Synth Strings", new Patch(0, 103), string2);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 104), defaultsound);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 105), defaultsound);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 106), defaultsound);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 107), defaultsound);  | 
 | 
        newInstrument(sf2, "Marimba", new Patch(0, 108), bell);  | 
 | 
        newInstrument(sf2, "Sax", new Patch(0, 109), sax);  | 
 | 
        newInstrument(sf2, "Solo String", new Patch(0, 110), string2, solostring);  | 
 | 
        newInstrument(sf2, "Oboe", new Patch(0, 111), oboe);  | 
 | 
        newInstrument(sf2, "Bell", new Patch(0, 112), bell);  | 
 | 
        newInstrument(sf2, "Melodic Toms", new Patch(0, 113), melodic_toms);  | 
 | 
        newInstrument(sf2, "Marimba", new Patch(0, 114), bell);  | 
 | 
        newInstrument(sf2, "Melodic Toms", new Patch(0, 115), melodic_toms);  | 
 | 
        newInstrument(sf2, "Melodic Toms", new Patch(0, 116), melodic_toms);  | 
 | 
        newInstrument(sf2, "Melodic Toms", new Patch(0, 117), melodic_toms);  | 
 | 
        newInstrument(sf2, "Reverse Cymbal", new Patch(0, 118), reverse_cymbal);  | 
 | 
        newInstrument(sf2, "Reverse Cymbal", new Patch(0, 119), reverse_cymbal);  | 
 | 
        newInstrument(sf2, "Guitar", new Patch(0, 120), guitar);  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 121), defaultsound);  | 
 | 
        { | 
 | 
            SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",  | 
 | 
                    new Patch(0, 122), reverse_cymbal);  | 
 | 
            region = ins.getRegions().get(0);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);  | 
 | 
        }  | 
 | 
        { | 
 | 
            SF2Instrument ins = newInstrument(sf2, "Bird/Flute",  | 
 | 
                    new Patch(0, 123), flute);  | 
 | 
            region = ins.getRegions().get(0);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_COARSETUNE, 24);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -3000);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        }  | 
 | 
        newInstrument(sf2, "Def", new Patch(0, 124), side_stick);  | 
 | 
        { | 
 | 
            SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",  | 
 | 
                    new Patch(0, 125), reverse_cymbal);  | 
 | 
            region = ins.getRegions().get(0);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);  | 
 | 
            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);  | 
 | 
        }  | 
 | 
        newInstrument(sf2, "Applause/crash_cymbal",  | 
 | 
                new Patch(0, 126), crash_cymbal);  | 
 | 
        newInstrument(sf2, "Gunshot/side_stick", new Patch(0, 127), side_stick);  | 
 | 
 | 
 | 
        for (SF2Instrument instrument : sf2.getInstruments()) { | 
 | 
            Patch patch = instrument.getPatch();  | 
 | 
            if (patch instanceof ModelPatch) { | 
 | 
                if (((ModelPatch) patch).isPercussion())  | 
 | 
                    continue;  | 
 | 
            }  | 
 | 
            instrument.setName(general_midi_instruments[patch.getProgram()]);  | 
 | 
        }  | 
 | 
 | 
 | 
        return sf2;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_bell(SF2Soundbank sf2) { | 
 | 
        Random random = new Random(102030201);  | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.00001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.01;  | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1) * detune, w, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "EPiano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_guitar1(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.01;  | 
 | 
        double start_a = 2;  | 
 | 
        double end_a = 0.01;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
 | 
 | 
        double[] aa = new double[40];  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] = 2;  | 
 | 
        aa[1] = 0.5;  | 
 | 
        aa[2] = 0.45;  | 
 | 
        aa[3] = 0.2;  | 
 | 
        aa[4] = 1;  | 
 | 
        aa[5] = 0.5;  | 
 | 
        aa[6] = 2;  | 
 | 
        aa[7] = 1;  | 
 | 
        aa[8] = 0.5;  | 
 | 
        aa[9] = 1;  | 
 | 
        aa[9] = 0.5;  | 
 | 
        aa[10] = 0.2;  | 
 | 
        aa[11] = 1;  | 
 | 
        aa[12] = 0.7;  | 
 | 
        aa[13] = 0.5;  | 
 | 
        aa[14] = 1;  | 
 | 
 | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Guitar", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Guitar", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_guitar_dist(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.01;  | 
 | 
        double start_a = 2;  | 
 | 
        double end_a = 0.01;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
 | 
 | 
        double[] aa = new double[40];  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] = 5;  | 
 | 
        aa[1] = 2;  | 
 | 
        aa[2] = 0.45;  | 
 | 
        aa[3] = 0.2;  | 
 | 
        aa[4] = 1;  | 
 | 
        aa[5] = 0.5;  | 
 | 
        aa[6] = 2;  | 
 | 
        aa[7] = 1;  | 
 | 
        aa[8] = 0.5;  | 
 | 
        aa[9] = 1;  | 
 | 
        aa[9] = 0.5;  | 
 | 
        aa[10] = 0.2;  | 
 | 
        aa[11] = 1;  | 
 | 
        aa[12] = 0.7;  | 
 | 
        aa[13] = 0.5;  | 
 | 
        aa[14] = 1;  | 
 | 
 | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample_dist(sf2, "Distorted Guitar",  | 
 | 
                data, base, 10000.0);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Layer layer = newLayer(sf2, "Distorted Guitar", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        //region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);  | 
 | 
        //region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 200);  | 
 | 
 | 
 | 
        //region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);  | 
 | 
        //region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
          | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);  | 
 | 
          | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_guitar_pick(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int m = 2;  | 
 | 
            int fftlen = 4096 * m;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5));  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 2048 * m; i++) { | 
 | 
                data[i] *= Math.exp(-Math.abs((i - 23) / ((double) m)) * 1.2)  | 
 | 
                        + Math.exp(-Math.abs((i - 40) / ((double) m)) * 0.9);  | 
 | 
            }  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.8);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9994;  | 
 | 
            }  | 
 | 
            datab = data;  | 
 | 
 | 
 | 
            fadeUp(data, 80);  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Guitar Noise", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Guitar Noise"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
//        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
/*  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);  | 
 | 
         */  | 
 | 
 | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_gpiano(SF2Soundbank sf2) { | 
 | 
          | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 15.0);  | 
 | 
 | 
 | 
        double[] aa = new double[30];  | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 2;  | 
 | 
          | 
 | 
        aa[4] *= 2;  | 
 | 
 | 
 | 
 | 
 | 
        aa[12] *= 0.9;  | 
 | 
        aa[13] *= 0.7;  | 
 | 
        for (int i = 14; i < 30; i++) { | 
 | 
            aa[i] *= 0.5;  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
              | 
 | 
            double w = 0.2;  | 
 | 
            double ai = aa[i];  | 
 | 
            if (i > 10) { | 
 | 
                w = 5;  | 
 | 
                ai *= 10;  | 
 | 
            }  | 
 | 
            int adjust = 0;  | 
 | 
            if (i > 5) { | 
 | 
                adjust = (i - 5) * 7;  | 
 | 
            }  | 
 | 
            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Grand Piano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_gpiano2(SF2Soundbank sf2) { | 
 | 
          | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 20.0);  | 
 | 
 | 
 | 
        double[] aa = new double[30];  | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 1;  | 
 | 
          | 
 | 
        aa[4] *= 2;  | 
 | 
 | 
 | 
 | 
 | 
        aa[12] *= 0.9;  | 
 | 
        aa[13] *= 0.7;  | 
 | 
        for (int i = 14; i < 30; i++) { | 
 | 
            aa[i] *= 0.5;  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
              | 
 | 
            double w = 0.2;  | 
 | 
            double ai = aa[i];  | 
 | 
            if (i > 10) { | 
 | 
                w = 5;  | 
 | 
                ai *= 10;  | 
 | 
            }  | 
 | 
            int adjust = 0;  | 
 | 
            if (i > 5) { | 
 | 
                adjust = (i - 5) * 7;  | 
 | 
            }  | 
 | 
            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Grand Piano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_piano_hammer(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int m = 2;  | 
 | 
            int fftlen = 4096 * m;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5));  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 2048 * m; i++)  | 
 | 
                data[i] *= Math.exp(-Math.abs((i - 37) / ((double) m)) * 0.05);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.6);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9997;  | 
 | 
            }  | 
 | 
            datab = data;  | 
 | 
 | 
 | 
            fadeUp(data, 80);  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Piano Hammer", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Piano Hammer"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
/*  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);  | 
 | 
         */  | 
 | 
 | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_piano1(SF2Soundbank sf2) { | 
 | 
          | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.0001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
 | 
 | 
        double[] aa = new double[30];  | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 5;  | 
 | 
        aa[2] *= 0.1;  | 
 | 
        aa[7] *= 5;  | 
 | 
 | 
 | 
 | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
              | 
 | 
            double w = 0.2;  | 
 | 
            double ai = aa[i];  | 
 | 
            if (i > 12) { | 
 | 
                w = 5;  | 
 | 
                ai *= 10;  | 
 | 
            }  | 
 | 
            int adjust = 0;  | 
 | 
            if (i > 5) { | 
 | 
                adjust = (i - 5) * 7;  | 
 | 
            }  | 
 | 
            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);  | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * (15.5), 1, 0.1);  | 
 | 
        complexGaussianDist(data, base * (17.5), 1, 0.01);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base, 200);  | 
 | 
        SF2Layer layer = newLayer(sf2, "EPiano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -1200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_epiano1(SF2Soundbank sf2) { | 
 | 
        Random random = new Random(302030201);  | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.05;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.0001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;  | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1) * detune, w, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "EPiano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_epiano2(SF2Soundbank sf2) { | 
 | 
        Random random = new Random(302030201);  | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.00001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;  | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1) * detune, w, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "EPiano", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 8000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 2400);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_bass1(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.05;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.02;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);  | 
 | 
 | 
 | 
        double[] aa = new double[25];  | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 8;  | 
 | 
        aa[1] *= 4;  | 
 | 
        aa[3] *= 8;  | 
 | 
        aa[5] *= 8;  | 
 | 
 | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Bass", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 11000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_synthbass(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.05;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.02;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);  | 
 | 
 | 
 | 
        double[] aa = new double[25];  | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 16;  | 
 | 
        aa[1] *= 4;  | 
 | 
        aa[3] *= 16;  | 
 | 
        aa[5] *= 8;  | 
 | 
 | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Bass", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -3000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_bass2(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 0.05;  | 
 | 
        double end_w = 0.05;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.002;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);  | 
 | 
 | 
 | 
        double[] aa = new double[25];  | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 8;  | 
 | 
        aa[1] *= 4;  | 
 | 
        aa[3] *= 8;  | 
 | 
        aa[5] *= 8;  | 
 | 
 | 
 | 
        for (int i = 0; i < 25; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Bass2", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Bass2", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_solostring(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 2;  | 
 | 
        double end_w = 2;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.01;  | 
 | 
 | 
 | 
        double[] aa = new double[18];  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < aa.length; i++) { | 
 | 
            a *= a_step;  | 
 | 
            aa[i] = a;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 5;  | 
 | 
        aa[1] *= 5;  | 
 | 
        aa[2] *= 5;  | 
 | 
        aa[3] *= 4;  | 
 | 
        aa[4] *= 4;  | 
 | 
        aa[5] *= 3;  | 
 | 
        aa[6] *= 3;  | 
 | 
        aa[7] *= 2;  | 
 | 
 | 
 | 
        for (int i = 0; i < aa.length; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, a);  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Strings", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_FREQVIBLFO, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_VIBLFOTOPITCH, 15);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_orchhit(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 2;  | 
 | 
        double end_w = 80;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
        complexGaussianDist(data, base * 4, 300, 1);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Och Strings", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Och Strings", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_string2(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 2;  | 
 | 
        double end_w = 80;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Strings", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_choir(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 25;  | 
 | 
        double start_w = 2;  | 
 | 
        double end_w = 80;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        double[] aa = new double[40];  | 
 | 
        for (int i = 0; i < aa.length; i++) { | 
 | 
            a *= a_step;  | 
 | 
            aa[i] = a;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[5] *= 0.1;  | 
 | 
        aa[6] *= 0.01;  | 
 | 
        aa[7] *= 0.1;  | 
 | 
        aa[8] *= 0.1;  | 
 | 
 | 
 | 
        for (int i = 0; i < aa.length; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Strings", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_organ(SF2Soundbank sf2) { | 
 | 
        Random random = new Random(102030201);  | 
 | 
        int x = 1;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.01;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
 | 
 | 
        for (int i = 0; i < 12; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w,  | 
 | 
                    a * (0.5 + 3 * (random.nextDouble())));  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Organ", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_ch_organ(SF2Soundbank sf2) { | 
 | 
        int x = 1;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
        double start_w = 0.01;  | 
 | 
        double end_w = 0.01;  | 
 | 
        double start_a = 0.2;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 60.0);  | 
 | 
 | 
 | 
        double[] aa = new double[60];  | 
 | 
        for (int i = 0; i < aa.length; i++) { | 
 | 
            a *= a_step;  | 
 | 
            aa[i] = a;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 5;  | 
 | 
        aa[1] *= 2;  | 
 | 
        aa[2] = 0;  | 
 | 
        aa[4] = 0;  | 
 | 
        aa[5] = 0;  | 
 | 
        aa[7] *= 7;  | 
 | 
        aa[9] = 0;  | 
 | 
        aa[10] = 0;  | 
 | 
        aa[12] = 0;  | 
 | 
        aa[15] *= 7;  | 
 | 
        aa[18] = 0;  | 
 | 
        aa[20] = 0;  | 
 | 
        aa[24] = 0;  | 
 | 
        aa[27] *= 5;  | 
 | 
        aa[29] = 0;  | 
 | 
        aa[30] = 0;  | 
 | 
        aa[33] = 0;  | 
 | 
        aa[36] *= 4;  | 
 | 
        aa[37] = 0;  | 
 | 
        aa[39] = 0;  | 
 | 
        aa[42] = 0;  | 
 | 
        aa[43] = 0;  | 
 | 
        aa[47] = 0;  | 
 | 
        aa[50] *= 4;  | 
 | 
        aa[52] = 0;  | 
 | 
        aa[55] = 0;  | 
 | 
        aa[57] = 0;  | 
 | 
 | 
 | 
 | 
 | 
        aa[10] *= 0.1;  | 
 | 
        aa[11] *= 0.1;  | 
 | 
        aa[12] *= 0.1;  | 
 | 
        aa[13] *= 0.1;  | 
 | 
 | 
 | 
        aa[17] *= 0.1;  | 
 | 
        aa[18] *= 0.1;  | 
 | 
        aa[19] *= 0.1;  | 
 | 
        aa[20] *= 0.1;  | 
 | 
 | 
 | 
        for (int i = 0; i < 60; i++) { | 
 | 
            double w = start_w + (end_w - start_w) * (i / 40.0);  | 
 | 
            complexGaussianDist(data, base * (i + 1), w, aa[i]);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Organ", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_flute(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 0.001, 0.5);  | 
 | 
        complexGaussianDist(data, base * 2, 0.001, 0.5);  | 
 | 
        complexGaussianDist(data, base * 3, 0.001, 0.5);  | 
 | 
        complexGaussianDist(data, base * 4, 0.01, 0.5);  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 4, 100, 120);  | 
 | 
        complexGaussianDist(data, base * 6, 100, 40);  | 
 | 
        complexGaussianDist(data, base * 8, 100, 80);  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 5, 0.001, 0.05);  | 
 | 
        complexGaussianDist(data, base * 6, 0.001, 0.06);  | 
 | 
        complexGaussianDist(data, base * 7, 0.001, 0.04);  | 
 | 
        complexGaussianDist(data, base * 8, 0.005, 0.06);  | 
 | 
        complexGaussianDist(data, base * 9, 0.005, 0.06);  | 
 | 
        complexGaussianDist(data, base * 10, 0.01, 0.1);  | 
 | 
        complexGaussianDist(data, base * 11, 0.08, 0.7);  | 
 | 
        complexGaussianDist(data, base * 12, 0.08, 0.6);  | 
 | 
        complexGaussianDist(data, base * 13, 0.08, 0.6);  | 
 | 
        complexGaussianDist(data, base * 14, 0.08, 0.6);  | 
 | 
        complexGaussianDist(data, base * 15, 0.08, 0.5);  | 
 | 
        complexGaussianDist(data, base * 16, 0.08, 0.5);  | 
 | 
        complexGaussianDist(data, base * 17, 0.08, 0.2);  | 
 | 
 | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 2, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 3, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 4, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 5, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 6, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 7, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 8, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 9, 20, 8);  | 
 | 
        complexGaussianDist(data, base * 10, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 11, 30, 9);  | 
 | 
        complexGaussianDist(data, base * 12, 30, 9);  | 
 | 
        complexGaussianDist(data, base * 13, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 14, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 15, 30, 7);  | 
 | 
        complexGaussianDist(data, base * 16, 30, 7);  | 
 | 
        complexGaussianDist(data, base * 17, 30, 6);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Flute", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_horn(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        double start_a = 0.5;  | 
 | 
        double end_a = 0.00000000001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            if (i == 0)  | 
 | 
                complexGaussianDist(data, base * (i + 1), 0.1, a * 0.2);  | 
 | 
            else  | 
 | 
                complexGaussianDist(data, base * (i + 1), 0.1, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 2, 100, 1);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Horn", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Horn", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_trumpet(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        double start_a = 0.5;  | 
 | 
        double end_a = 0.00001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);  | 
 | 
        double[] aa = new double[80];  | 
 | 
        for (int i = 0; i < 80; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 0.05;  | 
 | 
        aa[1] *= 0.2;  | 
 | 
        aa[2] *= 0.5;  | 
 | 
        aa[3] *= 0.85;  | 
 | 
 | 
 | 
        for (int i = 0; i < 80; i++) { | 
 | 
            complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 5, 300, 3);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Trumpet", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Trumpet", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, -2500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_brass_section(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        double start_a = 0.5;  | 
 | 
        double end_a = 0.005;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 30.0);  | 
 | 
        double[] aa = new double[30];  | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 0.8;  | 
 | 
        aa[1] *= 0.9;  | 
 | 
 | 
 | 
        double w = 5;  | 
 | 
        for (int i = 0; i < 30; i++) { | 
 | 
            complexGaussianDist(data, base * (i + 1), 0.1 * w, aa[i] * w);  | 
 | 
            w += 6;   | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 6, 300, 2);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Brass Section", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Brass Section", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -9200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_trombone(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        double start_a = 0.5;  | 
 | 
        double end_a = 0.001;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);  | 
 | 
        double[] aa = new double[80];  | 
 | 
        for (int i = 0; i < 80; i++) { | 
 | 
            aa[i] = a;  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        aa[0] *= 0.3;  | 
 | 
        aa[1] *= 0.7;  | 
 | 
 | 
 | 
        for (int i = 0; i < 80; i++) { | 
 | 
            complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 6, 300, 2);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Trombone", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Trombone", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -2000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_sax(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        double start_a = 0.5;  | 
 | 
        double end_a = 0.01;  | 
 | 
        double a = start_a;  | 
 | 
        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);  | 
 | 
        for (int i = 0; i < 40; i++) { | 
 | 
            if (i == 0 || i == 2)  | 
 | 
                complexGaussianDist(data, base * (i + 1), 0.1, a * 4);  | 
 | 
            else  | 
 | 
                complexGaussianDist(data, base * (i + 1), 0.1, a);  | 
 | 
            a *= a_step;  | 
 | 
        }  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 4, 200, 1);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Sax", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Sax", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
 | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_oboe(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 5, 100, 80);  | 
 | 
 | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 0.01, 0.53);  | 
 | 
        complexGaussianDist(data, base * 2, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 3, 0.01, 0.48);  | 
 | 
        complexGaussianDist(data, base * 4, 0.01, 0.49);  | 
 | 
        complexGaussianDist(data, base * 5, 0.01, 5);  | 
 | 
        complexGaussianDist(data, base * 6, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 7, 0.01, 0.50);  | 
 | 
        complexGaussianDist(data, base * 8, 0.01, 0.59);  | 
 | 
        complexGaussianDist(data, base * 9, 0.01, 0.61);  | 
 | 
        complexGaussianDist(data, base * 10, 0.01, 0.52);  | 
 | 
        complexGaussianDist(data, base * 11, 0.01, 0.49);  | 
 | 
        complexGaussianDist(data, base * 12, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 13, 0.01, 0.48);  | 
 | 
        complexGaussianDist(data, base * 14, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 15, 0.01, 0.46);  | 
 | 
        complexGaussianDist(data, base * 16, 0.01, 0.35);  | 
 | 
        complexGaussianDist(data, base * 17, 0.01, 0.20);  | 
 | 
        complexGaussianDist(data, base * 18, 0.01, 0.10);  | 
 | 
        complexGaussianDist(data, base * 19, 0.01, 0.5);  | 
 | 
        complexGaussianDist(data, base * 20, 0.01, 0.1);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Oboe", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Oboe", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_bassoon(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 2, 100, 40);  | 
 | 
        complexGaussianDist(data, base * 4, 100, 20);  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 0.01, 0.53);  | 
 | 
        complexGaussianDist(data, base * 2, 0.01, 5);  | 
 | 
        complexGaussianDist(data, base * 3, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 4, 0.01, 0.48);  | 
 | 
        complexGaussianDist(data, base * 5, 0.01, 1.49);  | 
 | 
        complexGaussianDist(data, base * 6, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 7, 0.01, 0.50);  | 
 | 
        complexGaussianDist(data, base * 8, 0.01, 0.59);  | 
 | 
        complexGaussianDist(data, base * 9, 0.01, 0.61);  | 
 | 
        complexGaussianDist(data, base * 10, 0.01, 0.52);  | 
 | 
        complexGaussianDist(data, base * 11, 0.01, 0.49);  | 
 | 
        complexGaussianDist(data, base * 12, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 13, 0.01, 0.48);  | 
 | 
        complexGaussianDist(data, base * 14, 0.01, 0.51);  | 
 | 
        complexGaussianDist(data, base * 15, 0.01, 0.46);  | 
 | 
        complexGaussianDist(data, base * 16, 0.01, 0.35);  | 
 | 
        complexGaussianDist(data, base * 17, 0.01, 0.20);  | 
 | 
        complexGaussianDist(data, base * 18, 0.01, 0.10);  | 
 | 
        complexGaussianDist(data, base * 19, 0.01, 0.5);  | 
 | 
        complexGaussianDist(data, base * 20, 0.01, 0.1);  | 
 | 
 | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Flute", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_clarinet(SF2Soundbank sf2) { | 
 | 
        int x = 8;  | 
 | 
        int fftsize = 4096 * x;  | 
 | 
        double[] data = new double[fftsize * 2];  | 
 | 
        double base = x * 15;  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 0.001, 0.5);  | 
 | 
        complexGaussianDist(data, base * 2, 0.001, 0.02);  | 
 | 
        complexGaussianDist(data, base * 3, 0.001, 0.2);  | 
 | 
        complexGaussianDist(data, base * 4, 0.01, 0.1);  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 4, 100, 60);  | 
 | 
        complexGaussianDist(data, base * 6, 100, 20);  | 
 | 
        complexGaussianDist(data, base * 8, 100, 20);  | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 5, 0.001, 0.1);  | 
 | 
        complexGaussianDist(data, base * 6, 0.001, 0.09);  | 
 | 
        complexGaussianDist(data, base * 7, 0.001, 0.02);  | 
 | 
        complexGaussianDist(data, base * 8, 0.005, 0.16);  | 
 | 
        complexGaussianDist(data, base * 9, 0.005, 0.96);  | 
 | 
        complexGaussianDist(data, base * 10, 0.01, 0.9);  | 
 | 
        complexGaussianDist(data, base * 11, 0.08, 1.2);  | 
 | 
        complexGaussianDist(data, base * 12, 0.08, 1.8);  | 
 | 
        complexGaussianDist(data, base * 13, 0.08, 1.6);  | 
 | 
        complexGaussianDist(data, base * 14, 0.08, 1.2);  | 
 | 
        complexGaussianDist(data, base * 15, 0.08, 0.9);  | 
 | 
        complexGaussianDist(data, base * 16, 0.08, 0.5);  | 
 | 
        complexGaussianDist(data, base * 17, 0.08, 0.2);  | 
 | 
 | 
 | 
 | 
 | 
        complexGaussianDist(data, base * 1, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 2, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 3, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 4, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 5, 10, 8);  | 
 | 
        complexGaussianDist(data, base * 6, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 7, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 8, 20, 9);  | 
 | 
        complexGaussianDist(data, base * 9, 20, 8);  | 
 | 
        complexGaussianDist(data, base * 10, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 11, 30, 9);  | 
 | 
        complexGaussianDist(data, base * 12, 30, 9);  | 
 | 
        complexGaussianDist(data, base * 13, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 14, 30, 8);  | 
 | 
        complexGaussianDist(data, base * 15, 30, 7);  | 
 | 
        complexGaussianDist(data, base * 16, 30, 7);  | 
 | 
        complexGaussianDist(data, base * 17, 30, 6);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Clarinet", data, base);  | 
 | 
        SF2Layer layer = newLayer(sf2, "Clarinet", sample);  | 
 | 
        SF2Region region = layer.getRegions().get(0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);  | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_timpani(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 8;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            double base = 48;  | 
 | 
            complexGaussianDist(data, base * 2, 0.2, 1);  | 
 | 
            complexGaussianDist(data, base * 3, 0.2, 0.7);  | 
 | 
            complexGaussianDist(data, base * 5, 10, 1);  | 
 | 
            complexGaussianDist(data, base * 6, 9, 1);  | 
 | 
            complexGaussianDist(data, base * 8, 15, 1);  | 
 | 
            complexGaussianDist(data, base * 9, 18, 0.8);  | 
 | 
            complexGaussianDist(data, base * 11, 21, 0.5);  | 
 | 
            complexGaussianDist(data, base * 13, 28, 0.3);  | 
 | 
            complexGaussianDist(data, base * 14, 22, 0.1);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.5);  | 
 | 
            data = realPart(data);  | 
 | 
 | 
 | 
            double d_len = data.length;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                double g = (1.0 - (i / d_len));  | 
 | 
                data[i] *= g * g;  | 
 | 
            }  | 
 | 
            fadeUp(data, 40);  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2) { | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            }  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 300; i++) { | 
 | 
                double g = (1.0 - (i / 300.0));  | 
 | 
                data[i] *= 1.0 + 20 * g * g;  | 
 | 
            }  | 
 | 
            for (int i = 0; i < 24; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9998;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < datah.length; i++)  | 
 | 
            datab[i] += datah[i] * 0.02;  | 
 | 
 | 
 | 
        normalize(datab, 0.9);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Timpani", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Timpani"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_melodic_toms(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            complexGaussianDist(data, 30, 0.5, 1);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.8);  | 
 | 
            data = realPart(data);  | 
 | 
 | 
 | 
            double d_len = data.length;  | 
 | 
            for (int i = 0; i < data.length; i++)  | 
 | 
                data[i] *= (1.0 - (i / d_len));  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 200; i++) { | 
 | 
                double g = (1.0 - (i / 200.0));  | 
 | 
                data[i] *= 1.0 + 20 * g * g;  | 
 | 
            }  | 
 | 
            for (int i = 0; i < 30; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9996;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < datah.length; i++)  | 
 | 
            datab[i] += datah[i] * 0.5;  | 
 | 
        for (int i = 0; i < 5; i++)  | 
 | 
            datab[i] *= i / 5.0;  | 
 | 
 | 
 | 
        normalize(datab, 0.99);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Melodic Toms", datab);  | 
 | 
        sample.setOriginalPitch(63);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Melodic Toms"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
          | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_reverse_cymbal(SF2Soundbank sf2) { | 
 | 
        double datah[];  | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5));  | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 100; i++)  | 
 | 
                data[i] = 0;  | 
 | 
 | 
 | 
            for (int i = 0; i < 512 * 2; i++) { | 
 | 
                double gain = (i / (512.0 * 2.0));  | 
 | 
                data[i] = 1 - gain;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Reverse Cymbal",  | 
 | 
                datah, 100, 20);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Reverse Cymbal"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -200);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_snare_drum(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            complexGaussianDist(data, 24, 0.5, 1);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.5);  | 
 | 
            data = realPart(data);  | 
 | 
 | 
 | 
            double d_len = data.length;  | 
 | 
            for (int i = 0; i < data.length; i++)  | 
 | 
                data[i] *= (1.0 - (i / d_len));  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 300; i++) { | 
 | 
                double g = (1.0 - (i / 300.0));  | 
 | 
                data[i] *= 1.0 + 20 * g * g;  | 
 | 
            }  | 
 | 
            for (int i = 0; i < 24; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9998;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < datah.length; i++)  | 
 | 
            datab[i] += datah[i];  | 
 | 
        for (int i = 0; i < 5; i++)  | 
 | 
            datab[i] *= i / 5.0;  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Snare Drum", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Snare Drum"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_bass_drum(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            complexGaussianDist(data, 1.8 * 5 + 1, 2, 1);  | 
 | 
            complexGaussianDist(data, 1.8 * 9 + 1, 2, 1);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double d_len = data.length;  | 
 | 
            for (int i = 0; i < data.length; i++)  | 
 | 
                data[i] *= (1.0 - (i / d_len));  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024; i < 2048; i++)  | 
 | 
                data[i] = 1.0 - (i - 1024) / 1024.0;  | 
 | 
            for (int i = 0; i < 512; i++)  | 
 | 
                data[i] = 10 * i / 512.0;  | 
 | 
            for (int i = 0; i < 10; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.999;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < datah.length; i++)  | 
 | 
            datab[i] += datah[i] * 0.5;  | 
 | 
        for (int i = 0; i < 5; i++)  | 
 | 
            datab[i] *= i / 5.0;  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Bass Drum", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Bass Drum"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_tom(SF2Soundbank sf2) { | 
 | 
 | 
 | 
        double datab[];  | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            complexGaussianDist(data, 30, 0.5, 1);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.8);  | 
 | 
            data = realPart(data);  | 
 | 
 | 
 | 
            double d_len = data.length;  | 
 | 
            for (int i = 0; i < data.length; i++)  | 
 | 
                data[i] *= (1.0 - (i / d_len));  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 200; i++) { | 
 | 
                double g = (1.0 - (i / 200.0));  | 
 | 
                data[i] *= 1.0 + 20 * g * g;  | 
 | 
            }  | 
 | 
            for (int i = 0; i < 30; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9996;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < datah.length; i++)  | 
 | 
            datab[i] += datah[i] * 0.5;  | 
 | 
        for (int i = 0; i < 5; i++)  | 
 | 
            datab[i] *= i / 5.0;  | 
 | 
 | 
 | 
        normalize(datab, 0.99);  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Tom", datab);  | 
 | 
        sample.setOriginalPitch(50);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Tom"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
          | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_closed_hihat(SF2Soundbank sf2) { | 
 | 
        double datah[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 2048; i++)  | 
 | 
                data[i] = 0.2 + 0.8 * (i / 2048.0);  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9996;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < 5; i++)  | 
 | 
            datah[i] *= i / 5.0;  | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Closed Hi-Hat", datah);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Closed Hi-Hat"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_open_hihat(SF2Soundbank sf2) { | 
 | 
        double datah[];  | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5));  | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 200; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 2048 * 4; i++) { | 
 | 
                double gain = (i / (2048.0 * 4.0));  | 
 | 
                data[i] = gain;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Open Hi-Hat", datah, 1000, 5);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Open Hi-Hat"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1500);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_crash_cymbal(SF2Soundbank sf2) { | 
 | 
        double datah[];  | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5));  | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 100; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 0; i < 512 * 2; i++) { | 
 | 
                double gain = (i / (512.0 * 2.0));  | 
 | 
                data[i] = gain;  | 
 | 
            }  | 
 | 
            datah = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleFFTSample(sf2, "Crash Cymbal", datah, 1000, 5);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Crash Cymbal"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1800);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1800);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer new_side_stick(SF2Soundbank sf2) { | 
 | 
        double datab[];  | 
 | 
 | 
 | 
          | 
 | 
        { | 
 | 
            int fftlen = 4096 * 4;  | 
 | 
            double[] data = new double[2 * fftlen];  | 
 | 
            Random random = new Random(3049912);  | 
 | 
            for (int i = 0; i < data.length; i += 2)  | 
 | 
                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;  | 
 | 
            fft(data);  | 
 | 
              | 
 | 
            for (int i = fftlen / 2; i < data.length; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            for (int i = 1024 * 4; i < 2048 * 4; i++)  | 
 | 
                data[i] = 1.0 - (i - 4096) / 4096.0;  | 
 | 
            for (int i = 0; i < 200; i++) { | 
 | 
                double g = (1.0 - (i / 200.0));  | 
 | 
                data[i] *= 1.0 + 20 * g * g;  | 
 | 
            }  | 
 | 
            for (int i = 0; i < 30; i++)  | 
 | 
                data[i] = 0;  | 
 | 
            randomPhase(data, new Random(3049912));  | 
 | 
            ifft(data);  | 
 | 
            normalize(data, 0.9);  | 
 | 
            data = realPart(data);  | 
 | 
            double gain = 1.0;  | 
 | 
            for (int i = 0; i < data.length; i++) { | 
 | 
                data[i] *= gain;  | 
 | 
                gain *= 0.9996;  | 
 | 
            }  | 
 | 
            datab = data;  | 
 | 
        }  | 
 | 
 | 
 | 
        for (int i = 0; i < 10; i++)  | 
 | 
            datab[i] *= i / 10.0;  | 
 | 
 | 
 | 
        SF2Sample sample = newSimpleDrumSample(sf2, "Side Stick", datab);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName("Side Stick"); | 
 | 
 | 
 | 
        SF2GlobalRegion global = new SF2GlobalRegion();  | 
 | 
        layer.setGlobalZone(global);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);  | 
 | 
        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -50);  | 
 | 
        region.setSample(sample);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,  | 
 | 
            double[] data, double base) { | 
 | 
        return newSimpleFFTSample(sf2, name, data, base, 10);  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,  | 
 | 
            double[] data, double base, int fadeuptime) { | 
 | 
 | 
 | 
        int fftsize = data.length / 2;  | 
 | 
        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);  | 
 | 
        double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;  | 
 | 
 | 
 | 
        randomPhase(data);  | 
 | 
        ifft(data);  | 
 | 
        data = realPart(data);  | 
 | 
        normalize(data, 0.9);  | 
 | 
        float[] fdata = toFloat(data);  | 
 | 
        fdata = loopExtend(fdata, fdata.length + 512);  | 
 | 
        fadeUp(fdata, fadeuptime);  | 
 | 
        byte[] bdata = toBytes(fdata, format);  | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
         */  | 
 | 
        SF2Sample sample = new SF2Sample(sf2);  | 
 | 
        sample.setName(name);  | 
 | 
        sample.setData(bdata);  | 
 | 
        sample.setStartLoop(256);  | 
 | 
        sample.setEndLoop(fftsize + 256);  | 
 | 
        sample.setSampleRate((long) format.getSampleRate());  | 
 | 
        double orgnote = (69 + 12)  | 
 | 
                + (12 * Math.log(basefreq / 440.0) / Math.log(2));  | 
 | 
        sample.setOriginalPitch((int) orgnote);  | 
 | 
        sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));  | 
 | 
        sf2.addResource(sample);  | 
 | 
 | 
 | 
        return sample;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Sample newSimpleFFTSample_dist(SF2Soundbank sf2,  | 
 | 
            String name, double[] data, double base, double preamp) { | 
 | 
 | 
 | 
        int fftsize = data.length / 2;  | 
 | 
        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);  | 
 | 
        double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;  | 
 | 
 | 
 | 
        randomPhase(data);  | 
 | 
        ifft(data);  | 
 | 
        data = realPart(data);  | 
 | 
 | 
 | 
        for (int i = 0; i < data.length; i++) { | 
 | 
            data[i] = (1 - Math.exp(-Math.abs(data[i] * preamp)))  | 
 | 
                    * Math.signum(data[i]);  | 
 | 
        }  | 
 | 
 | 
 | 
        normalize(data, 0.9);  | 
 | 
        float[] fdata = toFloat(data);  | 
 | 
        fdata = loopExtend(fdata, fdata.length + 512);  | 
 | 
        fadeUp(fdata, 80);  | 
 | 
        byte[] bdata = toBytes(fdata, format);  | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
         */  | 
 | 
        SF2Sample sample = new SF2Sample(sf2);  | 
 | 
        sample.setName(name);  | 
 | 
        sample.setData(bdata);  | 
 | 
        sample.setStartLoop(256);  | 
 | 
        sample.setEndLoop(fftsize + 256);  | 
 | 
        sample.setSampleRate((long) format.getSampleRate());  | 
 | 
        double orgnote = (69 + 12)  | 
 | 
                + (12 * Math.log(basefreq / 440.0) / Math.log(2));  | 
 | 
        sample.setOriginalPitch((int) orgnote);  | 
 | 
        sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));  | 
 | 
        sf2.addResource(sample);  | 
 | 
 | 
 | 
        return sample;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Sample newSimpleDrumSample(SF2Soundbank sf2, String name,  | 
 | 
            double[] data) { | 
 | 
 | 
 | 
        int fftsize = data.length;  | 
 | 
        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);  | 
 | 
 | 
 | 
        byte[] bdata = toBytes(toFloat(realPart(data)), format);  | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
         */  | 
 | 
        SF2Sample sample = new SF2Sample(sf2);  | 
 | 
        sample.setName(name);  | 
 | 
        sample.setData(bdata);  | 
 | 
        sample.setStartLoop(256);  | 
 | 
        sample.setEndLoop(fftsize + 256);  | 
 | 
        sample.setSampleRate((long) format.getSampleRate());  | 
 | 
        sample.setOriginalPitch(60);  | 
 | 
        sf2.addResource(sample);  | 
 | 
 | 
 | 
        return sample;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Layer newLayer(SF2Soundbank sf2, String name, SF2Sample sample) { | 
 | 
        SF2LayerRegion region = new SF2LayerRegion();  | 
 | 
        region.setSample(sample);  | 
 | 
 | 
 | 
        SF2Layer layer = new SF2Layer(sf2);  | 
 | 
        layer.setName(name);  | 
 | 
        layer.getRegions().add(region);  | 
 | 
        sf2.addResource(layer);  | 
 | 
 | 
 | 
        return layer;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static SF2Instrument newInstrument(SF2Soundbank sf2, String name,  | 
 | 
            Patch patch, SF2Layer... layers) { | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
         */  | 
 | 
        SF2Instrument ins = new SF2Instrument(sf2);  | 
 | 
        ins.setPatch(patch);  | 
 | 
        ins.setName(name);  | 
 | 
        sf2.addInstrument(ins);  | 
 | 
 | 
 | 
          | 
 | 
 | 
 | 
         */  | 
 | 
        for (int i = 0; i < layers.length; i++) { | 
 | 
            SF2InstrumentRegion insregion = new SF2InstrumentRegion();  | 
 | 
            insregion.setLayer(layers[i]);  | 
 | 
            ins.getRegions().add(insregion);  | 
 | 
        }  | 
 | 
 | 
 | 
        return ins;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void ifft(double[] data) { | 
 | 
        new FFT(data.length / 2, 1).transform(data);  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void fft(double[] data) { | 
 | 
        new FFT(data.length / 2, -1).transform(data);  | 
 | 
    }  | 
 | 
 | 
 | 
    public static void complexGaussianDist(double[] cdata, double m,  | 
 | 
            double s, double v) { | 
 | 
        for (int x = 0; x < cdata.length / 4; x++) { | 
 | 
            cdata[x * 2] += v * (1.0 / (s * Math.sqrt(2 * Math.PI))  | 
 | 
                    * Math.exp((-1.0 / 2.0) * Math.pow((x - m) / s, 2.0)));  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void randomPhase(double[] data) { | 
 | 
        for (int i = 0; i < data.length; i += 2) { | 
 | 
            double phase = Math.random() * 2 * Math.PI;  | 
 | 
            double d = data[i];  | 
 | 
            data[i] = Math.sin(phase) * d;  | 
 | 
            data[i + 1] = Math.cos(phase) * d;  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void randomPhase(double[] data, Random random) { | 
 | 
        for (int i = 0; i < data.length; i += 2) { | 
 | 
            double phase = random.nextDouble() * 2 * Math.PI;  | 
 | 
            double d = data[i];  | 
 | 
            data[i] = Math.sin(phase) * d;  | 
 | 
            data[i + 1] = Math.cos(phase) * d;  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void normalize(double[] data, double target) { | 
 | 
        double maxvalue = 0;  | 
 | 
        for (int i = 0; i < data.length; i++) { | 
 | 
            if (data[i] > maxvalue)  | 
 | 
                maxvalue = data[i];  | 
 | 
            if (-data[i] > maxvalue)  | 
 | 
                maxvalue = -data[i];  | 
 | 
        }  | 
 | 
        if (maxvalue == 0)  | 
 | 
            return;  | 
 | 
        double gain = target / maxvalue;  | 
 | 
        for (int i = 0; i < data.length; i++)  | 
 | 
            data[i] *= gain;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void normalize(float[] data, double target) { | 
 | 
        double maxvalue = 0.5;  | 
 | 
        for (int i = 0; i < data.length; i++) { | 
 | 
            if (data[i * 2] > maxvalue)  | 
 | 
                maxvalue = data[i * 2];  | 
 | 
            if (-data[i * 2] > maxvalue)  | 
 | 
                maxvalue = -data[i * 2];  | 
 | 
        }  | 
 | 
        double gain = target / maxvalue;  | 
 | 
        for (int i = 0; i < data.length; i++)  | 
 | 
            data[i * 2] *= gain;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public double[] realPart(double[] in) { | 
 | 
        double[] out = new double[in.length / 2];  | 
 | 
        for (int i = 0; i < out.length; i++) { | 
 | 
            out[i] = in[i * 2];  | 
 | 
        }  | 
 | 
        return out;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public double[] imgPart(double[] in) { | 
 | 
        double[] out = new double[in.length / 2];  | 
 | 
        for (int i = 0; i < out.length; i++) { | 
 | 
            out[i] = in[i * 2];  | 
 | 
        }  | 
 | 
        return out;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public float[] toFloat(double[] in) { | 
 | 
        float[] out = new float[in.length];  | 
 | 
        for (int i = 0; i < out.length; i++) { | 
 | 
            out[i] = (float) in[i];  | 
 | 
        }  | 
 | 
        return out;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public byte[] toBytes(float[] in, AudioFormat format) { | 
 | 
        byte[] out = new byte[in.length * format.getFrameSize()];  | 
 | 
        return AudioFloatConverter.getConverter(format).toByteArray(in, out);  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void fadeUp(double[] data, int samples) { | 
 | 
        double dsamples = samples;  | 
 | 
        for (int i = 0; i < samples; i++)  | 
 | 
            data[i] *= i / dsamples;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public void fadeUp(float[] data, int samples) { | 
 | 
        double dsamples = samples;  | 
 | 
        for (int i = 0; i < samples; i++)  | 
 | 
            data[i] *= i / dsamples;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public double[] loopExtend(double[] data, int newsize) { | 
 | 
        double[] outdata = new double[newsize];  | 
 | 
        int p_len = data.length;  | 
 | 
        int p_ps = 0;  | 
 | 
        for (int i = 0; i < outdata.length; i++) { | 
 | 
            outdata[i] = data[p_ps];  | 
 | 
            p_ps++;  | 
 | 
            if (p_ps == p_len)  | 
 | 
                p_ps = 0;  | 
 | 
        }  | 
 | 
        return outdata;  | 
 | 
    }  | 
 | 
 | 
 | 
    static public float[] loopExtend(float[] data, int newsize) { | 
 | 
        float[] outdata = new float[newsize];  | 
 | 
        int p_len = data.length;  | 
 | 
        int p_ps = 0;  | 
 | 
        for (int i = 0; i < outdata.length; i++) { | 
 | 
            outdata[i] = data[p_ps];  | 
 | 
            p_ps++;  | 
 | 
            if (p_ps == p_len)  | 
 | 
                p_ps = 0;  | 
 | 
        }  | 
 | 
        return outdata;  | 
 | 
    }  | 
 | 
}  |