Deep learning

음악 생성 모델 - midi file 처리하기

taeeyeong 2024. 5. 26. 00:49

취미로 반주를 하고 음악을 제작하는데 약간의 관심을 가지고 있습니다.

음악 생성 딥러닝 모델이 쏟아지고 있는 가운데 저처럼 아직 midi file이 익숙치 않고, 음악을 생성하는 모델에 대한 관심이 많은 분들에게 도움이 되고자 제가 음악 생성 모델을 만들어보면서 학습한 내용에 대해 정리해보고자 합니다.

우선 드럼 비트를 생성하는 모델을 만들어보고 있는데 그러려면 midi file에 대한 이해가 많이 필요하더군요.

작업하며 정리한 내용에 대해 나누어보겠습니다.

 

1. MIDI 파일의 주요 속성

 

1. Note On/Off Events: 드럼 소리의 시작과 끝을 나타냅니다.

Note On: 특정 시점에 드럼이 연주되기 시작함을 의미.

Note Off: 특정 시점에 드럼이 연주되기를 멈춤을 의미.

2. Pitch (Note Number): 드럼의 종류를 나타냅니다. MIDI 표준에서 드럼의 각 타악기는 고유한 피치 값을 가집니다.

예: 35 (Bass Drum 2), 38 (Snare Drum 1), 42 (Closed Hi-hat) 등.

3. Velocity: 드럼 소리의 강도를 나타냅니다. 소프트웨어에서는 종종 음량과 관련이 있습니다.

4. Timing Information:

Delta Time: 이벤트 간의 시간 간격을 나타냅니다.

Ticks per Quarter Note (TPQN): MIDI 파일의 시간 해상도를 결정합니다.

5. Tempo: 분당 비트 수 (BPM)를 설정하여 곡의 속도를 결정합니다.

 

2. 데이터 전처리

 

모델 학습을 위해 MIDI 데이터를 전처리하는 과정은 다음과 같습니다:

 

1. MIDI 파일 파싱: pretty_midi 라이브러리를 사용하여 MIDI 파일을 읽어들이고 이벤트를 추출합니다.

2. 이벤트 필터링: 드럼 트랙만 추출하여 Note On 이벤트, 피치, 벨로시티, 타이밍 정보를 얻습니다.

3. One-Hot Encoding: 드럼 종류(pitch)를 one-hot 인코딩하여 각 타악기를 고유한 벡터로 변환합니다.

4. Sequence Creation: 이벤트 시퀀스를 만들어 모델 입력으로 사용합니다.