$$ \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

가변길이량(variable-length quantity)

본 문서에서는 바이트에서 최하위 비트를 0번째 비트라 하고, 최상위 비트를 7번째 비트라 한다.

미디파일의 몇몇 수는 가변길이량이라는 꼴로 표현된다. 이 수들은 한 바이트당 일곱 비트로 표현되며 최상위 비트가 먼저다. 마지막 말고 모든 바이트는 7째 비트를 설정하고, 마지막 바이트의 7째 비트는 비운다. 수가 0~127이면 정확히 한 바이트로 표현된다.

가변길이량으로 표현된 숫자의 예시들이 몇 개 있다.

가변길이량 예시
표현할 수(16진)표현할 수(2진)가변길이식(2진)가변길이식(16진)
0   0    0   0    0   0    0   0 00000000 00000000 00000000 00000000 00000000 0   0
0   0    0   0    0   0    7   F 00000000 00000000 00000000 01111111 01111111 7   F
0   0    0   0    0   0    8   0 00000000 00000000 00000000 10000000 1000000100000000 8   1   0   0
0   0    0   0    2   0    0   0 00000000 00000000 00100000 00000000 1100000000000000 C   0   0   0
0   0    0   0    3   F    F   F 00000000 00000000 00111111 11111111 1111111101111111 F   F   7   F
0   0    0   0    4   0    0   0 00000000 00000000 01000000 00000000 100000011000000000000000 8   1   8   0   0   0
0   0    1   0    0   0    0   0 00000000 00010000 00000000 00000000 110000001000000000000000 C   0   8   0   0   0
0   0    1   F    F   F    F   F 00000000 00011111 11111111 11111111 111111111111111101111111 F   F   F   F   7   F
0   0    2   0    0   0    0   0 00000000 00100000 00000000 00000000 10000001100000001000000000000000 8   1   8   0   8   0   0   0
0   8    0   0    0   0    0   0 00001000 00000000 00000000 00000000 11000000100000001000000000000000 C   0   8   0   8   0   0   0
0   F    F   F    F   F    F   F 00001111 11111111 11111111 11111111 11111111111111111111111101111111 F   F   F   F   F   F   7   F

(`대충 이 방식이 허용하는 최대치가 0F FF FF FF인데 이게 존나 큰 수라는 내용)

※대충, 각 바이트(비트 8개) 중에서 일곱 비트만 수 표현에 쓰고 첫째 비트 한 개는 "다음 바이트 있음" 표시라는 뜻. 바이트를 최대 네 개까지만 씀. 네 번째 바이트는 무조건 다음 바이트가 없으니까 네 번째 바이트의 첫째비트는 쓸모없음(0). 0부터 127까지는 바이트 하나로 표현돼서 평범한 1바이트랑 똑같이 생김. 멫 바이트 줄인다고 똥꼬쇼 오졌죠?