User Tools

Site Tools


drum_pattern_auto_slicing:merging_8.3_renaming

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
drum_pattern_auto_slicing:merging_8.3_renaming [2025/09/08 16:52] hyjeongdrum_pattern_auto_slicing:merging_8.3_renaming [2025/12/18 08:59] (current) – removed hyjeong
Line 1: Line 1:
-===== 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`)**으로 일괄 리네이밍하는 전 과정을 설명합니다.   
-* 적용 대상: 단일 파일(예: <code>6ROCK.MID</code>), 대량 ZIP(예: <code>260_patterns.zip</code>, <code>rap_patterns.zip</code>)   
-* 산출물 예: <code>/mnt/data/DRUM_MIX_FMT_260</code>, <code>/mnt/data/DRUM_MIX_FMT_RAP</code> 및 배치 ZIP 
- 
----- 
- 
-===입력 (Inputs) ===== 
-* 표준 MIDI 파일(SMF0/1)   
-* 파일명에 포함된 장르 힌트를 활용(예: <code>rock</code>, <code>bossa</code>, <code>trap</code> 등) 
- 
-===출력 (Outputs) ===== 
-* 루프 재생 친화적인 **슬라이스**(2B 또는 4B)   
-* 각 슬라이스 시작에 **TimeSig (FF 58)**, **Tempo (FF 51)** 삽입   
-* 슬라이스 끝에는 **All Notes Off 미삽입**(루프 자연스러움 유지)   
-* 8.3 규격 파일명으로 저장: <code>GpppLFKV.MID</code>   
-* 배치 요약/상세 표(표시용/CSV) 및 배치 ZIP 
- 
----- 
- 
-====리 파이프라인 (Processing Pipeline) ===== 
-  - **해제(Unzip)**: 업로드 ZIP을 작업 폴더에 전개   
-  - **파싱(Parse)**: SMF 헤더/트랙, 메타(템포/박자), 채널 이벤트 로드   
-  - **마디 경계 계산(Bar Bounds)**: <code>FF 58</code>(박자)와 division(TPQ)로 **마디 시작 Tick** 리스트 생성   
-  - **2마디 윈도우 구성**: <code>[bar i, bar i+2)</code> 범위를 슬라이스 후보로 열거   
-  - **정확 일치 검사(Exact Match)**: 인접 2마디의 **드럼 NOTE-ON(채널, 음높이, 벨로시티, 상대시각)** 시퀀스가 *완전히 동일*하면 4마디 병합   
-  - **슬라이스 기록(Write)**: 시작 시점에 **FF 58/FF 51**만 삽입, 본문 복사(아래 “루프-세이프 규칙”), 트랙 종료 메타 추가   
-  - **리네이밍(Naming)**: <code>GpppLFKV.MID</code> 스키마로 파일명 생성   
-  - **일련번호 관리(Serials)**: 장르별 글로벌 카운터 스캔/증분으로 **충돌 방지** 
- 
----- 
- 
-====프-세이프(Loop-Safe) 내보내기 규칙 ===== 
-* **삽입**: 슬라이스 **시작 Tick**에만 <code>FF 58</code>(박자), <code>FF 51</code>(템포)   
-* **제거/무시**: 
-  * 슬라이스 범위 내의 중간 <code>FF 58</code>, <code>FF 51</code>, <code>FF 2F</code>(EOT), **SysEx**는 복사하지 않음   
-  * <code>CC120</code>(All Sound Off), <code>CC123</code>(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)** 밀집도를 비교해 지표 산출   
-* 판정: 
-  * <code>W</code>: 스윙/셔플(트리플릿 오프비트 비중 높음)   
-  * <code>T</code>: 12/8·6/8 메타 또는 명백한 트리플릿 감   
-  * <code>E</code>: 그 외(스트레이트) 
- 
-=== 장르/킷 추정 → G, K === 
-* 파일명 키워드로 1차 추정   
-  * <code>rock|pop</code> → G=2 / K=S   
-  * <code>hip[-\s]?hop|hiphop|rap|boom\s?bap|trap</code> → G=3 / K=E   
-  * <code>blues|swing|shuffle|boogie|jazz</code> → G=4 / K=J   
-  * <code>cha[-\s]?cha|bossa|samba|latin|afro</code> → G=5 / K=L   
-  * <code>house|techno|disco|dnb|drum.?and.?bass</code> → G=6 / K=E   
-  * <code>reggae|dancehall</code> → 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 파일명 규격 == 
-* **형식**: <code>GpppLFKV.MID</code> (총 8자 + 확장자)   
-  * **G**: 장르 코드(1자리 숫자)   
-  * **ppp**: 장르별 일련번호(000–999)   
-  * **L**: 루프 길이 마디수(2, 4, 8…) — 본 작업에서는 **2** 또는 **4**   
-  * **F**: 느낌 <code>E</code>(Even), <code>W</code>(Swing), <code>T</code>(Triplet/12·8/6·8)   
-  * **K**: 드럼 킷 <code>S/J/L/E/X</code>   
-  * **V**: 버전(초기값 <code>A</code>)   
-* 예: <code>20012ESA.MID</code> → G=2(Rock/Pop), ppp=001, L=2bars, F=E, K=S, V=A 
- 
-=== 일련번호(ppp) 관리 === 
-* 생성 전, 결과 폴더 집합을 스캔해 **장르별 최대 ppp+1**을 시작값으로 사용   
-* 같은 배치에서도 파일 간 순차 증가 → **충돌 없음**   
-* 스캔 대상(예): <code>/mnt/data/DRUM_FMT</code>, <code>/mnt/data/DRUM_2B_FMT</code>, <code>/mnt/data/DRUM_MIX_FMT*</code> 
- 
----- 
- 
-== 폴더 구조 & 산출물 (Artifacts) == 
-* 대량 처리 예시   
-  * <code>260_patterns.zip</code> → <code>/mnt/data/DRUM_MIX_FMT_260</code> + <code>DRUM_MIX_FMT_260.zip</code>   
-  * <code>rap_patterns.zip</code> → <code>/mnt/data/DRUM_MIX_FMT_RAP</code> + <code>DRUM_MIX_FMT_RAP.zip</code>   
-* 각 배치에 대해   
-  * **Summary 표**: 소스별 2B/4B 개수, 첫 일련번호, 추정 장르/킷/느낌   
-  * **Details 표**: 슬라이스 파일명, 원본, 마디 범위, 경로 
- 
----- 
- 
-== 의사코드 (Pseudocode) == 
-<code> 
-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 
-</code> 
- 
----- 
- 
-== 한계/예외 (Limitations) == 
-* **정확 일치** 기준은 *양자화/스윙 변동*이 있는 경우 민감할 수 있음   
-  * 옵션: 벨로시티 무시, 서브틱 양자화 후 비교, 코사인 유사도 기반 임계치 비교   
-* 트랙에 드럼 외 채널 이벤트가 섞여 있어도 루프-세이프 규칙으로 대부분 안전하나, **특수 SysEx 기반 킷 전환**이 필요한 패턴은 제외됨   
-* 2/4마디 외 8마디(8B) 자동 병합은 현재 OFF(확장 가능) 
- 
----- 
- 
-== 확장 옵션 (Recommended Options) == 
-* **중복 패턴 정리**: 동일 시그니처 슬라이스 중 대표만 보관   
-* **하이햇 초크 삽입**: 루프 시작에 <code>NoteOn 42(Closed HH)</code> 짧게 추가(옵션)   
-* **체인 파일(CHAINxx.CSV)** 자동 생성: 선호 슬라이스를 순서·반복수로 조합   
-* **장르/킷 테이블 커스터마이즈**: Blues/Boogie 분리, 라틴(ChaCha/Bossa…) 세분화 
- 
----- 
- 
-== 변경 이력 (Change Log) == 
-* 2025-09-08 (KST): 대량 배치(<code>260_patterns.zip</code>, <code>rap_patterns.zip</code>) 처리. 초기 일련번호 스캔 정규식 보정 후 **장르별 글로벌 카운터** 도입. 루프-세이프 내보내기 규칙 확정. 
- 
----- 
- 
-== 빠른 체크리스트 == 
-* [x] 2B 분할, 인접 2B **정확일치→4B 병합**   
-* [x] 시작에만 **FF58/FF51**   
-* [x] **CC120/123 제거**, **SysEx/중간 FF58/51/EOT 미복사**   
-* [x] 파일명 <code>GpppLFKV.MID</code>(장르/일련/길이/느낌/킷/버전)   
-* [x] 장르별 일련번호 **충돌 방지** 
- 
- 
  
drum_pattern_auto_slicing/merging_8.3_renaming.1757317933.txt.gz · Last modified: by hyjeong