< prev index next >

src/java.desktop/share/classes/com/sun/media/sound/EmergencySoundbank.java

Print this page


   1 /*
   2  * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 618 
 619 
 620         SF2Layer layer = newLayer(sf2, "Distorted Guitar", sample);
 621         SF2Region region = layer.getRegions().get(0);
 622         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
 623         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
 624         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
 625         //region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
 626         //region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 200);
 627 
 628         //region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
 629         //region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
 630         //region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -1000);
 631         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
 632         //region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
 633         return layer;
 634     }
 635 
 636     public static SF2Layer new_guitar_pick(SF2Soundbank sf2) {
 637 
 638         double datab[];
 639 
 640         // Make treble part
 641         {
 642             int m = 2;
 643             int fftlen = 4096 * m;
 644             double[] data = new double[2 * fftlen];
 645             Random random = new Random(3049912);
 646             for (int i = 0; i < data.length; i += 2)
 647                 data[i] = (2.0 * (random.nextDouble() - 0.5));
 648             fft(data);
 649             // Remove all negative frequency
 650             for (int i = fftlen / 2; i < data.length; i++)
 651                 data[i] = 0;
 652             for (int i = 0; i < 2048 * m; i++) {
 653                 data[i] *= Math.exp(-Math.abs((i - 23) / ((double) m)) * 1.2)
 654                         + Math.exp(-Math.abs((i - 40) / ((double) m)) * 0.9);
 655             }
 656             randomPhase(data, new Random(3049912));
 657             ifft(data);
 658             normalize(data, 0.8);


 797             complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
 798         }
 799 
 800         SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
 801         SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
 802         SF2Region region = layer.getRegions().get(0);
 803         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
 804         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
 805         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
 806         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
 807         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
 808         region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
 809         region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
 810         region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
 811         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
 812         return layer;
 813     }
 814 
 815     public static SF2Layer new_piano_hammer(SF2Soundbank sf2) {
 816 
 817         double datab[];
 818 
 819         // Make treble part
 820         {
 821             int m = 2;
 822             int fftlen = 4096 * m;
 823             double[] data = new double[2 * fftlen];
 824             Random random = new Random(3049912);
 825             for (int i = 0; i < data.length; i += 2)
 826                 data[i] = (2.0 * (random.nextDouble() - 0.5));
 827             fft(data);
 828             // Remove all negative frequency
 829             for (int i = fftlen / 2; i < data.length; i++)
 830                 data[i] = 0;
 831             for (int i = 0; i < 2048 * m; i++)
 832                 data[i] *= Math.exp(-Math.abs((i - 37) / ((double) m)) * 0.05);
 833             randomPhase(data, new Random(3049912));
 834             ifft(data);
 835             normalize(data, 0.6);
 836             data = realPart(data);
 837             double gain = 1.0;


1786         complexGaussianDist(data, base * 14, 30, 8);
1787         complexGaussianDist(data, base * 15, 30, 7);
1788         complexGaussianDist(data, base * 16, 30, 7);
1789         complexGaussianDist(data, base * 17, 30, 6);
1790 
1791         SF2Sample sample = newSimpleFFTSample(sf2, "Clarinet", data, base);
1792         SF2Layer layer = newLayer(sf2, "Clarinet", sample);
1793         SF2Region region = layer.getRegions().get(0);
1794         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1795         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1796         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1797         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1798         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1799         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1800         return layer;
1801 
1802     }
1803 
1804     public static SF2Layer new_timpani(SF2Soundbank sf2) {
1805 
1806         double datab[];
1807         double datah[];
1808 
1809         // Make Bass Part
1810         {
1811             int fftlen = 4096 * 8;
1812             double[] data = new double[2 * fftlen];
1813             double base = 48;
1814             complexGaussianDist(data, base * 2, 0.2, 1);
1815             complexGaussianDist(data, base * 3, 0.2, 0.7);
1816             complexGaussianDist(data, base * 5, 10, 1);
1817             complexGaussianDist(data, base * 6, 9, 1);
1818             complexGaussianDist(data, base * 8, 15, 1);
1819             complexGaussianDist(data, base * 9, 18, 0.8);
1820             complexGaussianDist(data, base * 11, 21, 0.5);
1821             complexGaussianDist(data, base * 13, 28, 0.3);
1822             complexGaussianDist(data, base * 14, 22, 0.1);
1823             randomPhase(data, new Random(3049912));
1824             ifft(data);
1825             normalize(data, 0.5);
1826             data = realPart(data);
1827 


1874         SF2Sample sample = newSimpleDrumSample(sf2, "Timpani", datab);
1875 
1876         SF2Layer layer = new SF2Layer(sf2);
1877         layer.setName("Timpani");
1878 
1879         SF2GlobalRegion global = new SF2GlobalRegion();
1880         layer.setGlobalZone(global);
1881         sf2.addResource(layer);
1882 
1883         SF2LayerRegion region = new SF2LayerRegion();
1884         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1885         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1886         region.setSample(sample);
1887         layer.getRegions().add(region);
1888 
1889         return layer;
1890     }
1891 
1892     public static SF2Layer new_melodic_toms(SF2Soundbank sf2) {
1893 
1894         double datab[];
1895         double datah[];
1896 
1897         // Make Bass Part
1898         {
1899             int fftlen = 4096 * 4;
1900             double[] data = new double[2 * fftlen];
1901             complexGaussianDist(data, 30, 0.5, 1);
1902             randomPhase(data, new Random(3049912));
1903             ifft(data);
1904             normalize(data, 0.8);
1905             data = realPart(data);
1906 
1907             double d_len = data.length;
1908             for (int i = 0; i < data.length; i++)
1909                 data[i] *= (1.0 - (i / d_len));
1910             datab = data;
1911         }
1912 
1913         // Make treble part
1914         {
1915             int fftlen = 4096 * 4;


1952         sample.setOriginalPitch(63);
1953 
1954         SF2Layer layer = new SF2Layer(sf2);
1955         layer.setName("Melodic Toms");
1956 
1957         SF2GlobalRegion global = new SF2GlobalRegion();
1958         layer.setGlobalZone(global);
1959         sf2.addResource(layer);
1960 
1961         SF2LayerRegion region = new SF2LayerRegion();
1962         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1963         //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
1964         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1965         region.setSample(sample);
1966         layer.getRegions().add(region);
1967 
1968         return layer;
1969     }
1970 
1971     public static SF2Layer new_reverse_cymbal(SF2Soundbank sf2) {
1972         double datah[];
1973         {
1974             int fftlen = 4096 * 4;
1975             double[] data = new double[2 * fftlen];
1976             Random random = new Random(3049912);
1977             for (int i = 0; i < data.length; i += 2)
1978                 data[i] = (2.0 * (random.nextDouble() - 0.5));
1979             for (int i = fftlen / 2; i < data.length; i++)
1980                 data[i] = 0;
1981             for (int i = 0; i < 100; i++)
1982                 data[i] = 0;
1983 
1984             for (int i = 0; i < 512 * 2; i++) {
1985                 double gain = (i / (512.0 * 2.0));
1986                 data[i] = 1 - gain;
1987             }
1988             datah = data;
1989         }
1990 
1991         SF2Sample sample = newSimpleFFTSample(sf2, "Reverse Cymbal",
1992                 datah, 100, 20);


1995         layer.setName("Reverse Cymbal");
1996 
1997         SF2GlobalRegion global = new SF2GlobalRegion();
1998         layer.setGlobalZone(global);
1999         sf2.addResource(layer);
2000 
2001         SF2LayerRegion region = new SF2LayerRegion();
2002         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -200);
2003         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -12000);
2004         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2005         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
2006         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2007         region.setSample(sample);
2008         layer.getRegions().add(region);
2009 
2010         return layer;
2011     }
2012 
2013     public static SF2Layer new_snare_drum(SF2Soundbank sf2) {
2014 
2015         double datab[];
2016         double datah[];
2017 
2018         // Make Bass Part
2019         {
2020             int fftlen = 4096 * 4;
2021             double[] data = new double[2 * fftlen];
2022             complexGaussianDist(data, 24, 0.5, 1);
2023             randomPhase(data, new Random(3049912));
2024             ifft(data);
2025             normalize(data, 0.5);
2026             data = realPart(data);
2027 
2028             double d_len = data.length;
2029             for (int i = 0; i < data.length; i++)
2030                 data[i] *= (1.0 - (i / d_len));
2031             datab = data;
2032         }
2033 
2034         // Make treble part
2035         {
2036             int fftlen = 4096 * 4;


2071 
2072         SF2Layer layer = new SF2Layer(sf2);
2073         layer.setName("Snare Drum");
2074 
2075         SF2GlobalRegion global = new SF2GlobalRegion();
2076         layer.setGlobalZone(global);
2077         sf2.addResource(layer);
2078 
2079         SF2LayerRegion region = new SF2LayerRegion();
2080         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2081         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2082         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2083         region.setSample(sample);
2084         layer.getRegions().add(region);
2085 
2086         return layer;
2087     }
2088 
2089     public static SF2Layer new_bass_drum(SF2Soundbank sf2) {
2090 
2091         double datab[];
2092         double datah[];
2093 
2094         // Make Bass Part
2095         {
2096             int fftlen = 4096 * 4;
2097             double[] data = new double[2 * fftlen];
2098             complexGaussianDist(data, 1.8 * 5 + 1, 2, 1);
2099             complexGaussianDist(data, 1.8 * 9 + 1, 2, 1);
2100             randomPhase(data, new Random(3049912));
2101             ifft(data);
2102             normalize(data, 0.9);
2103             data = realPart(data);
2104             double d_len = data.length;
2105             for (int i = 0; i < data.length; i++)
2106                 data[i] *= (1.0 - (i / d_len));
2107             datab = data;
2108         }
2109 
2110         // Make treble part
2111         {
2112             int fftlen = 4096;


2145 
2146         SF2Layer layer = new SF2Layer(sf2);
2147         layer.setName("Bass Drum");
2148 
2149         SF2GlobalRegion global = new SF2GlobalRegion();
2150         layer.setGlobalZone(global);
2151         sf2.addResource(layer);
2152 
2153         SF2LayerRegion region = new SF2LayerRegion();
2154         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2155         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2156         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2157         region.setSample(sample);
2158         layer.getRegions().add(region);
2159 
2160         return layer;
2161     }
2162 
2163     public static SF2Layer new_tom(SF2Soundbank sf2) {
2164 
2165         double datab[];
2166         double datah[];
2167 
2168         // Make Bass Part
2169         {
2170             int fftlen = 4096 * 4;
2171             double[] data = new double[2 * fftlen];
2172             complexGaussianDist(data, 30, 0.5, 1);
2173             randomPhase(data, new Random(3049912));
2174             ifft(data);
2175             normalize(data, 0.8);
2176             data = realPart(data);
2177 
2178             double d_len = data.length;
2179             for (int i = 0; i < data.length; i++)
2180                 data[i] *= (1.0 - (i / d_len));
2181             datab = data;
2182         }
2183 
2184         // Make treble part
2185         {
2186             int fftlen = 4096 * 4;


2223         sample.setOriginalPitch(50);
2224 
2225         SF2Layer layer = new SF2Layer(sf2);
2226         layer.setName("Tom");
2227 
2228         SF2GlobalRegion global = new SF2GlobalRegion();
2229         layer.setGlobalZone(global);
2230         sf2.addResource(layer);
2231 
2232         SF2LayerRegion region = new SF2LayerRegion();
2233         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2234         //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2235         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2236         region.setSample(sample);
2237         layer.getRegions().add(region);
2238 
2239         return layer;
2240     }
2241 
2242     public static SF2Layer new_closed_hihat(SF2Soundbank sf2) {
2243         double datah[];
2244 
2245         // Make treble part
2246         {
2247             int fftlen = 4096 * 4;
2248             double[] data = new double[2 * fftlen];
2249             Random random = new Random(3049912);
2250             for (int i = 0; i < data.length; i += 2)
2251                 data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2252             fft(data);
2253             // Remove all negative frequency
2254             for (int i = fftlen / 2; i < data.length; i++)
2255                 data[i] = 0;
2256             for (int i = 1024 * 4; i < 2048 * 4; i++)
2257                 data[i] = 1.0 - (i - 4096) / 4096.0;
2258             for (int i = 0; i < 2048; i++)
2259                 data[i] = 0.2 + 0.8 * (i / 2048.0);
2260             randomPhase(data, new Random(3049912));
2261             ifft(data);
2262             normalize(data, 0.9);
2263             data = realPart(data);


2274         SF2Sample sample = newSimpleDrumSample(sf2, "Closed Hi-Hat", datah);
2275 
2276         SF2Layer layer = new SF2Layer(sf2);
2277         layer.setName("Closed Hi-Hat");
2278 
2279         SF2GlobalRegion global = new SF2GlobalRegion();
2280         layer.setGlobalZone(global);
2281         sf2.addResource(layer);
2282 
2283         SF2LayerRegion region = new SF2LayerRegion();
2284         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2285         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2286         region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2287         region.setSample(sample);
2288         layer.getRegions().add(region);
2289 
2290         return layer;
2291     }
2292 
2293     public static SF2Layer new_open_hihat(SF2Soundbank sf2) {
2294         double datah[];
2295         {
2296             int fftlen = 4096 * 4;
2297             double[] data = new double[2 * fftlen];
2298             Random random = new Random(3049912);
2299             for (int i = 0; i < data.length; i += 2)
2300                 data[i] = (2.0 * (random.nextDouble() - 0.5));
2301             for (int i = fftlen / 2; i < data.length; i++)
2302                 data[i] = 0;
2303             for (int i = 0; i < 200; i++)
2304                 data[i] = 0;
2305             for (int i = 0; i < 2048 * 4; i++) {
2306                 double gain = (i / (2048.0 * 4.0));
2307                 data[i] = gain;
2308             }
2309             datah = data;
2310         }
2311 
2312         SF2Sample sample = newSimpleFFTSample(sf2, "Open Hi-Hat", datah, 1000, 5);
2313 
2314         SF2Layer layer = new SF2Layer(sf2);
2315         layer.setName("Open Hi-Hat");
2316 
2317         SF2GlobalRegion global = new SF2GlobalRegion();
2318         layer.setGlobalZone(global);
2319         sf2.addResource(layer);
2320 
2321         SF2LayerRegion region = new SF2LayerRegion();
2322         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1500);
2323         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2324         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1500);
2325         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2326         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2327         region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2328         region.setSample(sample);
2329         layer.getRegions().add(region);
2330 
2331         return layer;
2332     }
2333 
2334     public static SF2Layer new_crash_cymbal(SF2Soundbank sf2) {
2335         double datah[];
2336         {
2337             int fftlen = 4096 * 4;
2338             double[] data = new double[2 * fftlen];
2339             Random random = new Random(3049912);
2340             for (int i = 0; i < data.length; i += 2)
2341                 data[i] = (2.0 * (random.nextDouble() - 0.5));
2342             for (int i = fftlen / 2; i < data.length; i++)
2343                 data[i] = 0;
2344             for (int i = 0; i < 100; i++)
2345                 data[i] = 0;
2346             for (int i = 0; i < 512 * 2; i++) {
2347                 double gain = (i / (512.0 * 2.0));
2348                 data[i] = gain;
2349             }
2350             datah = data;
2351         }
2352 
2353         SF2Sample sample = newSimpleFFTSample(sf2, "Crash Cymbal", datah, 1000, 5);
2354 
2355         SF2Layer layer = new SF2Layer(sf2);
2356         layer.setName("Crash Cymbal");
2357 
2358         SF2GlobalRegion global = new SF2GlobalRegion();
2359         layer.setGlobalZone(global);
2360         sf2.addResource(layer);
2361 
2362         SF2LayerRegion region = new SF2LayerRegion();
2363         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1800);
2364         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2365         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1800);
2366         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2367         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2368         region.setSample(sample);
2369         layer.getRegions().add(region);
2370 
2371         return layer;
2372     }
2373 
2374     public static SF2Layer new_side_stick(SF2Soundbank sf2) {
2375         double datab[];
2376 
2377         // Make treble part
2378         {
2379             int fftlen = 4096 * 4;
2380             double[] data = new double[2 * fftlen];
2381             Random random = new Random(3049912);
2382             for (int i = 0; i < data.length; i += 2)
2383                 data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2384             fft(data);
2385             // Remove all negative frequency
2386             for (int i = fftlen / 2; i < data.length; i++)
2387                 data[i] = 0;
2388             for (int i = 1024 * 4; i < 2048 * 4; i++)
2389                 data[i] = 1.0 - (i - 4096) / 4096.0;
2390             for (int i = 0; i < 200; i++) {
2391                 double g = (1.0 - (i / 200.0));
2392                 data[i] *= 1.0 + 20 * g * g;
2393             }
2394             for (int i = 0; i < 30; i++)
2395                 data[i] = 0;


   1 /*
   2  * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 618 
 619 
 620         SF2Layer layer = newLayer(sf2, "Distorted Guitar", sample);
 621         SF2Region region = layer.getRegions().get(0);
 622         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
 623         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
 624         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
 625         //region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
 626         //region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 200);
 627 
 628         //region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
 629         //region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
 630         //region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -1000);
 631         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
 632         //region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
 633         return layer;
 634     }
 635 
 636     public static SF2Layer new_guitar_pick(SF2Soundbank sf2) {
 637 
 638         double[] datab;
 639 
 640         // Make treble part
 641         {
 642             int m = 2;
 643             int fftlen = 4096 * m;
 644             double[] data = new double[2 * fftlen];
 645             Random random = new Random(3049912);
 646             for (int i = 0; i < data.length; i += 2)
 647                 data[i] = (2.0 * (random.nextDouble() - 0.5));
 648             fft(data);
 649             // Remove all negative frequency
 650             for (int i = fftlen / 2; i < data.length; i++)
 651                 data[i] = 0;
 652             for (int i = 0; i < 2048 * m; i++) {
 653                 data[i] *= Math.exp(-Math.abs((i - 23) / ((double) m)) * 1.2)
 654                         + Math.exp(-Math.abs((i - 40) / ((double) m)) * 0.9);
 655             }
 656             randomPhase(data, new Random(3049912));
 657             ifft(data);
 658             normalize(data, 0.8);


 797             complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
 798         }
 799 
 800         SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
 801         SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
 802         SF2Region region = layer.getRegions().get(0);
 803         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
 804         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
 805         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
 806         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
 807         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
 808         region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
 809         region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
 810         region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
 811         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
 812         return layer;
 813     }
 814 
 815     public static SF2Layer new_piano_hammer(SF2Soundbank sf2) {
 816 
 817         double[] datab;
 818 
 819         // Make treble part
 820         {
 821             int m = 2;
 822             int fftlen = 4096 * m;
 823             double[] data = new double[2 * fftlen];
 824             Random random = new Random(3049912);
 825             for (int i = 0; i < data.length; i += 2)
 826                 data[i] = (2.0 * (random.nextDouble() - 0.5));
 827             fft(data);
 828             // Remove all negative frequency
 829             for (int i = fftlen / 2; i < data.length; i++)
 830                 data[i] = 0;
 831             for (int i = 0; i < 2048 * m; i++)
 832                 data[i] *= Math.exp(-Math.abs((i - 37) / ((double) m)) * 0.05);
 833             randomPhase(data, new Random(3049912));
 834             ifft(data);
 835             normalize(data, 0.6);
 836             data = realPart(data);
 837             double gain = 1.0;


1786         complexGaussianDist(data, base * 14, 30, 8);
1787         complexGaussianDist(data, base * 15, 30, 7);
1788         complexGaussianDist(data, base * 16, 30, 7);
1789         complexGaussianDist(data, base * 17, 30, 6);
1790 
1791         SF2Sample sample = newSimpleFFTSample(sf2, "Clarinet", data, base);
1792         SF2Layer layer = newLayer(sf2, "Clarinet", sample);
1793         SF2Region region = layer.getRegions().get(0);
1794         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
1795         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
1796         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
1797         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
1798         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
1799         region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
1800         return layer;
1801 
1802     }
1803 
1804     public static SF2Layer new_timpani(SF2Soundbank sf2) {
1805 
1806         double[] datab;
1807         double[] datah;
1808 
1809         // Make Bass Part
1810         {
1811             int fftlen = 4096 * 8;
1812             double[] data = new double[2 * fftlen];
1813             double base = 48;
1814             complexGaussianDist(data, base * 2, 0.2, 1);
1815             complexGaussianDist(data, base * 3, 0.2, 0.7);
1816             complexGaussianDist(data, base * 5, 10, 1);
1817             complexGaussianDist(data, base * 6, 9, 1);
1818             complexGaussianDist(data, base * 8, 15, 1);
1819             complexGaussianDist(data, base * 9, 18, 0.8);
1820             complexGaussianDist(data, base * 11, 21, 0.5);
1821             complexGaussianDist(data, base * 13, 28, 0.3);
1822             complexGaussianDist(data, base * 14, 22, 0.1);
1823             randomPhase(data, new Random(3049912));
1824             ifft(data);
1825             normalize(data, 0.5);
1826             data = realPart(data);
1827 


1874         SF2Sample sample = newSimpleDrumSample(sf2, "Timpani", datab);
1875 
1876         SF2Layer layer = new SF2Layer(sf2);
1877         layer.setName("Timpani");
1878 
1879         SF2GlobalRegion global = new SF2GlobalRegion();
1880         layer.setGlobalZone(global);
1881         sf2.addResource(layer);
1882 
1883         SF2LayerRegion region = new SF2LayerRegion();
1884         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1885         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1886         region.setSample(sample);
1887         layer.getRegions().add(region);
1888 
1889         return layer;
1890     }
1891 
1892     public static SF2Layer new_melodic_toms(SF2Soundbank sf2) {
1893 
1894         double[] datab;
1895         double[] datah;
1896 
1897         // Make Bass Part
1898         {
1899             int fftlen = 4096 * 4;
1900             double[] data = new double[2 * fftlen];
1901             complexGaussianDist(data, 30, 0.5, 1);
1902             randomPhase(data, new Random(3049912));
1903             ifft(data);
1904             normalize(data, 0.8);
1905             data = realPart(data);
1906 
1907             double d_len = data.length;
1908             for (int i = 0; i < data.length; i++)
1909                 data[i] *= (1.0 - (i / d_len));
1910             datab = data;
1911         }
1912 
1913         // Make treble part
1914         {
1915             int fftlen = 4096 * 4;


1952         sample.setOriginalPitch(63);
1953 
1954         SF2Layer layer = new SF2Layer(sf2);
1955         layer.setName("Melodic Toms");
1956 
1957         SF2GlobalRegion global = new SF2GlobalRegion();
1958         layer.setGlobalZone(global);
1959         sf2.addResource(layer);
1960 
1961         SF2LayerRegion region = new SF2LayerRegion();
1962         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
1963         //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
1964         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
1965         region.setSample(sample);
1966         layer.getRegions().add(region);
1967 
1968         return layer;
1969     }
1970 
1971     public static SF2Layer new_reverse_cymbal(SF2Soundbank sf2) {
1972         double[] datah;
1973         {
1974             int fftlen = 4096 * 4;
1975             double[] data = new double[2 * fftlen];
1976             Random random = new Random(3049912);
1977             for (int i = 0; i < data.length; i += 2)
1978                 data[i] = (2.0 * (random.nextDouble() - 0.5));
1979             for (int i = fftlen / 2; i < data.length; i++)
1980                 data[i] = 0;
1981             for (int i = 0; i < 100; i++)
1982                 data[i] = 0;
1983 
1984             for (int i = 0; i < 512 * 2; i++) {
1985                 double gain = (i / (512.0 * 2.0));
1986                 data[i] = 1 - gain;
1987             }
1988             datah = data;
1989         }
1990 
1991         SF2Sample sample = newSimpleFFTSample(sf2, "Reverse Cymbal",
1992                 datah, 100, 20);


1995         layer.setName("Reverse Cymbal");
1996 
1997         SF2GlobalRegion global = new SF2GlobalRegion();
1998         layer.setGlobalZone(global);
1999         sf2.addResource(layer);
2000 
2001         SF2LayerRegion region = new SF2LayerRegion();
2002         region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -200);
2003         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -12000);
2004         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2005         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
2006         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2007         region.setSample(sample);
2008         layer.getRegions().add(region);
2009 
2010         return layer;
2011     }
2012 
2013     public static SF2Layer new_snare_drum(SF2Soundbank sf2) {
2014 
2015         double[] datab;
2016         double[] datah;
2017 
2018         // Make Bass Part
2019         {
2020             int fftlen = 4096 * 4;
2021             double[] data = new double[2 * fftlen];
2022             complexGaussianDist(data, 24, 0.5, 1);
2023             randomPhase(data, new Random(3049912));
2024             ifft(data);
2025             normalize(data, 0.5);
2026             data = realPart(data);
2027 
2028             double d_len = data.length;
2029             for (int i = 0; i < data.length; i++)
2030                 data[i] *= (1.0 - (i / d_len));
2031             datab = data;
2032         }
2033 
2034         // Make treble part
2035         {
2036             int fftlen = 4096 * 4;


2071 
2072         SF2Layer layer = new SF2Layer(sf2);
2073         layer.setName("Snare Drum");
2074 
2075         SF2GlobalRegion global = new SF2GlobalRegion();
2076         layer.setGlobalZone(global);
2077         sf2.addResource(layer);
2078 
2079         SF2LayerRegion region = new SF2LayerRegion();
2080         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2081         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2082         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2083         region.setSample(sample);
2084         layer.getRegions().add(region);
2085 
2086         return layer;
2087     }
2088 
2089     public static SF2Layer new_bass_drum(SF2Soundbank sf2) {
2090 
2091         double[] datab;
2092         double[] datah;
2093 
2094         // Make Bass Part
2095         {
2096             int fftlen = 4096 * 4;
2097             double[] data = new double[2 * fftlen];
2098             complexGaussianDist(data, 1.8 * 5 + 1, 2, 1);
2099             complexGaussianDist(data, 1.8 * 9 + 1, 2, 1);
2100             randomPhase(data, new Random(3049912));
2101             ifft(data);
2102             normalize(data, 0.9);
2103             data = realPart(data);
2104             double d_len = data.length;
2105             for (int i = 0; i < data.length; i++)
2106                 data[i] *= (1.0 - (i / d_len));
2107             datab = data;
2108         }
2109 
2110         // Make treble part
2111         {
2112             int fftlen = 4096;


2145 
2146         SF2Layer layer = new SF2Layer(sf2);
2147         layer.setName("Bass Drum");
2148 
2149         SF2GlobalRegion global = new SF2GlobalRegion();
2150         layer.setGlobalZone(global);
2151         sf2.addResource(layer);
2152 
2153         SF2LayerRegion region = new SF2LayerRegion();
2154         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2155         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2156         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2157         region.setSample(sample);
2158         layer.getRegions().add(region);
2159 
2160         return layer;
2161     }
2162 
2163     public static SF2Layer new_tom(SF2Soundbank sf2) {
2164 
2165         double[] datab;
2166         double[] datah;
2167 
2168         // Make Bass Part
2169         {
2170             int fftlen = 4096 * 4;
2171             double[] data = new double[2 * fftlen];
2172             complexGaussianDist(data, 30, 0.5, 1);
2173             randomPhase(data, new Random(3049912));
2174             ifft(data);
2175             normalize(data, 0.8);
2176             data = realPart(data);
2177 
2178             double d_len = data.length;
2179             for (int i = 0; i < data.length; i++)
2180                 data[i] *= (1.0 - (i / d_len));
2181             datab = data;
2182         }
2183 
2184         // Make treble part
2185         {
2186             int fftlen = 4096 * 4;


2223         sample.setOriginalPitch(50);
2224 
2225         SF2Layer layer = new SF2Layer(sf2);
2226         layer.setName("Tom");
2227 
2228         SF2GlobalRegion global = new SF2GlobalRegion();
2229         layer.setGlobalZone(global);
2230         sf2.addResource(layer);
2231 
2232         SF2LayerRegion region = new SF2LayerRegion();
2233         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2234         //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2235         region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
2236         region.setSample(sample);
2237         layer.getRegions().add(region);
2238 
2239         return layer;
2240     }
2241 
2242     public static SF2Layer new_closed_hihat(SF2Soundbank sf2) {
2243         double[] datah;
2244 
2245         // Make treble part
2246         {
2247             int fftlen = 4096 * 4;
2248             double[] data = new double[2 * fftlen];
2249             Random random = new Random(3049912);
2250             for (int i = 0; i < data.length; i += 2)
2251                 data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2252             fft(data);
2253             // Remove all negative frequency
2254             for (int i = fftlen / 2; i < data.length; i++)
2255                 data[i] = 0;
2256             for (int i = 1024 * 4; i < 2048 * 4; i++)
2257                 data[i] = 1.0 - (i - 4096) / 4096.0;
2258             for (int i = 0; i < 2048; i++)
2259                 data[i] = 0.2 + 0.8 * (i / 2048.0);
2260             randomPhase(data, new Random(3049912));
2261             ifft(data);
2262             normalize(data, 0.9);
2263             data = realPart(data);


2274         SF2Sample sample = newSimpleDrumSample(sf2, "Closed Hi-Hat", datah);
2275 
2276         SF2Layer layer = new SF2Layer(sf2);
2277         layer.setName("Closed Hi-Hat");
2278 
2279         SF2GlobalRegion global = new SF2GlobalRegion();
2280         layer.setGlobalZone(global);
2281         sf2.addResource(layer);
2282 
2283         SF2LayerRegion region = new SF2LayerRegion();
2284         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
2285         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2286         region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2287         region.setSample(sample);
2288         layer.getRegions().add(region);
2289 
2290         return layer;
2291     }
2292 
2293     public static SF2Layer new_open_hihat(SF2Soundbank sf2) {
2294         double[] datah;
2295         {
2296             int fftlen = 4096 * 4;
2297             double[] data = new double[2 * fftlen];
2298             Random random = new Random(3049912);
2299             for (int i = 0; i < data.length; i += 2)
2300                 data[i] = (2.0 * (random.nextDouble() - 0.5));
2301             for (int i = fftlen / 2; i < data.length; i++)
2302                 data[i] = 0;
2303             for (int i = 0; i < 200; i++)
2304                 data[i] = 0;
2305             for (int i = 0; i < 2048 * 4; i++) {
2306                 double gain = (i / (2048.0 * 4.0));
2307                 data[i] = gain;
2308             }
2309             datah = data;
2310         }
2311 
2312         SF2Sample sample = newSimpleFFTSample(sf2, "Open Hi-Hat", datah, 1000, 5);
2313 
2314         SF2Layer layer = new SF2Layer(sf2);
2315         layer.setName("Open Hi-Hat");
2316 
2317         SF2GlobalRegion global = new SF2GlobalRegion();
2318         layer.setGlobalZone(global);
2319         sf2.addResource(layer);
2320 
2321         SF2LayerRegion region = new SF2LayerRegion();
2322         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1500);
2323         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2324         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1500);
2325         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2326         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2327         region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
2328         region.setSample(sample);
2329         layer.getRegions().add(region);
2330 
2331         return layer;
2332     }
2333 
2334     public static SF2Layer new_crash_cymbal(SF2Soundbank sf2) {
2335         double[] datah;
2336         {
2337             int fftlen = 4096 * 4;
2338             double[] data = new double[2 * fftlen];
2339             Random random = new Random(3049912);
2340             for (int i = 0; i < data.length; i += 2)
2341                 data[i] = (2.0 * (random.nextDouble() - 0.5));
2342             for (int i = fftlen / 2; i < data.length; i++)
2343                 data[i] = 0;
2344             for (int i = 0; i < 100; i++)
2345                 data[i] = 0;
2346             for (int i = 0; i < 512 * 2; i++) {
2347                 double gain = (i / (512.0 * 2.0));
2348                 data[i] = gain;
2349             }
2350             datah = data;
2351         }
2352 
2353         SF2Sample sample = newSimpleFFTSample(sf2, "Crash Cymbal", datah, 1000, 5);
2354 
2355         SF2Layer layer = new SF2Layer(sf2);
2356         layer.setName("Crash Cymbal");
2357 
2358         SF2GlobalRegion global = new SF2GlobalRegion();
2359         layer.setGlobalZone(global);
2360         sf2.addResource(layer);
2361 
2362         SF2LayerRegion region = new SF2LayerRegion();
2363         region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1800);
2364         region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
2365         region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1800);
2366         region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
2367         region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
2368         region.setSample(sample);
2369         layer.getRegions().add(region);
2370 
2371         return layer;
2372     }
2373 
2374     public static SF2Layer new_side_stick(SF2Soundbank sf2) {
2375         double[] datab;
2376 
2377         // Make treble part
2378         {
2379             int fftlen = 4096 * 4;
2380             double[] data = new double[2 * fftlen];
2381             Random random = new Random(3049912);
2382             for (int i = 0; i < data.length; i += 2)
2383                 data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
2384             fft(data);
2385             // Remove all negative frequency
2386             for (int i = fftlen / 2; i < data.length; i++)
2387                 data[i] = 0;
2388             for (int i = 1024 * 4; i < 2048 * 4; i++)
2389                 data[i] = 1.0 - (i - 4096) / 4096.0;
2390             for (int i = 0; i < 200; i++) {
2391                 double g = (1.0 - (i / 200.0));
2392                 data[i] *= 1.0 + 20 * g * g;
2393             }
2394             for (int i = 0; i < 30; i++)
2395                 data[i] = 0;


< prev index next >