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?