/**
   * Creates a WAV file based on the Sequence, using the default soundbank.
   *
   * @param sequence
   * @param outputFile
   * @throws MidiUnavailableException
   * @throws InvalidMidiDataException
   * @throws IOException
   */
  public void createWavFile(final Sequence sequence, final File outputFile)
      throws MidiUnavailableException, InvalidMidiDataException, IOException {
    /*
     * Open synthesizer in pull mode in the format 96000hz 24 bit stereo
     * using Sinc interpolation for highest quality. With 1024 as max
     * polyphony.
     */
    final AudioFormat format = new AudioFormat(96000, 24, 2, true, false);
    final Map<String, Object> map = new HashMap<String, Object>();
    map.put("interpolation", "sinc");
    map.put("max polyphony", "1024");
    AudioInputStream stream = synth.openStream(format, map);

    // Play Sequence into AudioSynthesizer Receiver.
    final double total = send(sequence, synth.getReceiver());

    // Calculate how long the WAVE file needs to be.
    final long len = (long) (stream.getFormat().getFrameRate() * (total + 40));
    stream = new AudioInputStream(stream, stream.getFormat(), len);

    // Write WAVE file to disk.
    AudioSystem.write(stream, AudioFileFormat.Type.WAVE, outputFile);

    this.synth.close();
  }
 public static void main(String[] args) throws Exception {
   AudioSynthesizer synth = new SoftSynthesizer();
   synth.openStream(null, null);
   Soundbank defsbk = synth.getDefaultSoundbank();
   if (defsbk != null) {
     assertTrue(defsbk.getInstruments().length == synth.getLoadedInstruments().length);
   }
   synth.close();
 }
  public static void render(OutputStream os, AudioFormat format, Map<String, Object> info)
      throws Exception {
    AudioSynthesizer synth = (AudioSynthesizer) new SoftSynthesizer();
    AudioInputStream stream = synth.openStream(format, info);
    Receiver recv = synth.getReceiver();
    Soundbank defsbk = synth.getDefaultSoundbank();
    if (defsbk != null) synth.unloadAllInstruments(defsbk);
    synth.loadAllInstruments(soundbank);

    double totalTime = 5;
    send(sequence, recv);

    long len = (long) (stream.getFormat().getFrameRate() * (totalTime + 4));
    stream = new AudioInputStream(stream, stream.getFormat(), len);

    long t = System.currentTimeMillis();
    AudioSystem.write(stream, AudioFileFormat.Type.WAVE, os);
    t = System.currentTimeMillis() - t;
    stream.close();
  }