public List listSequencers() {
   List sequencers = new ArrayList();
   Iterator it = this.sequencerProviders.iterator();
   while (it.hasNext()) {
     try {
       MidiSequencerProvider provider = (MidiSequencerProvider) it.next();
       sequencers.addAll(provider.listSequencers());
     } catch (Throwable throwable) {
       throwable.printStackTrace();
     }
   }
   return sequencers;
 }
  public void removeSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException {
    this.sequencerProviders.remove(provider);

    MidiSequencer current = getSequencer();
    if (!(current instanceof MidiSequencerEmpty) && current != null) {
      Iterator it = provider.listSequencers().iterator();
      while (it.hasNext()) {
        MidiSequencer sequencer = (MidiSequencer) it.next();
        if (current.getKey().equals(sequencer.getKey())) {
          closeSequencer();
          break;
        }
      }
    }
  }
 public void addSequencerProvider(MidiSequencerProvider provider, boolean tryFirst)
     throws MidiPlayerException {
   this.sequencerProviders.add(provider);
   this.openSequencer(provider.listSequencers(), tryFirst);
 }