C++에서 midi 파일을 읽으려고하는데 표준 midi 사양 (이 사이트를 포함하여 여러 사이트에서 검색 한 내용 : http://www.sonicspot.com/guide/midifiles.html)에 정의되지 않은 이벤트 인 것 같습니다.미디 파일을 읽을 수 없습니까? [확장 사양?]
나는 16 진수 편집기에서 midi를 열고 오류를 찾아 냈습니다. 첫 번째 "메모 온"이벤트 전에 발생합니다. 이 파일은 Sibelius 6 소프트웨어를 사용하여 생성되었으며 여기에 파일 섹션을 게시하면 누군가가이 문제를 해결하는 데 도움이 될지 궁금합니다. 어느
4D 54 72 6B (MTrk magic number)
00 00 1F F5 (track size in bytes - 8181)
00 FF 03 04 (4 bytes follows) (track sequence name)
00 FF 04 0B (11 bytes follows) (instrument name)
00 C0 34 (program change event)
00 B0 79 00 (controller event)
00 5B <- (what the heck is that?!)
첫번째 값이 00이기 때문에 델타 틱 수 없다 (단, MSB는 1로 설정)가 인식 할 수있는 이벤트가 아니다 :
이
은 제 3 트랙의 시작이다. 10 바이트 나중에 내가 이벤트 "에 참고"는 인식이 간다 :00 5B 30 00 40 00 00 07 64 00 0A 10 00 90 3E 47 < - 내가 아무 생각이 없다
에 유의 무엇을 "note on"이전의 12 바이트는 나타 내기 때문에 파일을 읽을 수 없습니다. 나는 첫 번째 음이 길다는 것을 알고 있습니다. 아마도 그 이유가 있습니다. 나는 또한 "바"일시 정지를 나타내는 이벤트를 찾을 수 없다는 것을 알았다. 아마 바 + 길이의 코드일까요? 나는 그것들을 진드기로 읽어야합니까?
감사합니다. 도움을 주시면 감사하겠습니다.
와우! 진심으로! 나는 하나의 언급 된 실행 상태가 아닌 midi 파일 형식을 설명하는 웹 사이트의 보트로드를 거쳤습니다. 방금 날 구 했어요! 내가 알 수없는 또 하나의 문제는 Sibelius에서 일시 중지 된 "막대"가 midi로 내보내지는 방법입니다. 또한이 미디 로더는 상업용 게임의 일부이며 크레딧에 특별한 감사를 드리고자합니다. 어떤 이름을 넣을 수 있습니까? –
싸구려는 아니지만 정확한 세부 정보를 얻으려면 [실제 MIDI 사양] (http://www.midi.org/techspecs/midispec.php) 사본이 필요합니다. 주위를 사냥하다 보면 세부 정보를 처리하고 시간을 절약 할 수있는 MIDI 가져 오기 라이브러리를 찾을 수 있습니다. Sibelius의 일시 중지 (fermata)에 관해서는, 내가 기억 하듯이 우리는 추가 시간을 삽입하여 막대를 길게 만듭니다. 이전 버전에서는 음을 길게 만들기 위해 템포가 변경되었지만, 이것은 fermata의 끝과 다음 막대의 시작 사이의 간격을 허용하지 않았습니다.오, 그리고 당신은 단지 'The Mandrill'을 신용 할 수 있습니다 :-) –