2009-07-25 4 views
4

.mid 파일에서 정보를 읽으려고하지만 모든 미디 메시지에 포함되지 않는 여분의 바이트가 계속 표시됩니다. 나는 이것들을 예측/처리하는 방법을 모르며 프로젝트에서 모든 것을 던지고있다. 어떤 제안? 여기 몇 가지 예 :.mid 파일의 추가 바이트

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00 00 06 0c 00 26 00  ???? 
00 b0 20 00      Controller Event 

00 ff 58 04 0c 03 0c 08   Time Signature 
81 89        ???? 
50 ff 51 03 0f 42 40    Tempo 
00 ff 2f 00      End of Track 

00 ff 21 01 00     Unknown Meta Event 
30 b0 79 00      Controller Event 
00 07 64 01 0a 32 01 5b   ???? 
14 01 5d 11 01 20 00 00 00  ???? 
00 c0 23       Program Change 
8c 7c 90 23      ???? 

나는이 중 일부는 전혀 아무 이유없이 0이 아닌 델타 시간을 갖고있는 것 같다 때문에도 바로 여기에 고장이 있는지 회의적이다.

답변

1

마치 처음부터 시작하지 않은 것처럼 보입니다. 처음 8 바이트 should be

4D 54 68 64 00 00 00 06

내 생각 엔 파일의이 묶였던 또는 올바르게 그것을 읽는하지 않을 것입니다?

수정 : 신경 쓰지 마세요. 이 파일의 시작이라고 말하지 않았습니다. 네 바이트는 청크 헤더입니다.

2

MIDI 이벤트의 델타 시간은 가변 길이이므로 각 이벤트는 1 바이트 이상을 사용하여 마지막 이벤트부터 경과해야하는 시간을 인코딩합니다. this을 참조하십시오.

모든 MIDI 이벤트에는 0 (이전 이벤트와 정확히 동일한 시간에 발생했음을 나타냄) 또는 양의 값 (이전 이벤트 이후에 발생해야 함을 나타냄) 중 하나 인 델타 시간이 있습니다.

2

MusiGenesis가 올바르게 맞았습니다. 가변 길이 델타를 정확하게 파싱하지 않았습니다. 그러나보고있는 다른 이벤트는 running status입니다.이 기술은 동일한 유형의 여러 메시지를 보낼 때 상태 바이트를 생략하여 대역폭을 절약하는 데 사용되는 기술입니다.

는 여기에 덤프 해석되는 방법은 다음과 같습니다 등등

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00       Running status (controller event) 
00 06 0c       Running status (controller event) 
00 26 00       Running status (controller event) 
00 b0 20 00      Controller Event 

합니다. 하지만 내가 이해할 수없는 것은 왜 다음 트랙 헤더 전에 트랙 메시지가 끝난 후에 추가 이벤트가 한꺼번에 표시되는 것입니까? MIDI 파일 전체를 붙여 넣었습니까?

+0

미안합니다. 그것은 단지 조각, 전체 파일이 거대하고, 모든 바이트를 사이에 게시 할 수있는 방법이 없습니다. 그래도 내가 이해하지 못하는 것이있다. 여기에 파일의 연속적인 부분이 있습니다. 00 ff 21 01 00 (알 수없는 메타 이벤트) 30 b0 79 00 (컨트롤러 변경) 00 07 64 01 0 a 32 01 5b 14 01 5d 11 01 20 00 00 00 00 00 c0 23 프로그램 변경 8c 7c 90 23 73 0d 23 이것은 컨트롤러가 변경되어야하는 더 많은 바이트가 뒤 따른다. 전체 트랙에는 아무런 노트 나 노트 오프 이벤트가 없으며 7f 위의 몇몇 값은 델타 타임에만 나타납니다. – Skunkwaffle

관련 문제