본문
MIDI 파일 분석하기 #1. Header, Track 개요
MIDI 파일은 연속적인 미디 메시지를 가지는 트랙들으로 구성되어 있으며, 이 트랙들을 관리하기 위하여 최상위(헤더) 정보가 파일의 가장 앞부분에 위치하게 됩니다. 즉, 미디 파일은 하나의 Header부와 다수의 Track부로 이루어집니다. Header부에는 접두어로 MThd, Track부에는 접두어로MTrk를 사용하여 각 부위에 대해 구분을 하며, 결국 미디 파일은 아래와 같은 구조를 취하게 됩니다. MThd<헤더데이터길이><헤더데이터>MTrk<트랙데이터길이><트랙데이터>MTrk<트랙데이터길이><트랙데이터>...
Header부는 순서대로 다음과 같은 구조로 이루어져 있습니다
HThd : 32비트(4개공간차지, 4D 54 68 64) => 고정
<헤더데이터길이> : 32비트(00 00 00 06) => 고정
<포맷> : 16비트(2개공간차지, 00 01)
<트랙갯수> : 16비트(00 02) => 위 악보에서 왼손 오른손 2개의 트랙이 따로, 동시에 연주되므로
<단위시간> : 16비트(01 E0)
포맷은 총 3가지의 값으로 존재할 수 있습니다. 0일 경우에는 음표와 박자 정보를 갖는 하나의 단일채널 트랙만이 존재하며, 1일경우는 동시에 재생되는 1개이상의 트랙으로 이루어지며, 2일경우에는 동시에 재생되지 않는 1개이상의 트랙으로 구성되게 됩니다. 특히 포맷1의 첫번째 트랙은 Tempo Map이라고 일컬어지며, Time Signature, Set Tempo 등의 메타 이벤트를 반드시 포함해야 합니다. 단위시간은 가장 앞 비트가 1일 경우에는 SMTPE frame 방식을 사용합니다, 0일경우는 4분음표를 표현하기위해 단위시간이 얼마나 존재해야 하는가(즉 4분음표시간/단위시간갯수)를 나타내줍니다. 이에 관해 설명하자면 복잡해지니 우선은 넘어가도록 하겠습니다
Track부는 Header부가 끝난 다음부터 연속적으로 위치하게 됩니다.
MTrk : 32비트(4D 54 72 6B) => 고정
<트랙데이터길이> : 32비트(00 00 00 22) => 34개의 공간만큼 데이터가 들어갑니다
<트랙데이터> : 실제 소리를 구성하는 명령이 위치하게 됩니다
댓글