2009-07-25 73 views
8

Cách tốt nhất để đọc tệp MIDI (theo thứ tự thời gian) với nhiều bản nhạc là gì? (Java)Đọc các tệp MIDI

Lưu ý: Tôi không muốn phát tệp MIDI, chỉ cần đọc tin nhắn.

Couple ý tưởng:

Có an toàn để giả định không có sự kiện lưu ý ngắn hơn 1/64 lưu ý? Hay tôi nên ghé thăm mỗi ca khúc và chỉ chuyển sang dấu chọn bên cạnh sau khi tất cả ve khác theo dõi

  • Giả sử không có sự kiện midi ngắn hơn so với một lưu ý 1/64, và di chuyển vị trí hiện tại đánh dấu đếm bởi rằng đồng bằng sửa chữa.
  • Visit mỗi theo dõi và tiến tới đánh dấu đầu tiên tiếp theo
+1

Không an toàn để giả sử ghi chú 1/64, ví dụ 1/128 cũng tồn tại. Tuy nhiên, nó là an toàn để giả định rằng dữ liệu được lưu trữ trong một byte duy nhất. (Bạn có thể đánh giá những người có lớp MidiMessage). –

+0

@yxk Tôi cũng thích tạo bản nhạc thích hợp từ tệp Midi. Có bạn và hướng dẫn cho tôi để bắt đầu? – Kalpesh

+0

Anvil Studio có tùy chọn $ 60 để in bản nhạc từ các tệp midi. Ngoài ra, có ai biết bất kỳ tùy chọn java nguồn mở nào đang đọc tệp MIDI không? –

Trả lời

0

Trong Java, bạn có thể đọc một file midi với:

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(); 
} 

Mã này nên đọc file midi của bạn (ngay cả khi có nhiều bản nhạc)

+0

Tôi không nhất thiết muốn phát chuỗi, chỉ cần nhận thông báo sự kiện trong các bài hát – yxk

+0

@srand Tôi giả định đây chỉ là một ví dụ, bạn có thể sử dụng các lớp MidiSystem, Sequence và Track để đọc các MidiEvents được lưu trữ trong tập tin. –

+0

@ Jasper Vâng, đó là những gì tôi đang làm hiện tại, tuy nhiên nó đọc nối tiếp/tuần tự của tập tin midi (và không theo thứ tự thời gian). – yxk

3

JFugue có thể đọc tệp MIDI và sắp xếp thư theo thứ tự thời gian.

Kết quả có thể được đọc dưới dạng JFugue MusicStrings (ví dụ: C-sharp, octave thứ 5, toàn bộ note = "C# 5w") hoặc bạn có thể viết ParserListener của riêng mình và đính kèm nó vào MidiParser để bạn có thể xuất văn bản của riêng bạn.