Music Tech

[컴퓨터음악 Computer Music] MIDI ticks - (2)

SsojuX2 2020. 2. 4. 11:36

MIDI ticks


컴퓨터가 음악을 표현하는 방법인 MIDI

MIDI 파일의 형태는 아래 그림와 같이 구성되어있다.

매 MIDI event 마다 2 타입의 데이터가 전달된다. 

https://kr.mathworks.com/help/audio/examples/convert-midi-files-into-midi-messages.html

1) deltatime

2) MIDI message

이 두가지이다. 여기에서 deltatime은 MIDI message가 언제 발생했는지, message는 어떤 동작을 했는지를 나타낸다.

MIDI tick의 시간 길이는 MIDI 음악의 time division에 의해서 결정된다.


Time Division

MIDI 의 Time Division은 MIDI 파일의 resolution 으로도 알려져 있다. 

Time Division == Resolultion of the MIDI file

이 부분은 MIDI ticks이 어떻게 시간으로 변환되는지에 대한 정보를 알려주고,

MIDI 파일의 header 13~14 bytes 부분에 포함된다.

+) MIDI message와 MIDI의 헤더를 헷갈리지 말자!


Pulses per quarter note (PPQ)

time division의 top bit가 0 이면, time division은 tick per beat를 나타내고,

나머지 15 bits가 MIDI 의 tick per beat를 나타낸다. 

예를 들어서 위 15 bits가 60으로 정해져 있다면, tick per beat == 60 이 된다.

따라서, time division은 60 ticks per beat 이고, 1 tick의 길이는

1 tick = microseconds per beat / 60

1 tick = microseconds per beat / ticks per beat

으로 계산할 수 있다.

microsecond per beat는 MIDI message의 set tempo meta message로 결정된다.

만약 message가 생략되어 있다면, 500,000 microseconds가 기본값이다.

이 경우에 다시 1 tick의 시간을 계산해보면,

1 tick = 500,000 / 60 = 8333.33 microseconds 

이다.


Frames per second

time division 의 top byte가 1이면, 나머지 15 bits는 2 파트로 분리되어야 한다. 

앞의 7 bits는 초당 프레임 갯수(the number of frames per second)가 되고,

뒤의 8 bits는 프레임당 ticks의 개수(the number of ticks per frame)가 된다.

그렇게 되면 1 tick은 시간을 프레임의 갯수 * 프레임의 길이로 나눠서 얻을 수 있게 된다.

예를 들어 초당 24 frame 이고, 프레임당 tick 이 100이라고 했을때,

1초에 1,000,000 microseconds 이기 때문에 1 tick은

1 tick = 1,000,000 / (24 * 100) = 416.66 microseconds

1 tick = microseconds / (frames per second * tick per frame)

이다.


BPM and ticks per beat

다시 MIDI Tick으로 돌아와서, 위 내용으로 1 tick의 길이가 정해지게 되면,

우리는 이걸 이용해서 tick per beat 와 BPM 을 구할 수 있다.

그리고 ticks per beat 를 이용하면, 한 음의 길이를 구할 수 있고,

이를 기반으로 4분음표의 길이를 이용해 BPM을 구할 수 있다.

 

[mido] Tempo and Beat Resolution

 

mido의 Doc에 가보면 위와 같은 그림이 나와 있다. 여기에선 4분음표에 대한 tick이 3으로 설정되어있다.

그렇다면 1 beat에 몇 개의 ticks를 가지고 있는지를 ticks per beat 로 나타내며,

위의 그림 같은 경우에는 ticks per beat == 3 이고, 하나의 beat는 3개의 ticks로 이루어져 있다.

 

DAW같은 툴을 이용해서 mid 파일을 만들게 되면 기본적으로 ticks per beat가 96으로 되어있고,

MIDI 파일이 생성될때 해당 데이터가 정해지도록 설정해주면 된다.


간단히 MIDI 파일을 처리하는 코드는 아래에서 확인 할 수 있다.

https://github.com/modulabs/music-preprocessing/blob/master/MIDI/MIDI_preprocessing.ipynb

 

modulabs/music-preprocessing

music-preprocessing. Contribute to modulabs/music-preprocessing development by creating an account on GitHub.

github.com

 

미디 이야기 (1)

https://ssomu.tistory.com/31

 

[컴퓨터음악 Computer Music] MIDI (Musical Instrument Digital Interface) - (1)

MIDI는 무엇일까? MIDI는 컴퓨터로 음악을 표현하는 방법 중의 하나이다. 컴퓨터로 음악 작업을 하는 사람들은 친숙한 개념이고, 아래와 같은 화면을 매일 보며 씨름하고 있을 것이다. 하지만, 음악 작업을 하는..

ssomu.tistory.com