public Soundbank getSoundbank(AudioInputStream ais) throws InvalidMidiDataException, IOException {
    try {
      byte[] buffer;
      if (ais.getFrameLength() == -1) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buff = new byte[1024 - (1024 % ais.getFormat().getFrameSize())];
        int ret;
        while ((ret = ais.read(buff)) != -1) {
          baos.write(buff, 0, ret);
        }
        ais.close();
        buffer = baos.toByteArray();
      } else {
        buffer = new byte[(int) (ais.getFrameLength() * ais.getFormat().getFrameSize())];
        new DataInputStream(ais).readFully(buffer);
      }
      ModelByteBufferWavetable osc =
          new ModelByteBufferWavetable(new ModelByteBuffer(buffer), ais.getFormat(), -4800);
      ModelPerformer performer = new ModelPerformer();
      performer.getOscillators().add(osc);

      SimpleSoundbank sbk = new SimpleSoundbank();
      SimpleInstrument ins = new SimpleInstrument();
      ins.add(performer);
      sbk.addInstrument(ins);
      return sbk;
    } catch (Exception e) {
      return null;
    }
  }
  public static void main(String[] args) throws Exception {

    SimpleInstrument instrument = new SimpleInstrument();

    ModelPerformer[] performers = new ModelPerformer[2];

    performers[0] = new ModelPerformer();
    performers[0].setExclusiveClass(1);
    performers[0].setKeyFrom(36);
    performers[0].setKeyTo(48);
    performers[0].setVelFrom(16);
    performers[0].setVelTo(80);
    performers[0].setSelfNonExclusive(true);
    performers[0].setDefaultConnectionsEnabled(false);
    performers[0].getConnectionBlocks().add(new ModelConnectionBlock());
    performers[0]
        .getOscillators()
        .add(new ModelByteBufferWavetable(new ModelByteBuffer(new byte[] {1, 2, 3})));

    performers[1] = new ModelPerformer();
    performers[1].setExclusiveClass(0);
    performers[1].setKeyFrom(12);
    performers[1].setKeyTo(24);
    performers[1].setVelFrom(20);
    performers[1].setVelTo(90);
    performers[1].setSelfNonExclusive(false);
    performers[0].setDefaultConnectionsEnabled(true);
    performers[1].getConnectionBlocks().add(new ModelConnectionBlock());
    performers[1]
        .getOscillators()
        .add(new ModelByteBufferWavetable(new ModelByteBuffer(new byte[] {1, 2, 3})));

    instrument.add(performers, 18, 40, 20, 75, 12);
    ModelPerformer[] performers2 = instrument.getPerformers();
    for (int i = 0; i < performers2.length; i++) {
      assertEquals(performers[i].getConnectionBlocks(), performers2[i].getConnectionBlocks());
      assertEquals(12, performers2[i].getExclusiveClass());
      if (performers[i].getKeyFrom() < 18) assertEquals(18, performers2[i].getKeyFrom());
      else assertEquals(performers[i].getKeyFrom(), performers2[i].getKeyFrom());
      if (performers[i].getKeyTo() > 40) assertEquals(40, performers2[i].getKeyTo());
      else assertEquals(performers[i].getKeyTo(), performers2[i].getKeyTo());
      if (performers[i].getVelFrom() < 20) assertEquals(20, performers2[i].getVelFrom());
      else assertEquals(performers[i].getVelFrom(), performers2[i].getVelFrom());
      if (performers[i].getVelTo() > 75) assertEquals(75, performers2[i].getVelTo());
      else assertEquals(performers[i].getVelTo(), performers2[i].getVelTo());
      assertEquals(performers[i].getOscillators(), performers2[i].getOscillators());
      assertEquals(performers[i].isSelfNonExclusive(), performers2[i].isSelfNonExclusive());
      assertEquals(
          performers[i].isDefaultConnectionsEnabled(),
          performers2[i].isDefaultConnectionsEnabled());
    }
  }
 public Soundbank getSoundbank(File file) throws InvalidMidiDataException, IOException {
   try {
     AudioInputStream ais = AudioSystem.getAudioInputStream(file);
     ais.close();
     ModelByteBufferWavetable osc =
         new ModelByteBufferWavetable(new ModelByteBuffer(file, 0, file.length()), -4800);
     ModelPerformer performer = new ModelPerformer();
     performer.getOscillators().add(osc);
     SimpleSoundbank sbk = new SimpleSoundbank();
     SimpleInstrument ins = new SimpleInstrument();
     ins.add(performer);
     sbk.addInstrument(ins);
     return sbk;
   } catch (UnsupportedAudioFileException e1) {
     return null;
   } catch (IOException e) {
     return null;
   }
 }