$$ \definecolor{rr}{rgb}{0.95,0.1,0} \definecolor{bb}{rgb}{0,0.4,1} \definecolor{gg}{rgb}{0,0.6,0} \definecolor{yy}{rgb}{0.8,0.5,0} \definecolor{pp}{rgb}{0.9,0,0.5} $$

미디 1.0 상세명세 / 데이터 유형 (상태바이트, 데이터바이트)

~카테고리:
나머지/midiSpec

데이터 유형(data type)

미디를 통해 전달되는 바이트에는 상태바이트와 데이터바이트 두 가지 종류가 있다.

상태 바이트(status byte)

상태바이트는 최상위 비트가 1로 설정된 8비트짜리 수이다. 상태바이트는 메시지 유형, 즉 뒤따르는 데이터바이트의 쓰임새를 식별하는 역할을 한다. 수신기에 새로 들어오는 상태바이트(실시간메시지 빼고)는 수신기가 상태를 새로 취하도록 명한다. 이전 메시지가 불완전하더라도 그런다.

  • 진행중상태(Running Status)

    보이스메시지와 모드메시지 전용. 한 상태바이트를 받아 처리한 수신기는 다른 상태바이트를 받기 전까지 계속 그 상태로 남아있는다. 따라서 같은 상태바이트가 반복되면 상태바이트를 마음대로 빠뜨리고 데이터바이트만 보내도 된다. 그러니까, 진행중상태 를 쓰면 데이터바이트만으로 메시지를 완전히 구성할 수 있다.

    진행중상태는 특히 세기0짜리 음표켜기를 음표끄기로 쓰면서 음표켜기/끄기 메시지의 긴 문자열을 전송할 때 유용하다.

    다른 상태바이트가 끼어들면 진행중상태는 끝난다. 실시간메시지는 진행중상태에 영향주지 않는다.

  • 미구현 상태(unimplemented status)

    수신기에서 구현하지 않은 기능의 상태바이트와 뒤따르는 데이터바이트는 무시되어야 한다.

  • 미정의 상태(undefined status)

    모든 미디 장치는 미정의된 상태바이트를 전송하지 않도록 항상 주의를 기울여야 한다. 만약 그런 코드를 전송받은 경우, 시스템에 문제를 일으키지 말고 무시되어야 한다. `Care should also be taken during power-up and power-down that no messages be sent out the MIDI Out port. Such noise, if it appears on a MIDI line, could cause a data or framing error if the number of bits in the byte are incorrect.

데이터 바이트(data byte)

상태바이트(실시간메시지 빼고) 뒤에는 하나 내지 두 데이터바이트가 메시지의 내용을 나른다. 데이터바이트는 최상위 비트가 무조건 0으로 설정된 8비트짜리 이진수이다. 각 상태바이트에 뒤따라야 하는 데이터바이트의 수와 범위는 섹션2(※`그게 어디냐 ????)의 표에 지정돼있다. 각 상태바이트에 대해 데이터바이트가 무조건 맞는 수만큼 보내져야 한다. 현재 상태에 필요한 데이터를 모두 받기 전까지, 수신기 안에서 메시지에 대한 모든 행위는 기다려져야 한다. 수신기는 알맞는 상태바이트에 뒤따르지 않는 데이터바이트를 무시해야 한다 (위에서 설명한 진행중상태는 예외).