This is an old revision of the document!
Table of Contents
Drum Pattern Auto Slicing/Merging & 8.3 Renaming
드럼 패턴 자동 분할·병합 및 8.3 리네이밍
이 문서는 인터넷에서 찾은 무료(?) 드럼 패턴 MIDI 파일을 2-/4-마디로 분할하여 자동으로 이름을 붙이는 챗GPT 작업을 설명하기 위한 것이다. Ardule의 드럼 플레이어 기능에서 마이크로SD카드에 저장한 패턴을 불러들여 재생하기 위한 사전 작업이다.
개요 (Overview)
이 문서는 업로드된 MIDI 드럼 패턴(표준 SMF)을 2마디 단위로 자동 분할하고, 인접 2마디가 100% 동일하면 4마디로 병합한 뒤, 합의한 8.3 파일명 규격(`GpppLFKV.MID`)으로 일괄 리네이밍하는 전 과정을 설명합니다. * 적용 대상: 단일 파일(예:
6ROCK.MID
), 대량 ZIP(예:
260_patterns.zip
,
rap_patterns.zip
) * 산출물 예:
/mnt/data/DRUM_MIX_FMT_260
,
/mnt/data/DRUM_MIX_FMT_RAP
및 배치 ZIP
입력 (Inputs)
* 표준 MIDI 파일(SMF0/1) * 파일명에 포함된 장르 힌트를 활용(예:
rock
,
bossa
,
trap
등)
출력 (Outputs)
* 루프 재생 친화적인 슬라이스(2B 또는 4B) * 각 슬라이스 시작에 TimeSig (FF 58), Tempo (FF 51) 삽입 * 슬라이스 끝에는 All Notes Off 미삽입(루프 자연스러움 유지) * 8.3 규격 파일명으로 저장:
GpppLFKV.MID
* 배치 요약/상세 표(표시용/CSV) 및 배치 ZIP
리 파이프라인 (Processing Pipeline)
- 해제(Unzip): 업로드 ZIP을 작업 폴더에 전개
- 파싱(Parse): SMF 헤더/트랙, 메타(템포/박자), 채널 이벤트 로드
- 마디 경계 계산(Bar Bounds):
FF 58
(박자)와 division(TPQ)로 마디 시작 Tick 리스트 생성
- 2마디 윈도우 구성:
[bar i, bar i+2)
범위를 슬라이스 후보로 열거
- 정확 일치 검사(Exact Match): 인접 2마디의 드럼 NOTE-ON(채널, 음높이, 벨로시티, 상대시각) 시퀀스가 *완전히 동일*하면 4마디 병합
- 슬라이스 기록(Write): 시작 시점에 FF 58/FF 51만 삽입, 본문 복사(아래 “루프-세이프 규칙”), 트랙 종료 메타 추가
- 리네이밍(Naming):
GpppLFKV.MID
스키마로 파일명 생성
- 일련번호 관리(Serials): 장르별 글로벌 카운터 스캔/증분으로 충돌 방지
프-세이프(Loop-Safe) 내보내기 규칙
* 삽입: 슬라이스 시작 Tick에만
FF 58
(박자),
FF 51
(템포) * 제거/무시:
- 슬라이스 범위 내의 중간
FF 58
,
FF 51
,
FF 2F
(EOT), SysEx는 복사하지 않음
CC120
(All Sound Off),
CC123
(All Notes Off) 이벤트는 삭제
* 하지 않음: 슬라이스 끝에서 All Notes Off 전송 금지(오픈 하이햇/잔향 자연 유지)
B→4B 병합 기준
* 동일성 정의(정확 매칭): 같은 드럼 채널(우선 ch10)의 NOTE-ON 이벤트
- 상대 Tick(슬라이스 시작 기준)
- 음높이(note number)
- 벨로시티(velocity)
가 완벽히 일치해야 함 * 위 조건으로 바로 다음 2마디가 동일하면 4마디 슬라이스로 병합 * (옵션) 완화 가능: 벨로시티 무시, 서브틱 양자화 후 비교, 유사도 임계값 방식 등
감지추론 로직 (Detection & Inference)
드럼 채널 선택
* ch10(=9)이 존재하면 우선 * 아니면 NOTE-ON 최다 채널 선택
스윙/트리플릿 감지 → F
* 하이햇(42/44/46)의 1/2 박 vs 3연음 2번째(≈2/3) 밀집도를 비교해 지표 산출 * 판정:
W
: 스윙/셔플(트리플릿 오프비트 비중 높음)
T
: 12/8·6/8 메타 또는 명백한 트리플릿 감
E
: 그 외(스트레이트)
장르/킷 추정 → G, K
* 파일명 키워드로 1차 추정
rock|pop
→ G=2 / K=S
hip[-\s]?hop|hiphop|rap|boom\s?bap|trap
→ G=3 / K=E
blues|swing|shuffle|boogie|jazz
→ G=4 / K=J
cha[-\s]?cha|bossa|samba|latin|afro
→ G=5 / K=L
house|techno|disco|dnb|drum.?and.?bass
→ G=6 / K=E
reggae|dancehall
→ G=8 / K=E
- 매칭 실패 → G=9 / K=X
G | 장르(예) | 기본 킷(K) |
---|---|---|
2 | Rock/Pop | S (Standard) |
3 | HipHop/Funk(랩/트랩 등) | E (Electronic) |
4 | Swing/Shuffle/Blues | J (Jazz) |
5 | Latin(보사/삼바/차차…) | L (Latin) |
6 | EDM(하우스/테크노/디스코) | E (Electronic) |
8 | Reggae/Dancehall | E (Electronic) |
9 | 기타(Unknown/Other) | X |
8.3 파일명 규격
* 형식:
GpppLFKV.MID
(총 8자 + 확장자)
- G: 장르 코드(1자리 숫자)
- ppp: 장르별 일련번호(000–999)
- L: 루프 길이 마디수(2, 4, 8…) — 본 작업에서는 2 또는 4
- F: 느낌
E
(Even),
W
(Swing),
T
(Triplet/12·8/6·8)
- K: 드럼 킷
S/J/L/E/X
- V: 버전(초기값
A
)
* 예:
20012ESA.MID
→ G=2(Rock/Pop), ppp=001, L=2bars, F=E, K=S, V=A
일련번호(ppp) 관리
* 생성 전, 결과 폴더 집합을 스캔해 장르별 최대 ppp+1을 시작값으로 사용 * 같은 배치에서도 파일 간 순차 증가 → 충돌 없음 * 스캔 대상(예):
/mnt/data/DRUM_FMT
,
/mnt/data/DRUM_2B_FMT
,
/mnt/data/DRUM_MIX_FMT*
등
폴더 구조 & 산출물 (Artifacts)
* 대량 처리 예시
260_patterns.zip
→
/mnt/data/DRUM_MIX_FMT_260
+
DRUM_MIX_FMT_260.zip
rap_patterns.zip
→
/mnt/data/DRUM_MIX_FMT_RAP
+
DRUM_MIX_FMT_RAP.zip
* 각 배치에 대해
- Summary 표: 소스별 2B/4B 개수, 첫 일련번호, 추정 장르/킷/느낌
- Details 표: 슬라이스 파일명, 원본, 마디 범위, 경로
의사코드 (Pseudocode)
for each MIDI file: parse header/tracks bars = compute_bar_bounds(FF58, TPQ) drum_ch = choose_drum_channel() F = detect_feel() // E/W/T (G, K) = infer_genre_from_title() i = 0 while i < num_2bar_windows: w1 = [bars[i], bars[i+2]) if i+1 < num_2bar_windows: w2 = [bars[i+2], bars[i+4]) if signature(w1) == signature(w2): // NOTE-ON tick/note/vel exact L = 4; write_slice(w1.start, w2.end) i += 2; continue L = 2; write_slice(w1.start, w1.end) i += 1 // write_slice inserts FF58/FF51 at start, drops mid FF58/FF51/EOT/SysEx, strips CC120/123 // name as GpppLFKV.MID with per-genre serials
한계/예외 (Limitations)
* 정확 일치 기준은 *양자화/스윙 변동*이 있는 경우 민감할 수 있음
- 옵션: 벨로시티 무시, 서브틱 양자화 후 비교, 코사인 유사도 기반 임계치 비교
* 트랙에 드럼 외 채널 이벤트가 섞여 있어도 루프-세이프 규칙으로 대부분 안전하나, 특수 SysEx 기반 킷 전환이 필요한 패턴은 제외됨 * 2/4마디 외 8마디(8B) 자동 병합은 현재 OFF(확장 가능)
확장 옵션 (Recommended Options)
* 중복 패턴 정리: 동일 시그니처 슬라이스 중 대표만 보관 * 하이햇 초크 삽입: 루프 시작에
NoteOn 42(Closed HH)
짧게 추가(옵션) * 체인 파일(CHAINxx.CSV) 자동 생성: 선호 슬라이스를 순서·반복수로 조합 * 장르/킷 테이블 커스터마이즈: Blues/Boogie 분리, 라틴(ChaCha/Bossa…) 세분화
변경 이력 (Change Log)
* 2025-09-08 (KST): 대량 배치(
260_patterns.zip
,
rap_patterns.zip
) 처리. 초기 일련번호 스캔 정규식 보정 후 장르별 글로벌 카운터 도입. 루프-세이프 내보내기 규칙 확정.
빠른 체크리스트
* [x] 2B 분할, 인접 2B 정확일치→4B 병합 * [x] 시작에만 FF58/FF51 * [x] CC120/123 제거, SysEx/중간 FF58/51/EOT 미복사 * [x] 파일명
GpppLFKV.MID
(장르/일련/길이/느낌/킷/버전) * [x] 장르별 일련번호 충돌 방지