본문
MIDI 파일 분석하기 #2. Meta-events
"MIDI 파일 분석하기 #1. Header, Track 개요"에서 Header부와 Track부의 선언에 대해 알아보았습니다. 이번 게시물에서는 Track 데이터가 어떻게 구성되는지 알아보겠습니다.
Track부의 선언을 완료하면 바로 이어서 Track데이터가 나열되게 됩니다. 실제 소리를 만들어내는 '미디 메시지'가 나오기 전에, MIDI 파일을 구성하는, 비 MIDI 데이터인 'Meta events'들이 존재하여 빠르기나 음계등을 설정해 줍니다.
우선 알아두셔야 할것은 트랙 데이터는 <delta time><데이터><delta time><데이터>... 즉, [<delta time><데이터>]들의 나열로 이루어져 있다는 것입니다. <delta time>은 수학에서의 delta와 마찬가지로, 변화 시간, 즉 이전 데이터가 처리된 이후에 얼마의 시간이 흐른 후 현재 데이터를 처리할 것인가 에 대해서 나타낸다는 것입니다. <데이터>부분에는 MIDI message, Sysex message, Meta events가 들어갈 수 있습니다.
그럼, Track부의 선언이 완료된 바로 직후에 나타나는 Meta Events들을 살펴보겠습니다. 그림 두번째 악보옆, 파란색과 빨간색사각형으로 둘러싸인 영역이 Meta Event를 나타내는 부분입니다. 그들사이에 공통점이 있다면 두번째 위치에 항상 FF가 있다는 것입니다. 트랙 데이터가 <delta time><데이터>로 이루어졌다는것을 기억한다면, 결국 데이터의 첫부분이 FF인 경우가 Meta Event를 나타낸다는 사실을 알 수 있습니다.
Meta Event 데이터는 다음과 같이 구성됩니다. meta event = 0xFF + <타입> + <길이> + <meta데이터> 또한 아래와 같은 Meta Event의 타입들이 존재합니다. (출처 : Standard MIDI File Structure)
타입값 | 타입설명 | 타입값 | 타입설명 | 타입값 | 타입설명 |
0x00 | Sequence number | 0x01 | Text event | 0x02 | Copyright notice |
0x03 | Sequence or track name | 0x04 | Instrument name | 0x05 | Lyric text |
0x06 | Marker text | 0x07 | Cue point | 0x20 | MIDI channel prefix assignment |
0x2F | End of track | 0x51 | Tempo setting | 0x54 | SMPTE offset |
0x58 | Time signature | 0x59 | Key signature | 0x7F | Sequencer specific event |
두번째 악보 옆, Track부 선언에 이어 바로 나오는 두개의 파란색 사각형으로 둘러싸인 meta event의 예를 보시겠습니다. (delta time에 대해서는 다음 midi message 설명시 상세히 다루겠습니다.) MIDI Documentation : Standard MIDI Files 페이지를 함께 참고해주세요.
00 FF 58 04 04 02 18 08 : 00 시간 이후에(즉시) Time signature 타입을 갖는 길이가 4인 meta event가 발생합니다
00 FF 59 02 01 00 : 00시간 이후에(위와 동시에) Key signature 타입을 갖는 길이가 2인 meta event가 발생합니다
Time Signature의 원형은 다음과 같습니다 : FF 58 04 nn dd cc bb
nn과 dd는 박자표 상에서 분자와 분모를 나타냅니다. 분자는 있는 값 그대로 사용되지만 분모는 2의 dd제곱의 값으로 사용됩니다. 즉 위 예(04 02)를 보자면 분자는 4, 분모는 2^2. 즉 4분의 4박자를 나타내게 됩니다. 또한 세번째 값인 cc는 한번 메트로놈이 땡! 하기 위한 시간을 나타내며, 위의 예(0x18)에서는 24번의 MIDI주기마다 한번 메트로놈이 쳐진다는것을 의미합니다. 마지막 값인 bb는 4분음표를 위하여 몇개의 32분음표가 필요한가를 나타냅니다. 위의 예에서 8개가 필요하다는것을 알 수 있습니다(?) 마지막 값은 특별한 상황이아니면 8로 고정이라고 합니다.
또한 Key Signature의 원형은 다음과 같습니다 : FF 59 02 sf mi
좀 더 상세한 원문은 이쪽(MIDI File Format - The Sonic Spot)에서 찾으실 수 있습니다. 다음은 미디파일에서의 미디 메시지 처리에 대해(혹은 앞서서 델타 타임에 대해) 다루겠습니다.
또한 Key Signature의 원형은 다음과 같습니다 : FF 59 02 sf mi
위의 예와 아래의 정보(링크 그대로 가져왔습니다) 를 조합한다면, 1개의 샵이 오선에 붙은, 사장조(G Major)를 나타낸다는 사실을 알게 됩니다.
sf = -7: 7 flats
sf = -7: 7 flats
sf = -1: 1 flat
sf = 0: key of C
sf = 1: 1 sharp
sf = 7: 7 sharps
mi = 0: major key
mi = 1: minor key
좀 더 상세한 원문은 이쪽(MIDI File Format - The Sonic Spot)에서 찾으실 수 있습니다. 다음은 미디파일에서의 미디 메시지 처리에 대해(혹은 앞서서 델타 타임에 대해) 다루겠습니다.
댓글