본문

MIDI 파일 분석하기 #4. Running Status



Track부에서 Meta event부분(MIDI 파일 분석하기 #2. Meta-events)이 나온 후 이어서 미디 메시지가 이어지게 됩니다. 미디메시지 역시 트랙데이터의 형식에 맞추어 <delta time><미디메시지>의 나열로 이루어지게 되며 이 페이지에서는 위그림상에서 노란색 사각형으로 둘러싸인 '중복되는 부분'이라고 적어놓은 부분을 다루어 보겠습니다. 물론 건반 이벤트 역시 미디메시지이지만, 지난 게시물(MIDI 파일 분석하기 #3. Delta time과 가변길이값)에서 간략하게나마 다루었으므로 생략하겠습니다.

미디 메시지 데이터는 STATUS, DATA1, DATA2 로 이루어져 있습니다. (참고 : MIDI-OX로 미디(MIDI) 신호 분석하기) 가장 중요한 status는 MIDI - status codes 페이지에서 확인하실 수 있습니다 Program change, Channel Aftertouch등의 경우에는 data2가 존재하지 않는다는 사실도 기억하시는것이 좋습니다. 위의 그림에서의 값과 status code를 대조하면 다음과 같습니다.

00 C0 00 : Channel Change
02 B0 07 64 : Control/Mode change
02 0A 40
02 5B 1E
02 5D 1E

여기에서 문제는 0A라는 값은 status code가 아닐 뿐 아니라 meta event에도 속하지 않는다는 것입니다. 이 현상은 Running status라는 MIDI 규칙에 의한것으로서, 만약  0x80~0xEF 사이값을 갖는 동일한 status code를 사용하는 메시지가 반복되어 전송될 때, status가 생략되어 데이터만 전송됩니다. 이는 MIDI 수신장치가 이전 status를 기억하고 있기에 status가 없을때 이전 status를 다시 사용하는 특성을 사용하여 데이터효율을 높인것입니다. 따라서 위 예를 재작성 하자면 다음과 같습니다. 특히 Control/Mode change의 경우 MIDI - control and mode changes 페이지를 같이 보시는것이 좋습니다.

02 B0 07 64 : Control/Mode change - Main Volume => 100
02 B0 0A 40  : Control/Mode change - Continuous controller #10(음 좌우 밸런싱) => 64(가운데)
02 B0 5B 1E  : Control/Mode change - Undefined on/off => 30
02 B0 5D 1E  : Control/Mode change - Undefined on/off => 30

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.