프로그래밍 세계/Multimedia

[MIDI] 가변길이 처리

깡다구짱 2008. 10. 5. 22:00

일단 홍사철님 사이트에 있는 표를 간략히 올리겠습니다...괜찮을라나..ㅡㅡ;;;



미디 포멧의 DeltaTime에서는 십진수 127이상의 값은 쓸 수가 없습니다.
그러면 127이상의 값을 어떻게 표현하느냐? 바로 가변길이를 사용합니다. 위에 표를 보면
120에서 144로 가면서 갑자기 81 10 값으로 뛰는 것이 보이시죠? 144와는 아무런 관련없는
값으로 보입니다. ㅎㅎㅎ

가변길이를 사용하는 방법은 표현하고자 하는 값을 7비트로 나누고 상위 7비트앞에 1을
추가하고 나머지 하위 7비트에 0을 추가하여 총 2바이트를 구성하는 것입니다.

대충 기본적인 이론은 이렇고요...궁금한게 갑자기 생기는데 이 가변길이라는게 다른 곳에서도
이런식으로 쓰이는 곳이 있는지 궁금하네요...OS에서 물론 조금 다른 방식으로 쓰이기 주소값 계산에 쓰이긴
하지만 이와 같은 방식과 같은 사용은 없는지..ㅎㅎ

함수로 구현하면 대충~~

int GetVariableLength( UINT unTime, UINT* unMaxLen )
{
     *unMaxLen = ( ( unTime >> 7 ) & 127 ) | 128;

     return 0;
}

실제 플레이 시간을 받아서 간단한 연산으로 처리 가능합니다.~