public 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; }
public static SF2Soundbank createTestSoundbank() { // Create impulse instrument // used to measure timing of note-on playback SF2Soundbank soundbank = new SF2Soundbank(); float[] data = new float[100]; Arrays.fill(data, 0); data[0] = 1.0f; byte[] bdata = new byte[data.length * format.getFrameSize()]; AudioFloatConverter.getConverter(format).toByteArray(data, bdata); SF2Sample sample = new SF2Sample(soundbank); sample.setName("Test Sample"); sample.setData(bdata); sample.setSampleRate((long) format.getSampleRate()); sample.setOriginalPitch(69); soundbank.addResource(sample); SF2Layer layer = new SF2Layer(soundbank); layer.setName("Test Layer"); soundbank.addResource(layer); SF2LayerRegion region = new SF2LayerRegion(); region.setSample(sample); layer.getRegions().add(region); SF2Instrument ins = new SF2Instrument(soundbank); ins.setName("Test Instrument"); soundbank.addInstrument(ins); SF2InstrumentRegion insregion = new SF2InstrumentRegion(); insregion.setLayer(layer); ins.getRegions().add(insregion); return soundbank; }
public static Soundbank createTestSoundbankWithChannelMixer() { SF2Soundbank soundbank = createTestSoundbank(); SimpleSoundbank simplesoundbank = new SimpleSoundbank(); SimpleInstrument simpleinstrument = new SimpleInstrument() { public ModelChannelMixer getChannelMixer(MidiChannel channel, AudioFormat format) { return new ModelAbstractChannelMixer() { boolean active = true; public boolean process(float[][] buffer, int offset, int len) { for (int i = 0; i < buffer.length; i++) { float[] cbuffer = buffer[i]; for (int j = 0; j < cbuffer.length; j++) { cbuffer[j] = -cbuffer[j]; } } return active; } public void stop() { active = false; } }; } }; simpleinstrument.add(soundbank.getInstruments()[0]); simplesoundbank.addInstrument(simpleinstrument); return simplesoundbank; }
public Soundbank getSoundbank(URL url) throws InvalidMidiDataException, IOException { try { return new SF2Soundbank(url); } catch (RIFFInvalidFormatException e) { return null; } }
public Soundbank getSoundbank(InputStream stream) throws InvalidMidiDataException, IOException { try { stream.mark(512); return new SF2Soundbank(stream); } catch (RIFFInvalidFormatException e) { stream.reset(); return null; } }
public Soundbank getSoundbank(File file) throws InvalidMidiDataException, IOException { try { return new SF2Soundbank(file); } catch (RIFFInvalidFormatException e) { return null; } }
private boolean loadInstruments() { try { SF2Soundbank soundbank = new SF2Soundbank(new FileInputStream( new File(getConfig().getString("SoundFont")))); synthesizer.loadAllInstruments(soundbank); } catch (IOException e) { return false; } for (javax.sound.midi.Instrument instrument : synthesizer .getLoadedInstruments()) { instruments.add(new Instrument(instrument.getPatch().getProgram(), new InstrumentInformation(instrument.getName(), ""))); } return true; }
public 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 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 void main(String[] args) throws Exception { // Create instance of the synthesizer with very low polyphony AudioSynthesizer synth = new SoftSynthesizer(); AudioFormat format = new AudioFormat(44100, 16, 2, true, false); Map<String, Object> p = new HashMap<String, Object>(); p.put("max polyphony", new Integer(5)); AudioInputStream stream = synth.openStream(format, p); // Create instrument with too many regions (more than max polyphony) SF2Soundbank sf2 = new SF2Soundbank(); SF2Sample sample = new SF2Sample(sf2); sample.setName("test sample"); sample.setData(new byte[100]); sample.setSampleRate(44100); sample.setOriginalPitch(20); sf2.addResource(sample); SF2Layer layer = new SF2Layer(sf2); layer.setName("test layer"); sf2.addResource(layer); for (int i = 0; i < 100; i++) { SF2LayerRegion region = new SF2LayerRegion(); region.setSample(sample); layer.getRegions().add(region); } SF2Instrument ins = new SF2Instrument(sf2); ins.setPatch(new Patch(0,0)); ins.setName("test instrument"); sf2.addInstrument(ins); SF2InstrumentRegion insregion = new SF2InstrumentRegion(); insregion.setLayer(layer); ins.getRegions().add(insregion); // Load the test soundbank into the synthesizer synth.unloadAllInstruments(synth.getDefaultSoundbank()); synth.loadAllInstruments(sf2); // Send out one midi on message MidiChannel ch1 = synth.getChannels()[0]; ch1.programChange(0); ch1.noteOn(64, 64); // Read 1 sec from stream stream.skip(format.getFrameSize() * ((int)(format.getFrameRate() * 2))); // Close the synthesizer after use synth.close(); }
public SF2Instrument(SF2Soundbank soundbank) { super(soundbank, null, null, null); }
public SF2Layer(SF2Soundbank soundBank) { super(soundBank, null, null); }