Ardule 드럼 패턴학 생태계에서 2마디 단위의 패턴(ADT 파일, v2.2a)을 조합하여 곡 단위의 arrangement file을 만들어 내도록 설계한 바 있다. 이를 ARR 파일이라 부르며, 초기 단계의 포맷(v0.05.2)을 공개한 상태이다. 다음은 샘플 ARR 파일의 사례이다. 순수한 텍스트 파일이라 사람의 눈으로 이해하기 쉬우며, 텍스트 편집기를 이용하여 직접 만들거나 수정해도 된다. ADT 파일을 텍스트로 설계한 것도 그러한 이유 때문이다. ARR에는 #PLAY 파트에서 섹션 정보가 포함되어 있다는 것이 특징이다. 여기에는 반복 정보도 담을 수 있다. 하지만 기계에는 반복 없이 체인 형태로 나열된 #MAIN 파트가 더욱 중요하다. 오늘 개발한 스크립트의 결과물에서는 이 파트 정보를 매우 중요하게 다룬다.
#COUNTIN CountIn_HH #SECTION section_1 1 3 #PLAY section_1 1 2 3 4 #ENDPLAY #APS ARR v0.05 BPM=110 1=RCK_P001.ADT 2=RCK_h901.ADT 3=RCK_h040.ADT 4=END_h007.ADT MAIN|1,2,3,1,2,3,4
ARR 파일은 라이브 연주를 할 때 Nano Ardule(아두이노 나노) 기기에서 재생할 파일을 만들기 위한 중간 단계의 파일이다. 최종 목표는 바이너리 스트림 파일인 ADS를 만드는 것이다.
A binary stream file is a file designed to be consumed sequentially, byte by byte, without random access assumptions.
여유로운 토요일을 맞이하여 ARR로부터 type 0 MIDI 파일을 만드는 스크립트 adc-arrtool.py(--format midi)를 개발하였다. ARR에서 의도한 바를 그대로 재생하는 MIDI 파일을 만드는 일이 그렇게 쉽지는 않았다. 이 스크립트에는 옵션이 별로 필요하지 않을 것이라고 생각하였는데 챗GPT는 아주 세심하게 모든 상황에 맞추어 옵션을 준비해 놓았다. 입력물인 ARR 파일에 카운트인이나 템포 정보가 있어도 출력 파일에서는 이를 다르게 지정하는 것이 가능하다.
usage: adc-arrtool.py [-h] [--format {midi,ads,both}] [--out OUT] [--patterns-dir PATTERNS_DIR] [--bpm BPM]
[--ppq PPQ] [--velocity-map VELOCITY_MAP] [--drum-ch DRUM_CH] [--gate GATE] [--with-countin]
[--no-countin] [--countin COUNTIN] [--strict]
arr
Convert APS ARR to MIDI Type 0 and/or ADS (simple stream). MAIN chain is required.
positional arguments:
arr Input .ARR file path
options:
-h, --help show this help message and exit
--format {midi,ads,both}
Output format (default: midi)
--out OUT Output file path or output directory (default: beside ARR)
--patterns-dir PATTERNS_DIR
ADT patterns directory (default: ./patterns, fallback: <ARR dir>/patterns)
--bpm BPM Override BPM (default: use BPM from ARR)
--ppq PPQ MIDI ticks per beat (default: 480)
--velocity-map VELOCITY_MAP
ADT level(0..3)->MIDI velocity, e.g. 0,40,80,110
--drum-ch DRUM_CH MIDI drum channel 1..16 (default: 10)
--gate GATE Note gate ratio within a step (default: 0.5)
--with-countin Include ARR #COUNTIN pattern at the beginning (default)
--no-countin Do not include ARR #COUNTIN pattern
--countin COUNTIN Override count-in pattern (name or .ADT filename). Overrides ARR #COUNTIN
--strict Fail if any referenced pattern file is missing
위에서 소개한 ARR 파일을 MIDI 파일로 전환한 뒤 MidiEditor에서 재생해 보았다. ARR 파일이 갖고 있는 카운트인을 html-midi-player에서는 제대로 표시하지 못하였다. 이를 해결하기 위해 첫 노트-온 이벤트를 tick = 0이 아니라 1에서 시작하게 만들었다. 이런한 꼼수를 부리지 않아도 MidiEditor에서는 잘 작동한다.
아두이노 나노 구동용 펌웨어에서는 아직 ADS를 수용할 준비가 되지 않았다. 작년 12월부터는 APS(Ardule Pattern Studio)를 개발하는 것에 집중하였었는데, 이제는 다시 아두이노로 돌아가야 한다. 아울러서 APS 매뉴얼(초안)을 완성하고, 가능하다면 비디오 튜토리얼을 만들어서 유튜브에 올리고 싶다. 매뉴얼에는 패턴 체인 편집 기능(이것을 저장하면 ARR이 됨)만 설명하면 된다. 문서화된 매뉴얼은 동영상 튜토리얼 제작 시 아주 요긴한 자료가 될 것이다.
2026년 1월 11일 업데이트
adc-arrtool.py는 MetaTime 원칙 수립과 더불어 큰 수정을 거쳤다. 오늘 작성했던 박자에 매여 있던 드럼 패턴이 어떻게 자유로워졌나와 일맥상통하는 이 원칙은 다음과 같이 정의된다.
- 시간 구조는 메타데이터로부터 계산된다.
- (패턴)Length는 저장 크기이지 재생 길이가 아니다.
- 박자는 사람을 위한 설명 정보다
- Grid는 시간 분해능일 뿐, 음악적 특권(authority)을 갖지 않는다.
- 카운트인은 음악이 아닌 메타 도입부다.
- 메타는 존중하되, 명시적 오버라이드는 허용한다.
여기에서 말하는 특권이란 권위나 위세라는 뜻은 아니다. 개발 또는 설계 문맥에서는 '최종 판단의 근거가 되는 출처 / 결정권이 귀속된 기준'이라는 의미를 갖는다. 챗GTP와 더불어 설계를 하면서 이러한 영어식 표현이 자꾸 침투함을 느낀다. 영어 자료를 통해 만들어진 인공지능 모델의 영향력이 너무 크다는 뜻이다.
나의 Ardule 드럼 생태계에서 authority라는 낱말의 사용례를 찾아 본다면...
ARR is the authority for tempo and structure.
CLI overrides metadata as the final authority.
개발이나 설계 맥락에서 authority와 정확히 대응하는 개념이 한국어에는 없다. 그래서 영어권 기술 생태계에서 만들어진 사고 구조가 언어와 더불어 유입될 수밖에 없다. 어떤 개념이 영어권에는 있지만 한국어권에는 없다 - 매우 안타까운 현실이다. 이러한 상황이 반복될 때마다 국어가 영어와 비교하여 부족한 점이 많다는 생각을 갖기 쉬워지기 때문이다.
댓글 없음:
댓글 쓰기