ďťż

Ładny brzuch

Hej .
Jak w Javie odtworzyc plik *.mid stosujac javax.sound.midi.spi , no albo jakos inaczej ?

Best regards - Norton



Nie wiem na ile to zaspokoi twoje potrzeby ale bazujac na ponizszym mozna zbudowac calkiem niezlego MidiPlayera. Do odtwarzania kawalków midi potrzeba wykorzystac midi sequencer, cała implementacja w możliwie prosty sposób wygląda tak:
import java.io.*; import javax.sound.midi.*; public class MidiPlayer {        public static void main(String argv[]) throws MidiUnavailableException, InvalidMidiDataException, IOException {            File f = new File("c: rack.mid");            Sequencer seq=MidiSystem.getSequencer();            if (!seq.isOpen()) seq.open();            seq.setSequence(MidiSystem.getSequence(f));            seq.start();            while(seq.isRunning());            seq.stop();            seq.close();            System.exit(0);    } }

Ponieważ metody sequencera działają asynchronicznie w pętli while sprawdzane jest czy plik jest aktualnie odtwarzany, przed uruchomieniem seq.start() metoda isRunning() zwraca false. Wewnątrz pętli mozna wykonać kilka dodatkowych czynności, np. sprawdzac ile pozostalo do konca odtwarzania i wpływać na odtwarzany dzwięk etc.... odpowiednie metody posiada klasa Sequencer, po zakonczeniu odtwarzania pętla zostaje przerwana (false)i następuje zamknięcie urządzenia i koniecznie wywołać System.exit(0) dla zamknięcia aplikacji konsolowej (w okienkowej to naturalna kolej rzeczy:) ).

Wracając do pętli to kontrolować odtwarzanie mozna równiez implementując interfejs MetaEventListener (sposób zalecany..ale nieco trudniejszy) tworzysz obiekt reprezentujący np. twoj odtwarzacz (juz nie na metodzie statycznej main ale prawdziwy obiektz konstruktorem itd...) implementujesz w/w interfejs który posiada jedna metodę meta i w tej metodzie nastepuje swego rodzaju detekcja czy jest odtwarzane midi czy tez nie :) trzeba sobie troszke zakombinować :) ale nie wiem czy cie interesuje to rozwiązanie wiec nie bede się rozpisywał być może na próżno ;)

No i bym zapomniał, bo jeszcze przyszła mi do głowy taka myśl że być może tobie chodzi o odtwarzanie midi w aplecie i nie potrzebujesz tak zaawansowanych mechanizmów. Aplety mają zaimplementowany interfejs AudioClip z metodami loop, play i stop a zatem chcac odtworzyc midi w aplecie wystarczy wywolac we wybranym miejscu taki kawałek kodu:
play(getDocumentBase(), "track.mid");
Metoda loop() powoduje zapętlenie odtwarzania, stop() natomiast to stop :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •