2009-07-25 15 views
8

Jaki jest najlepszy sposób odczytywania pliku MIDI (chronologicznie) za pomocą wielu ścieżek? (Java)Czytanie plików MIDI

Uwaga: Nie chcę odtwarzać pliku MIDI, wystarczy przeczytać komunikaty.

Para pomysłów:

Czy można bezpiecznie założyć, nie ma żadnych wydarzeń note krótsze niż nocie 1/64th? Czy powinienem odwiedzić każdy utwór i poruszać się tylko do następnego kleszcza po wszystkich innych kleszczy tory

  • Załóżmy nie ma midi wydarzenie krótszy niż 1/64th notatki i przesunąć bieżącą pozycję tick count przez ten fix delta.
  • Odwiedź każdy utwór i postępu do następnego najwcześniejszym kleszcza
+1

Nie można bezpiecznie przyjmować 1/64. notatek, na przykład 1/128 istnieje również. Można jednak bezpiecznie założyć, że dane są przechowywane w jednym bajcie. (Możesz ocenić te z klasą MidiMessage). –

+0

@yxk Lubię również tworzyć odpowiednie nuty z pliku Midi. Czy Ty i przewodnik po mnie zacząć? – Kalpesh

+0

Anvil Studio ma opcję 60 dolarów, która będzie drukować nuty z plików midi. Każdy, kto zna jakieś otwarte opcje java, czytając plik MIDI? –

Odpowiedz

0

W Javie można odczytać plik midi z:

try { 
     Sequencer sequencer = MidiSystem.getSequencer(); 
     sequencer.setSequence(MidiSystem.getSequence(yourMidiFile)); 
     sequencer.open(); 
     sequencer.start(); 
     while(true) { 
      if(sequencer.isRunning()) { 
       try { 
        Thread.sleep(1000); // Check every second 
       } catch(InterruptedException ignore) { 
        break; 
       } 
      } else { 
       break; 
      } 
     } 

} catch(Exception e) { 
     System.out.println(e.toString()); 
} finally { 
    // Close resources 
    sequencer.stop(); 
    sequencer.close(); 
} 

Kod ten należy czytać pliki midi (nawet jeśli istnieje wiele utwory)

+0

Niekoniecznie chcę odtwarzać sekwencję, po prostu otrzymuję komunikaty o zdarzeniach w utworach – yxk

+0

@ Sądzę, że to tylko przykład, możesz użyć klas MidiSystem, Sequence i Track, aby odczytać MidiEvents przechowywane w plik. –

+0

@Jasper Tak, właśnie to robię obecnie, jednak jest to seryjny/sekwencyjny odczyt pliku midi (a nie chronologiczny). – yxk

3

JFugue może odczytywać plik MIDI i sortować wiadomości w porządku chronologicznym.

Wyniki można odczytać jako JFugue MusicStrings (na przykład C-sharp, 5-ta oktawa, cała nuta = "C# 5w"), lub możesz napisać własny ParserListener i dołączyć go do MidiParser, dzięki czemu możesz wyprowadzać twój własny tekst.