drum_pattern_auto_slicing:merging_8.3_renaming
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| drum_pattern_auto_slicing:merging_8.3_renaming [2025/09/08 16:52] – hyjeong | drum_pattern_auto_slicing:merging_8.3_renaming [2025/12/18 08:59] (current) – removed hyjeong | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Drum Pattern Auto Slicing/ | ||
| - | ** 드럼 패턴 자동 분할·병합 및 8.3 리네이밍 ** | ||
| - | |||
| - | 이 문서는 인터넷에서 찾은 무료(?) 드럼 패턴 MIDI 파일을 2-/ | ||
| - | |||
| - | |||
| - | ===== 개요 (Overview) ===== | ||
| - | 이 문서는 업로드된 MIDI 드럼 패턴(표준 SMF)을 **2마디 단위로 자동 분할**하고, | ||
| - | * 적용 대상: 단일 파일(예: < | ||
| - | * 산출물 예: < | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===입력 (Inputs) ===== | ||
| - | * 표준 MIDI 파일(SMF0/ | ||
| - | * 파일명에 포함된 장르 힌트를 활용(예: < | ||
| - | |||
| - | ===출력 (Outputs) ===== | ||
| - | * 루프 재생 친화적인 **슬라이스**(2B 또는 4B) | ||
| - | * 각 슬라이스 시작에 **TimeSig (FF 58)**, **Tempo (FF 51)** 삽입 | ||
| - | * 슬라이스 끝에는 **All Notes Off 미삽입**(루프 자연스러움 유지) | ||
| - | * 8.3 규격 파일명으로 저장: < | ||
| - | * 배치 요약/ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====리 파이프라인 (Processing Pipeline) ===== | ||
| - | - **해제(Unzip)**: | ||
| - | - **파싱(Parse)**: | ||
| - | - **마디 경계 계산(Bar Bounds)**: < | ||
| - | - **2마디 윈도우 구성**: < | ||
| - | - **정확 일치 검사(Exact Match)**: 인접 2마디의 **드럼 NOTE-ON(채널, | ||
| - | - **슬라이스 기록(Write)**: | ||
| - | - **리네이밍(Naming)**: | ||
| - | - **일련번호 관리(Serials)**: | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====프-세이프(Loop-Safe) 내보내기 규칙 ===== | ||
| - | * **삽입**: 슬라이스 **시작 Tick**에만 < | ||
| - | * **제거/ | ||
| - | * 슬라이스 범위 내의 중간 < | ||
| - | * < | ||
| - | * **하지 않음**: 슬라이스 **끝에서 All Notes Off 전송 금지**(오픈 하이햇/ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====B→4B 병합 기준 ===== | ||
| - | * 동일성 정의(정확 매칭): 같은 드럼 채널(우선 ch10)의 **NOTE-ON 이벤트** | ||
| - | * 상대 Tick(슬라이스 시작 기준) | ||
| - | * 음높이(note number) | ||
| - | * 벨로시티(velocity) | ||
| - | 가 **완벽히 일치**해야 함 | ||
| - | * 위 조건으로 **바로 다음 2마디**가 동일하면 **4마디 슬라이스**로 병합 | ||
| - | * (옵션) 완화 가능: 벨로시티 무시, 서브틱 양자화 후 비교, 유사도 임계값 방식 등 | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 감지추론 로직 (Detection & Inference) == | ||
| - | === 드럼 채널 선택 === | ||
| - | * ch10(=9)이 존재하면 우선 | ||
| - | * 아니면 NOTE-ON 최다 채널 선택 | ||
| - | |||
| - | === 스윙/ | ||
| - | * 하이햇(42/ | ||
| - | * 판정: | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | |||
| - | === 장르/킷 추정 → G, K === | ||
| - | * 파일명 키워드로 1차 추정 | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | * 매칭 실패 → G=9 / K=X | ||
| - | |||
| - | ^ G ^ 장르(예) | ||
| - | | 2 | Rock/ | ||
| - | | 3 | HipHop/ | ||
| - | | 4 | Swing/ | ||
| - | | 5 | Latin(보사/ | ||
| - | | 6 | EDM(하우스/ | ||
| - | | 8 | Reggae/ | ||
| - | | 9 | 기타(Unknown/ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 8.3 파일명 규격 == | ||
| - | * **형식**: < | ||
| - | * **G**: 장르 코드(1자리 숫자) | ||
| - | * **ppp**: 장르별 일련번호(000–999) | ||
| - | * **L**: 루프 길이 마디수(2, | ||
| - | * **F**: 느낌 < | ||
| - | * **K**: 드럼 킷 < | ||
| - | * **V**: 버전(초기값 < | ||
| - | * 예: < | ||
| - | |||
| - | === 일련번호(ppp) 관리 === | ||
| - | * 생성 전, 결과 폴더 집합을 스캔해 **장르별 최대 ppp+1**을 시작값으로 사용 | ||
| - | * 같은 배치에서도 파일 간 순차 증가 → **충돌 없음** | ||
| - | * 스캔 대상(예): | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 폴더 구조 & 산출물 (Artifacts) == | ||
| - | * 대량 처리 예시 | ||
| - | * < | ||
| - | * < | ||
| - | * 각 배치에 대해 | ||
| - | * **Summary 표**: 소스별 2B/4B 개수, 첫 일련번호, | ||
| - | * **Details 표**: 슬라이스 파일명, 원본, 마디 범위, 경로 | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 의사코드 (Pseudocode) == | ||
| - | < | ||
| - | for each MIDI file: | ||
| - | parse header/ | ||
| - | bars = compute_bar_bounds(FF58, | ||
| - | drum_ch = choose_drum_channel() | ||
| - | F = detect_feel() | ||
| - | (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): | ||
| - | L = 4; write_slice(w1.start, | ||
| - | i += 2; continue | ||
| - | L = 2; write_slice(w1.start, | ||
| - | i += 1 | ||
| - | // write_slice inserts FF58/FF51 at start, drops mid FF58/ | ||
| - | // name as GpppLFKV.MID with per-genre serials | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 한계/ | ||
| - | * **정확 일치** 기준은 *양자화/ | ||
| - | * 옵션: 벨로시티 무시, 서브틱 양자화 후 비교, 코사인 유사도 기반 임계치 비교 | ||
| - | * 트랙에 드럼 외 채널 이벤트가 섞여 있어도 루프-세이프 규칙으로 대부분 안전하나, | ||
| - | * 2/4마디 외 8마디(8B) 자동 병합은 현재 OFF(확장 가능) | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 확장 옵션 (Recommended Options) == | ||
| - | * **중복 패턴 정리**: 동일 시그니처 슬라이스 중 대표만 보관 | ||
| - | * **하이햇 초크 삽입**: 루프 시작에 < | ||
| - | * **체인 파일(CHAINxx.CSV)** 자동 생성: 선호 슬라이스를 순서·반복수로 조합 | ||
| - | * **장르/ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 변경 이력 (Change Log) == | ||
| - | * 2025-09-08 (KST): 대량 배치(< | ||
| - | |||
| - | ---- | ||
| - | |||
| - | == 빠른 체크리스트 == | ||
| - | * [x] 2B 분할, 인접 2B **정확일치→4B 병합** | ||
| - | * [x] 시작에만 **FF58/ | ||
| - | * [x] **CC120/123 제거**, **SysEx/ | ||
| - | * [x] 파일명 < | ||
| - | * [x] 장르별 일련번호 **충돌 방지** | ||
| - | |||
| - | |||
drum_pattern_auto_slicing/merging_8.3_renaming.1757317933.txt.gz · Last modified: by hyjeong
