드럼 연주 기능을 고리로 하여 과거(Nano Ardule, 과거라고 해 봐야 너무나 가까운 반년 전이지만)와 현재(Fluid Ardule)의 통섭이 일어나고 있다고 아주 좋아하고 있었다. 그 즐거움은 며칠 가지 않았다. 과거의 작업 결과물이 완벽하지 않았음을 깨닫는 계기가 되고 말았으니까. 고쳐야 할 곳이 꽤 많아져서 약간은 망연자실한 상태이다.
Nano Ardule 개발 시절에 내가 확립해 둔 드럼 패턴 체계는 오직 4박자를 위한 것이었다. 4박자만큼은 아니더라도 널리 쓰이는 3박자(예: 왈츠), 그리고 5박자나 7박자 같은 비정형 박자를 다루려면 드럼 패턴 체계 자체를 근본적으로 뜯어고쳐야 한다고 생각하고 있었다. 그런데 막상 Fluid Ardule에 드럼 재생 기능을 넣으면서 살펴보니 과거에 만든 체계가 꽤 견고하고 합리적이라서 3박자나 비정형 박자를 처리하는데 별다른 문제가 없었다.
게다가 더욱 까다롭게 생각했던 flam 처리도 sidecar 파일 방식으로 어렵지 않게 구현할 수 있었다. 이러한 결과에 만족하면서 flam이 포함된 왈츠 패턴 하나를 재생하고 있는데 tom 소리가 빠져 있는 것이 아닌가? 분명히 이미지로 만든 패턴 정보에는 low 계열의 tom을 3박째에서 2회(8분음표) 두드리고 있는데 처리가 끝난 ADT/ADP에서는 소리가 들리지 않는다.
원본 MIDI 파일에는 분명히 노트가 남아 있었다. 원인을 찾아 보았다. Tom 계열의 노트를 처리하면서 누락이 된 것이었다! 현재 사용하는 12개 slot 정보는 다음과 같다.
SLOT0=KK@36,KICK SLOT1=SN@38,SNARE SLOT2=CH@42,HH_CL SLOT3=OH@46,HH_OP SLOT4=LT@45,TOM_L SLOT5=MT@47,TOM_M SLOT6=HT@50,TOM_H SLOT7=RD@51,RIDE SLOT8=CR@49,CRASH SLOT9=RM@37,RIM SLOT10=CL@39,CLAP SLOT11=PH@44,HH_PED
Tom은 High-Middle-Low로 그럴싸하게 배열해 놓았지만, 노트 번호를 미련하게 할당한 것이다. 원본 MIDI 파일에서는 노트 번호 43번으로 low tom(실은 high floor tom)이라고 기록되어 있었는데, 내가 쓰는 슬롯 정보에서는 이 번호가 슬그머니 사라진 것이었다.
Rack tom의 가장 낮은 것이라 해도 floor tom의 high보다는 높은 소리를 내는데, 타악기 명의 앞부분만 보고서 애초에 tom 할당 체계를 잘못 잡은 것이다. Nano Ardule 개발 당시에 만든 스크립트(adc-mid2report.py)를 고쳐서 모든 노트에 대한 분석을 해 보라고 하였다. 이 분석 작업에는 35개의 MIDI 드럼 패턴 파일이 투입되었다.
> python .\260728a_adc-mid2report.py ..\patterns\original-midi-files\
============================================================
Directory: ..\patterns\original-midi-files
MIDI files found: 35 processed: 35 errors: 0
============================================================
Note-On Frequencies (all channels, no grouping):
total note_on events: 13625
ch note count
10 36 3244
10 37 294
10 38 3009
10 39 84
10 42 4160
10 43 504
10 44 408
10 47 652
10 50 266
10 51 756
10 56 248
GM Drum Note Frequencies (channel 10, no grouping):
note GM instrument count percent
36 Bass Drum 1 3244 23.809%
37 Side Stick 294 2.158%
38 Acoustic Snare 3009 22.084%
39 Hand Clap 84 0.617%
42 Closed Hi-Hat 4160 30.532%
43 High Floor Tom 504 3.699%
44 Pedal Hi-Hat 408 2.994%
47 Low-Mid Tom 652 4.785%
50 High Tom 266 1.952%
51 Ride Cymbal 1 756 5.549%
56 Cowbell 248 1.820%
total: 13625
실제 데이터에서는 43(High Floor Tom)-47(Low-Mid Tom)-50(High Tom)을 tom 계열의 노트로 사용하고 있다. 그런데 내가 만든 slot 체계에서는 45(Low Tom)-47-50이었다. 널리 쓰이는 43번이 아예 사라지도록 잘못 설계한 것이다. 근거가 되었던 계산적 드럼 패턴학('computational drum patternology' - 아마도 내가 처음 쓰기 시작한 말)에서 잘못된 분석을 하는 바람에 tom의 대표음을 엉뚱하게 배치하는 결과를 초래하였다. 추상화(abstraction)과 정규화(normalization)를 제대로 하지 않는 값을 치르고 있는 셈이다.
올바른 계산적 드럼 패턴학을 위해서는 추상화를 통해 실제 악기의 사용 현황을 조사해야 한다. 그 다음에는 성격이 비슷한 악기를 그룹화한 다음, 정규화를 통해서 각 그룹에 대해 가장 대표성이 높은 악기를 대표 노트로 선택한다. 그런데 오늘의 분석 작업에서는 총 11개의 노트가 쓰였다. 즉, 12개라는 slot 제한을 초과하지 않았다. 따라서 악기를 그룹으로 묶거나 대표 노트를 고를 일도 없었던 것이다.
물론 앞으로 더 많은 데이터를 분석해 봐야 하겠지만, 오늘의 작업만으로도 실제 데이터가 어떤 경향이 있는지를 충분히 파악할 수 있었다.
과거의 잘못을 들추어냄에 따라서 해야 할 일도 많아졌다. Nano Ardule의 온갖 유틸리티 스크립트를 고쳐야 하고, ADT 안에 하드코딩되어 있던 슬롯 정보도 바꾸어야 하며, 패턴 이미지 파일도 개정하여 GitHub에 올려야 한다. 하지만 오늘이라도 알게 된 것이 어디인가?
음악과 관련한 취미 코딩을 하면서 추상화와 정규화를 실천하게 된 것을 다행으로 여겨야 하겠다. 음악, 납땜, 코딩, 데이터 분석... 겉으로 보기에 별로 관계가 없어 보이는 일들이 한데 어우려져서 뭔가 산출물을 만들어 내고 이와 더불어 조금씩 나아지고 있는 듯하다.
댓글 없음:
댓글 쓰기