Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
- package com.sun.media.sound;
- import java.util.Random;
- import javax.sound.midi.Patch;
- import javax.sound.sampled.AudioFormat;
- /**
- * Emergency Soundbank generator.*/
- cloneVerifierMarker_39843829489349873478202370870872077223082
- /* * Used when no other default soundbank can be found.
- *
- * @author Karl Helgason
- */
- public 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;
- // Use side_stick for missing drums:
- 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_MODENVTOFILTERFC, -1000);
- region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
- //region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
- return layer;
- }
- public static SF2Layer new_guitar_pick(SF2Soundbank sf2)
- {
- double datab[];
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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)
- {
- //Random random = new Random(302030201);
- 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[2] *= 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 detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
- 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)
- {
- //Random random = new Random(302030201);
- 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[2] *= 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 detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
- 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[];
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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)
- {
- //Random random = new Random(302030201);
- 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 detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
- 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; //*= w_step;
- }
- 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[];
- // Make Bass Part
- {
- 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;
- }
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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[];
- // Make Bass Part
- {
- 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;
- }
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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_SCALETUNING, 0);
- 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[];
- // Make Bass Part
- {
- 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;
- }
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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[];
- // Make Bass Part
- {
- 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;
- }
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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[];
- // Make Bass Part
- {
- 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;
- }
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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_SCALETUNING, 0);
- region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
- region.setSample(sample);
- layer.getRegions().add(region);
- return layer;
- }*/
- cloneVerifierMarker_39843829489349873478202370870872077223082
- /*
- public static SF2Layer new_closed_hihat(SF2Soundbank sf2)
- {
- double datah[];
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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[];
- // Make treble part
- {
- 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);
- // Remove all negative frequency
- 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);
- /*
- * Create SoundFont2 sample.
- */
- 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);
- /*
- * Create SoundFont2 sample.
- */
- 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);
- /*
- * Create SoundFont2 sample.
- */
- 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)
- {
- /*
- * Create SoundFont2 instrument.
- */
- SF2Instrument ins = new SF2Instrument(sf2);
- ins.setPatch(patch);
- ins.setName(name);
- sf2.addInstrument(ins);
- /*
- * Create region for instrument.
- */
- 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement