Music Tech

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

SsojuX2 2020. 1. 8. 17:49

MIDI는 무엇일까?


MIDI(Musical Instrument Digital Interface)는 컴퓨터로 음악을 표현하는 방법 중의 하나이다.

컴퓨터로 음악 작업을 하는 사람들은 친숙한 개념이고, 아래와 같은 화면을 매일 보며 씨름하고 있을 것이다.

 


Ableton에서 MIDI 편집을 위한 Piano-roll


 

하지만, 음악 작업을 하는 분들에게도 MIDI가 어떤 형식으로 이루어져 있는지, 어떤 데이터를 가지고 있는지는 생소한 개념일 것이다.

컴퓨터로 음악을 표현하는 방법들은 다양하게 존재하는데, FMP book의 내용을 빌려서 분류하자면 아래와 같다.

 



 

우리가 확인해야할 MIDI representation은 Symbolic Representations 안에 포함되어 있다. 어려운 용어들로 채워져있는데, 나머지는 다음에 확인해보도록하고, 우리가 집중해야하는 MIDI에만 집중해보자.

복잡한 내용은 뒤로하고, 일단 우리가 봐야할 MIDI 데이터의 모양부터 확인해보자.

 

미디 데이터의 구조

  • 미디 데이터에는 두가지 타입이 존재한다. : The Status byte and The Data byte
  • Status bytes 는 0, 1 둘중 하나로 시작한다. (고정)
  • 맨 첫번째 Bit가 고정이므로 7 Bytes의 데이터만 표시할 수 있다. (0~127 총 128 개의 데이터 표현가능)
  • Status byte가 1로 시작하면, sss 는 메시지 타입을 나타내고, nnnn은 MIDI 채널을 나타낸다. (8개 타입, 16개 채널)

MIDI 데이터 구성


MIDI Message

  • 2 가지의 메인 MIDI 타입이 있다. (Channel, System)
  • 두가지 타입은 Status 에 따라서 나눠진다.

 


 

Message Type

  • MIDI 채널 번호 (n) 은 1~16까지 미디 채널을 나타낸다. 0~15 (0~F)로 표현할 수 있다.
  • 앞의 3 비트는 메시지 타입, 뒤의 네 비트는 채널을 나타낸다.
  • EX) 채널 7의 note off message -> Status 86 
  • 각 Status 가 결정되면, Data 1, 2 의 타입도 결정된다. (0~127까지의 값을 가진다)

 

여러가지 Message들은 각 Status마다 MIDI table이 정해져 있다. 각 테이블들은 아래 사이트에서 확인할 수 있다.

https://www.midi.org/specifications-old/category/reference-tables

 

MIDI Reference Tables

Our reference tables are the quick and easy way to look up the meaning of a particular MIDI message number, find a Manufacturer ID number, find international standards that incorporate MIDI, and more.

www.midi.org

 


Note on / Note off (1)

  • 가장 기본적인 Message, Note 즉 음이 시작되고 끝나는 부분을 나타내는 노트이다.
  • 데이터로는 음의 위치인 Note Number, 음의 세기인 Velocity를 가지고 있다.

Note on 은 Note가 시작되는 지점에서 발생하는 이벤트이고, Note off는 Note가 끝나는 부분에서 발생하는 이벤트이다.

모든 노트는 결국 끝이 나야한다. (계속 이어지면 끝나지 않는다)

MIDI 에서 Note Number도 7 bytes로 표현되기때문에 0 ~ 127 의 값을 가진다.

 

 

실제 피아노 (88건반) 음계와 미디를 대응했을때, MIDI note number는 21~108번으로 표현이된다.

하지만 0~127 까지 표현이 가능하기 때문에 피아노의 범위를 넘어가는 노트도 표현이 가능하다. 

보통 middle C 는 MIDI note number 60으로 결정된다.


MIDI 데이터에서 노트 번호로 표현되는 Data 1 이 있고, Data 2 는 Velocity를 나타낸다.

Velocity는 음의 세기를 나타내지만, 음악에서 음이 지속되는 것은 세기만 으로 결정되지 않는다.

따라서 ADSR envelope 를 이용해서 음을 표현하며, 이곳에 가장 크게 관여되는 파라미터가 Velocity이다.

 

출처 : https://blog.landr.com/adsr-envelopes-infographic/

 

ADSR envelope

  • Attack : Note on 이벤트 발생시 가장 강한 소리를 내는 것 까지 걸리는 시간
  • Decay : Attack 발생 후 소리가 sustain 크기로 떨어지는 시간
  • Sustain : 일정한 크기로 음이 지속되는 시간
  • Release : Note off 이벤트 발생시 음의 소리가 사라지는 시간, 세기도 0이 된다.

기본적으로 우리가 듣는 음들은 위와같은 특성을 가지고 있다.

Note number, Velocity와 위 함수들의 조합으로 다양한 소리를 만들어 낼 수 있다.

 


 

이 미디 데이터는 하나의 이벤트만 표시하고 있다. 간단하게 위의 Piano-roll에서 찍힌 미디데이터를 확인해보자.

 

위 그림은 Piano-roll을 표기한 그림이다. 여기서 미디데이터는 블록형태로 나타나게 되는데, 저런 블록형태로 표현하기 위해서는 적어도 2개 이상의 미디 데이터가 필요하다.

노트가 시작 되는 부분에 Note on, 노트가 끝나느 부분에 Note off가 있어야 위처럼 직사각형모양의 노트가 찍히게 되고, 각 노트 on/off 이벤트가 발생할때마다 ADSR envelope에 따라서 소리가 나게 된다. 이 부분은 나중에 신디사이저를 다루게 되면 더 자세하게 작성해 보겠다.


Note off trick

  • Note on, velocity 0 는 Note off 메세지와 같다.
  • 굳이 이방법을 쓰는 이유는 많은 양의 데이터를 처리할때 편리하기 때문이다.
  • 비교를 해봅시다.
    • [9n][pitch][velocity] and [8n][pitch][velocity]
    • [9n][pitch][velocity][pitch][velocity=0]
  • 아래방법으로하면 bytes를 줄여서 사용할 수 있다.
  • 이 부분은 MIDI 데이터를 파싱할때, Note off 만 파싱하면, 문제가 될 수 있는 부분이니 꼭 확인하고 넘어가자.

 


Control Change

  • MIDI에는 Pedal, wheels 등 컨트롤러의 대한 데이터도 전송가능하다.
  • Control Change의 Status byte는 같은 값을 사용한다. (Bn)
  • Data 1 번에 각각 Controller number가 입력되고, 사용할 데이터는 Data 2 에 입력된다.

Controller number 는 16진수로 정해진 테이블이 존재한다.

 

위와 같이 table로 정해져있지만, 따로 DAW등을 사용하여 MIDI mapping 이후 원하는 데이터 값으로 사용도 가능하다.

위 CC 데이터를 잘 활용하면 새로운 MIDI controller 개발 등에 사용 할 수 있다.


Ref

MIDI Code -  Juan P Bello [Link]

Fundamentals of Music Processing [Link]

 

미디 이야기 (2)

https://ssomu.tistory.com/33

 

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

MIDI ticks MIDI 파일의 형태는 아래 그림와 같이 구성되어있다. 매 MIDI event 마다 2 타입의 데이터가 전달된다. 1) deltatime 2) MIDI message 이 두가지이다. 여기에서 deltatime은 MIDI message가 언제 발생..

ssomu.tistory.com