2013-06-28 2 views
2

Я программирую игру в java и пытаюсь добавить музыку. Im делает именно это:Java sequencer Listener

Sequencer sequencer = MidiSystem.getSequencer(); 
sequencer.open(); 
InputStream midiFile = this.getClass().getResourceAsStream("/res/Popcorn.mid"); 
sequencer.setSequence(MidiSystem.getSequence(midiFile)); 
sequencer.start(); 

Проблема в том, что файл не очень мала, так ее загрузки в то время как игра уже началась. Итак, есть ли что-то вроде прослушивателя секвенсера, поэтому я могу подождать, пока звук не закончит загрузку?

Или когда нет, есть ли способ запрограммировать его для себя?

Спасибо!

+1

Вы говорите, что это создает задержку? Вы пытались запустить это в своей собственной теме? –

+0

Ill do tomorow :) спасибо! Но не могли бы вы объяснить, зачем нужна эта нить? Я имею в виду, что я не понимаю, когда я не делаю этого с потоком, программа wil ждет, пока последовательность не загрузится - но она, похоже, инвертирована. Зачем? – GFP

+0

MIDI-последовательности обычно воспроизводятся в фоновом режиме. Слишком трудно начать настройку, а затем дождаться завершения этой мелодии, прежде чем делать что-то еще. –

ответ

2

Необходимо добавить груз. Например: вы запускаете основной класс в новой теме. Например:

public static void main(String[] args) { 
    new Thread() { 
     public void run(){ 
      JFrame ... //frame with game 
      //now you add text type "Please wait" 

      Sequencer sequencer = MidiSystem.getSequencer(); 
      sequencer.open(); 
      InputStream midiFile = this.getClass().getResourceAsStream("/res/Popcorn.mid"); 
      sequencer.setSequence(MidiSystem.getSequence(midiFile)); 
      sequencer.start(); 
      //Starting the game here 

      //You must close this game at end 
      System.exit(0); 
     } 
    }.start(); 
    while(true) { //this is slepping this program 
     Thread.sleep(4096); 
    } 

Извините за мой плохой английский.

+0

Нет проблем, кстати, не английский, но почему вы сказали, что мне нужно закрыть игру? Я имею в виду, какова материя к последовательности? И, почему программа просто бежит вперед, когда я делаю это без потока? – GFP

+0

, что is not warking ... :( – GFP

+0

Можете ли вы загрузить этот звук? Не могу проверить его. – barwnikk