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/09/08 18:01] (current) – [Drum Pattern Auto Slicing/Merging & 8.3 Renaming] hyjeong
Line 1: Line 1:
-===== Drum Pattern Auto Slicing/Merging & 8.3 Renaming =====+====== Drum Pattern Auto Slicing/Merging & 8.3 Renaming ======
 ** 드럼 패턴 자동 분할·병합 및 8.3 리네이밍 ** ** 드럼 패턴 자동 분할·병합 및 8.3 리네이밍 **
  
-이 문서는 인터넷에서 찾은 무료(?) 드럼 패턴 MIDI 파일을 2-/4-마디로 분할하여 자동으로 이름을 붙이는 챗GPT 작업을 설명하기 위한 것이다. Ardule의 드럼 플레이어 기능에서 마이크로SD카드에 저장한 패턴을 불러들여 재생하기 위한 사전 작업이다.+이 문서는 인터넷에서 찾은 무료(?) 드럼 패턴 MIDI 파일([[https://discuss.cakewalk.com/topic/648-460-free-gm-midi-drum-patterns/|460 Free GM MIDI drum patterns]])을 2-/4-마디로 분할하여 자동으로 이름을 붙이는 챗GPT 작업을 설명하기 위한 것이다. Ardule의 드럼 플레이어 기능에서 마이크로SD카드에 저장한 패턴을 불러들여 재생하기 위한 사전 작업이다.
  
 +이 MIDI file을 나는 2024년쯤 운좋게 다운로드하였지만 이제 링크가 더 이상 유효하지 않다. [[https://cifkao.github.io/html-midi-player/|html-midi-player]]라는 훌륭한 도구가 있어서 MIDI file을 웹브라우저에서 소리와 눈으로 편리하게 확인할 수 있었다.
  
-===== 개요 (Overview) ===== +전체 문서: {{:drum_pattern_auto_slicing:drum_pattern_slicing_guide.docx|}}
-이 문서는 업로드된 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 드럼 패턴을 자동으로 2마디 단위 분할, 인접 2마디가 완전 동하면 4마디로 병합, 그리고 **8.3 규칙(GpppLFKV.MID)**으로 일괄 리네이밍. 
-표준 MIDI 일(SMF0/1)   +  * 입력/출력 
-* 파일명에 포함된 장르 힌트를 활용(예: <code>rock</code>, <code>bossa</code>, <code>trap</code> 등) +    입력: SMF0/1 MIDI, 파일명에 장르 힌트 활용. 
- +    출력루프 친화 슬라이스(2B/4B)시작에 FF58(박자)/FF51(템포) 삽입8.3 파일명 저장배치 요약/상세 표와 ZIP. 
-===출력 (Outputs) ===== +  * 루프-세이프 규칙 
-루프 재생 친화적인 **슬라이스**(2B 또는 4B)   +    * 슬라이스 시작에만 FF58/FF51. 
-* 각 슬라이스 시작에 **TimeSig (FF 58)**, **Tempo (FF 51)** 삽입   +    * 범위 내 중간 FF58/FF51/EOT(SysEx 포함복사CC120/123(사운드/노트오프) 제거. 
-* 슬라이스 끝에는 **All Notes Off 미삽입**(루프 자연스러움 유지)   +    * 끝에서는 All Notes Off 전송(루프 경계 자연스러움 유지). 
-8.3 규격 파일명으로 저장: <code>GpppLFKV.MID</code>   +  병합 기준(2B→4B) 
-배치 요약/상세 표(표시용/CSV) 및 배치 ZIP +    * 드럼 채널(우선 ch10)의 NOTE-ON 이벤트가 상대틱·노트번호·벨로시티까지 100% 일치하면 바로 다음 2마디와 병합. 
- +    마디 경계 계산FF58과 TPQ로 마디 작 tick 산출 → [bar ii+2) 윈로 슬라이스 후보 생성. 
----- +    드럼 채널 선택ch10이 있으면 우선, 없으면 NOTE-ON 최다 채널. 
- +    * 느낌(F) 판정: 하이햇(42/44/46)의 오프비트 분포로 E(스트레이트)/W(스윙)/T(트리플릿·12/8·6/8) 추정. 
-====리 파이프라인 (Processing Pipeline) ===== +    * 장르/킷 추정(G,K): 파일명 키워드로 매핑(예: rock/pop→G=2,K=S hiphop/rap/trap→G=3,K=E swing/blues→G=4,K=J latin→G=5,K=L … 실패 시 G=9,K=X). 
-  **해제(Unzip)**: 업로드 ZIP을 작업 폴더에 전개   +    파일명 스키마(8.3): GpppLFKV.MID 
-  - **파싱(Parse)**: SMF 헤더/트랙, 메타(템포/박자), 채널 이벤트 로드   +      * G=장르(1), ppp=장르별 일련번호(000–999), L=마디수(2/4), F=E/W/T, K=S/J/L/E/X, V=버전(A). 
-  - **마디 경계 계산(Bar Bounds)**: <code>FF 58</code>(박자)와 division(TPQ)로 **마디 시작 Tick** 리스트 생성   +      * 장르별 전역 카운터로 ppp 충돌 방지(기존 결과 폴더 스캔 후 이어붙임). 
-  - **2마디 윈도우 구성**: <code>[bar i, bar i+2)</code> 범위를 슬라이스 후보로 열거   +    * 산출물 구조: 배치별 결과 폴더 + ZIP, Summary(소스별 2B/4B 개수·첫 일련번호·장르/킷/느낌)와 Details(파일명·원본·마디 범위·경로제공. 
-  - **정확 일치 검사(Exact Match)**: 인접 2마디의 **드럼 NOTE-ON(채널, 음높이, 벨로시티, 상대시각)** 시퀀스가 *완전히 동일*하면 4마디 병합   +  * 제약/확장 
-  - **슬라이스 기록(Write)**: 시작 시점에 **FF 58/FF 51**만 삽입, 본문 복사(아래 “루프-세이프 규칙”), 트랙 종료 메타 추가   +    * 정확 일치 기준은 미세 타이밍/윙 변동에 민감 → 옵션으로 벨로시티 무시/양자화/유사도 임계치 적용 가능. 
-  **리네이밍(Naming)**: <code>GpppLFKV.MID</code> 스키마로 파일명 생성   +    8마디 자동 병합은 기본 OFF(확장 가능). 
-  - **일련번호 관리(Serials)**: 장르별 글로벌 카운터 스캔/증분으로 **충돌 방지** +    * 선택 옵션: 하이햇 초크 이벤트 삽입, 중복 패턴 정리, 체인 파일(CHAINxx.CSV생성, 장르·킷 테이블 커스터마이즈. 
- +===== 8.3 파일명 규격 ===== 
----- +  * **형식**: GpppLFKV.MID (총 8자 + 확장자)  
- +
-====프-세이프(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 최다 채널 선택 +
- +
-=== 스윙/트리플릿 감지 → === +
-하이햇(42/44/46)의 **1/2 박** vs **3연음 2번째(≈2/3)** 밀집도를 비교해 지표 산출   +
-* 판정: +
-  * <code>W</code>: 스윙/셔플(트리플릿 오프비트 비중 높음)   +
-  * <code>T</code>: 12/8·6/메타 또는 명백한 트리플릿 감   +
-  <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=/ K=E   +
-  매칭 실패 → G=9 / K=X +
- +
-^ G ^ 장르(                  ^ 기본 킷(K+
-| Rock/Pop                   | S (Standard+
-| 3 | HipHop/Funk(랩/트랩 등)    | E (Electronic| +
-| 4 | Swing/Shuffle/Blues        | J (Jazz| +
-| 5 | Latin(보사/삼바/차차…     | L (Latin| +
-| 6 | EDM(하우스/테크노/디스코)   | E (Electronic) | +
-| Reggae/Dancehall           | E (Electronic| +
-| 9 | 기타(Unknown/Other       | X | +
- +
----- +
- +
-== 8.3 파일명 규격 == +
-* **형식**: <code>GpppLFKV.MID</code> (총 8자 + 확장자)  +
   * **G**: 장르 코드(1자리 숫자)     * **G**: 장르 코드(1자리 숫자)  
   * **ppp**: 장르별 일련번호(000–999)     * **ppp**: 장르별 일련번호(000–999)  
   * **L**: 루프 길이 마디수(2, 4, 8…) — 본 작업에서는 **2** 또는 **4**     * **L**: 루프 길이 마디수(2, 4, 8…) — 본 작업에서는 **2** 또는 **4**  
-  * **F**: 느낌 <code>E</code>(Even), <code>W</code>(Swing), <code>T</code>(Triplet/12·8/6·8)   +  * **F**: 느낌 E(Even), W(Swing), T(Triplet/12·8/6·8)   
-  * **K**: 드럼 킷 <code>S/J/L/E/X</code>   +  * **K**: 드럼 킷 S(Standard)/J(Jazz)/L(Latin/World)/E(Electronic)/X(Unknown/Neutral) 
-  * **V**: 버전(초기값 <code>A</code>)   +  * **V**: 버전(초기값 A)   
-* 예: <code>20012ESA.MID</code> → G=2(Rock/Pop), ppp=001, L=2bars, F=E, K=S, V=A +* 예: 20012ESA.MID → 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