|
SMF (Standard MIDI File)에 대한 이해 |
조: 2조 |
작성일: 2011-05-20 | |
작성자: 유시혁 |
역사: 1988년 Opcode System의 창시자 David Oppenheim씨에 의해 MIDI의 연주 데이터의 표준 파일 포맷으로서
제창된 것이 Standard MIDI File(SMF) 이다. SMF에 대응하고 있는 시퀀서끼리 라면 플로피디스크나 CD-ROM 등의
미디어나 통신을 통해서 시퀀스 데이터(연주 정보, 템포 정보, 박자 정보, 그 외)를 주고 받을 수 있기 때문에 서양의
시퀀스 소프트웨어 메이커를 중심으로 점차 채용되어 현재에는 완전히 표준 포맷으로 정착 되었다.
- Format 0
단일 트랙에 모든 채널 메시지를 포함한 포맷이다. SMF에 대응하는 모든 시퀀스가 이 형식에 대응하고 있기 때문에
호환성이 높은 SMF를 만들고 싶을 때에는 이 형식을 사용한다.
멀티 트랙을 이 포맷으로 보존하면 모든 데이터가 이 포맷으로 저장된다.
- Format 1
MIDI 채널마다 트랙을 나눠, 여러 트랙을 이용할 수 있는 포맷이다. 다른 시퀀스에 이식할 경우에도 데이터 작성 때의
트랙 구성을 재현할 수 있기 때문에 트랙 단위로 편집을 하기 쉽다.
포맷 0처럼 단일 트랙으로 정리할 수 없다.
- Format 2
Format 1과 마찬가지로 여러 트랙의 기록을 할 수 있는 Format이다. 포맷2 에서는 여러 트랙에다
여러 송(시퀀스를 포함 시킬 수 없다.) 다만 현재 대응하고 있는 시퀀스가 없기 때문에 시퀀스 데이터를
넘겨 주는 데에 사용되는 일은 없다.
- Chunk
데이터를 이루고 있는 일련의 덩어리 이다. Chunk에는 SMF 전체의 정보를 포함한
"Header Chunk"와 실제 연주 정보가 들어있는 "Track Chunk" 2 종류가 들어있다.
<Header Chunk Data의 구조>
Header Chunk Data |
설명 |
Header ID |
(항상)MTrd |
Length of header data |
6 |
Format specification |
Format 0, 1, 2 |
Number of track blocks in the file |
Track 의 수 |
Unit of delta-time values. |
4분 음표의 길이 |
<The track data format>
Track의 정보 블록 부분 |
설명 |
Track ID |
(항상)MTrk |
Length of header data |
트랙 길이 |
<delta-time>, <event> |
트랙의 이름, 4분 음표, 템포 정보 등 |
Header Chunk 와 Track Chunk 시작 부분을 제외한 나머지 내용은 다음과 같은 형식으로 되어있다.
<가변 길이 Delta-time> + <Event 명령> + <기타 파라미터>
이 중 Delta-time 은 앞의 Event를 처리하고 다음 명령을 할 때까지 대기하는 시간에 속한다.
각각의 명령은 2개의 바이트로 구성되어 있다. Xxxx 부분은 16개의 채널(악기 연주자)를 의미한다.
Hex |
Binary |
|
Data |
|
Description | ||||
8x |
1000xxxx |
|
nn vv |
|
Note off (key is released) // 소리를 끈다.
| ||||
9x |
1001xxxx |
|
nn vv |
|
Note on (key is pressed) //소리를 킨다.
| ||||
Ax |
1010xxxx |
|
nn vv |
|
Key after-touch
| ||||
Bx |
1011xxxx |
|
cc vv |
|
Control Change
| ||||
Cx |
1100xxxx |
|
pp |
|
Program (patch) change //악기를 바꾼다.
| ||||
Dx |
1101xxxx |
|
cc |
|
Channel after-touch
| ||||
Ex |
1110xxxx |
|
bb tt |
|
Pitch wheel change (2000H is normal or no change)
|
다음으로는 Meta-Event 정보이다. Meta-Event 에는 조/ 박자, 트랙명, 저작권 정보 등 연주에 영향을 주지 않는
정보에 해당한다.
이 테이블은 Midi Channel 번호를 포함하고 있다.
다음 포맷은 FF xx nn dd 의 형태를 따르고 있다.
<Variable Length Delta-Time>+<FF>+<Meta-Event 명령>+<Parameter>
Hex |
Binary |
|
Data |
|
Description |
| ||||||||||||||||
00 |
00000000 |
|
nn ssss |
|
Sets the track's sequence number.
|
| ||||||||||||||||
01 |
00000001 |
|
nn tt .. |
|
Text event- any text you want. (제목/ 작곡자)
|
| ||||||||||||||||
02 |
00000010 |
|
nn tt .. |
|
Same as text event, but used for copyright info. (저작권 정보)
|
| ||||||||||||||||
03 |
00000011 |
|
nn tt .. |
|
Sequence or Track name (시퀀스에 쓰여진 악보 이름, 트랙명은 시퀀스의 각 트랙에 붙여진 이름이다. Format 0의 SMF에서는 트랙명과 시퀀스 명은 같다.)
|
| ||||||||||||||||
04 |
00000100 |
|
nn tt .. |
|
Track instrument name (악기 이름)
|
| ||||||||||||||||
05 |
00000101 |
|
nn tt .. |
|
Lyric (가사 정보 ASCII 문자를 표시하기 위한 이벤트)
|
| ||||||||||||||||
06 |
00000110 |
|
nn tt .. |
|
Marker
|
| ||||||||||||||||
07 |
00000111 |
|
nn tt .. |
|
Cue point
|
| ||||||||||||||||
2F |
00101111 |
|
00 |
|
This event must come at the end of each track (악보 끝) |
| ||||||||||||||||
51 |
01010001 |
|
03 tttttt |
|
Set tempo (악곡의 빠르기)
|
| ||||||||||||||||
58 |
| |||||||||||||||||||||
01011000 |
|
04 nn dd cc bb |
|
Time Signature (악곡의 박자)
| ||||||||||||||||||
59 |
01011001 |
|
02 sf mi |
|
Key signature (높이, 장단조)
| |||||||||||||||||
7F |
01111111 |
|
xx dd .. |
|
Sequencer specific information
| |||||||||||||||||
다음은 음표를 어떻게 숫자로 표현하는지에 관한 표이다. 사람의 귀에 들리는 범위인 약 20Hz~20000Hz 이다.
그래서 20Hz 이하의 0, 1 Oct 와 10000Hz 이상인 10 Oct 는 음질을 결정하는 것 이외에 잘 쓰이지 않는다.
참고 자료: 컴플리트 MDI 북 - takahashi nobuyuki
http://ec8.springnote.com/ : EC8 Study
http://www.midi.org MIDI Manufacturers Assdociation