2012-12-06 24 views
5

Tôi đang cố gắng viết một số chức năng để đọc trong tệp MIDI. Tôi đã đề cập đến một số trang web cung cấp đặc điểm kỹ thuật, nhưng chủ yếu là trang web này: http://www.sonicspot.com/guide/midifiles.htmlĐọc tệp MIDI (C): 0x00 xuất hiện sau khi kết thúc giá trị độ dài var

Tôi đã thử nghiệm nó trên tệp MIDI cho chủ đề Super Mario Bros mà tôi đã tải xuống và tôi nhận được một số dữ liệu không mong muốn. Có thể là tệp bị định dạng sai, nhưng tôi nghĩ có nhiều khả năng tôi đang làm sai điều gì đó. Đây là dữ liệu (từ một trình soạn thảo hex) mà tôi đang gặp rắc rối với, và những gì tôi nghĩ tôi biết về nó:

4D 54 72 6B 00 00 00 19 00 FF 51 03 05 7B 71 00 FF 58 
|---------| |---------| || || || |------| || || 
    MTrk Chunk size || || || Tempo || || 
      (25 bytes) || || ||(ms per || || 
         \/ || ||1/4 note) || || 
       VLen value || ||   \/ || 
      (Event at time 0)|| || VLen value || 
          \/ || (event at || 
       Beginning of || time 113) || 
       meta-event ||    || 
           \/    \/ 
       Meta-event type:   ???? 
         set tempo 

Như bạn có thể thấy, nếu tất cả mọi thứ trước khi 0x00 là đúng, sau đó nó đang làm gì ở đó? Giá trị VLen trước đó có giá trị nhị phân là 01110001 và vì vậy không mong đợi một phần khác của giá trị VLen và do đó, AFAIK, nên là một loại sự kiện. Tuy nhiên, không có loại sự kiện nào được liên kết với 0x0. Bất cứ ai có thể nhìn thấy nơi tôi đang đi sai?

Trả lời

5

Tôi đã phát hiện sự cố: mã meta-sự kiện (trong trường hợp của tôi 0x51) được tiến hành bởi kích thước chunk giống như các sự kiện bình thường. Lý do tôi nghĩ khác là vì, đối với sự kiện meta tiến độ đã đặt, kích thước dữ liệu tiến độ luôn là 3. Vì vậy, 51 03 05 7B 71 thực sự là mã sự kiện được đặt (51), kích thước của dữ liệu tiến độ (03), sau đó tiến độ thực tế (05 7B 71), và sau đó 00 chỉ là một giá trị độ dài khác cho tôi biết rằng sự kiện tiếp theo là vào thời điểm 0.

Tôi hy vọng điều này sẽ giúp ai đó. Tôi cũng tìm thấy một tài liệu hướng dẫn tốt hơn cho định dạng MIDI đã làm cho điều này rõ ràng hơn: http://www.omega-art.com/midi/mfiles.html

Các vấn đề liên quan