User Tools

Site Tools


nano_ardule_midi_controller:adt_v2.2

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
nano_ardule_midi_controller:adt_v2.2 [2025/11/23 19:35] – [1. 사전 분석] hyjeongnano_ardule_midi_controller:adt_v2.2 [2025/11/23 23:13] (current) – [2. Type 0 MIDI 파일을 2 bar 단위로 분할] hyjeong
Line 307: Line 307:
 </code> </code>
 출력된 결과 샘플: {{ :nano_ardule_midi_controller:analysis.pdf |}} 출력된 결과 샘플: {{ :nano_ardule_midi_controller:analysis.pdf |}}
 +</code>
 +
 +Triplet 여부도 이 스크립트를 통해서 판별할 수 있다.
 +<code>
 +grid                  : triplet  (triplet_hit=1.0, straight_hit=1.0)
 </code> </code>
  
Line 323: Line 328:
 } | Sort-Object Grid, File | Export-Csv mid_triplet_report.csv -NoTypeInformation } | Sort-Object Grid, File | Export-Csv mid_triplet_report.csv -NoTypeInformation
 </code> </code>
-===== (optional) type 1 -> type 0 MIDI file로 전환 ===== +
-**mid_check.py**를 이용한다. 이 스크립트는 폴더 단위로 작동함에 유의하라.+
 ===== 2. Type 0 MIDI 파일을 2 bar 단위로 분할 ===== ===== 2. Type 0 MIDI 파일을 2 bar 단위로 분할 =====
-다음은 .MID 파일이 위치한 폴더에서 실행하는 사례이다. 패턴의 유사도를 측정하는 일은 제법 까다롭다. 나의 경우는 곡 전체의 드럼 패턴을 연구하는 것이 아니라 재사용 목적으로 배포(?)된 드럼 패턴을 연구하는 것이라서 인접한 패턴이 유사한지를 확인하는 것에 중점을 두었다. 모든 패턴 간 pair-wise 비교는 화면 출력에 매트릭스 형태로 주어진다. 
-<code> 
-> python.exe ..\tools\split_drums_2bar_save.py .\Blues10.mid --export-grid 
-Saved: BLU_P001.MID 
-Saved: BLU_P002.MID 
-Saved: BLU_P003.MID 
-Saved: BLU_P004.MID 
-Saved: BLU_P005.MID 
-Saved: BLU_P006.MID 
  
-=== Pattern extraction report for Blues10.mid === +ADT 파일을 만드는 가장 중요한 입력물인 2-bar pattern을 만드는 것은 **split_drums_2bar_save.py**이다본격적으로 MIDI 파일을 분할하기 전, %%--%%print-genre-only 옵션을 주면 원본 .MID 파일의 이름으로부터 장르를 유추한 뒤 다음과 같이 패턴명에 삽입할 수 있는 3글자 약자를 만든다. 장르 매핑 정보는 지금도 계속 업데이트 중이다. 지나치게 세분화하는 것은 좋지 않을 것이다.
-Ticks per beat      : 480 +
-Initial time sig    : 4/4 +
-Bar ticks           : 1920 +
-Total ticks         : 30722 +
-Total bars (floor)  : 16 +
-Used bars (2-bar xN): 16 +
-Dropped full bars   : 0 +
-Tail remainder      : 2 ticks beyond full bars +
-Similarity threshold: 80.0% (hybrid; global min 35.0%)+
  
-- Note: A partial tail after bar 16 was ignored. 
  
-Unique pattern groups: 6 +^ 코드 ^ 매칭 키워드 (파일명 내) ^ 장르 풀네임 ^ 
-Group -> Output file: +| RCK | rock | Rock | 
-  1: BLU_P001.MID +| BOS | bossa, bossanova | Bossa Nova | 
-  2: BLU_P002.MID +| FNK | funk | Funk | 
-  3: BLU_P003.MID +| JZZ | jazz | Jazz | 
-  4: BLU_P004.MID +| BLU | blues, blue | Blues | 
-  5: BLU_P005.MID +| LAT | latin | Latin | 
-  6BLU_P006.MID+| SMB | samba | Samba | 
 +| WLZ | waltz, wlz | Waltz | 
 +| SWG | swing, swg | Swing | 
 +| SHF | shuffle, shf | Shuffle | 
 +| REG | reggae | Reggae | 
 +| MTL | metal | Metal | 
 +| HHP | hip hop, hip-hop, hiphop, hhp | Hip Hop | 
 +| HSE | house, hse | House | 
 +| TNO | techno, tno | Techno | 
 +| DRM | (기본값어떤 키워드에도 매칭되지 않을 때) | Generic Drum / Default |
  
-Pattern classification vs group 1 (assumed main GROOVE): +<code> 
-  Group 1: GROOVE +> python.exe ..\tools\split_drums_2bar_save.py .\2BALLAD.MID --print-genre-only 
-  Group 2GROOVE +[GENRE] Inferred from filename '2BALLAD.MID' BAL 
-  Group 3: GROOVE +</code>
-  Group 4: GROOVE +
-  Group 5: GROOVE +
-  Group 6: GROOVE+
  
-Pattern chain by 2-bar slices (group IDs, '*' = adjacent structurally similar): +실제 분할 작업에 들어가 보자. 기본 동작은 덮어쓰기이므로 동일 장르에 대하여 새로 만들어지는 패턴 번호를 지정하려면 %%--%%start START로 인덱스 번호를 주어야 한다. 장르 또한 자동 검출이 기본이나 지정해도 된다. 한 파일을 분할하여 만들어지는 모든 패턴은 동일한 장르가 된다.  
-  1*-2**-3**-4**-5**-6*-6-6+
  
-Slice details (index: bar_start -group_id[mark]): +<code
-  slice 00: bar 01 -1*  [GROOVE] +python.exe ..\tools\split_drums_2bar_save.py .\2BALLAD.MID --export-grid --grid-pdf 
-  slice 01: bar 03 -> 2**  [GROOVE] +Genre inferred from filenameBAL
-  slice 02: bar 05 -> 3**  [GROOVE] +
-  slice 03: bar 07 -> 4**  [GROOVE] +
-  slice 04: bar 09 -> 5**  [GROOVE] +
-  slice 05: bar 11 -> 6*  [GROOVE] +
-  slice 06: bar 13 -> 6  [GROOVE] +
-  slice 07bar 15 -> 6  [GROOVE]+
  
-Neighbor similarity details (adjacent slices, hybrid): +=== 2-bar slicing report for 2BALLAD.MID === 
-  slices 00-01  groups 1-2  global99.9%  head99.9%  tail99.9%  mid_run= 50.0% +Ticks per beat      : 240 
-  slices 01-02  groups 2-3  global= 99.9%  head99.9%  tail99.9%  mid_run50.0% +Initial time sig    : 4/
-  slices 02-03  groups 3-4  global= 99.7%  head= 99.9%  tail= 99.5%  mid_run= 45.8% +Bar ticks           : 960 
-  slices 03-04  groups 4-5  global= 99.4%  head= 99.4%  tail= 99.4%  mid_run=  4.1% +Total ticks         : 28800 
-  slices 04-05  groups 5-6  global=100.0%  head= 99.9%  tail=100.0%  mid_run=100.0% +Total bars (floor 30 
- +Used bars (2-bar xN): 30 
-Similarity matrix between pattern groups (global %, '*' = hybrid-similar >= threshold): +Dropped full bars   
-                           4      5      6 +Tail remainder      : ticks beyond full bars
-   1  100.  99.9* 100.0*  99.7*  99.4*  99.4* +
-   2   99.9* 100.0   99.9*  99.7*  99.4*  99.4* +
-    100.0*  99.9* 100.0   99.7*  99.4*  99.4* +
-     99.7*  99.7*  99.7* 100.0   99.4*  99.4* +
-     99.4*  99.4*  99.4*  99.4* 100.0  100.0* +
-     99.4*  99.4*  99.4*  99.4* 100.0* 100.0+
  
-Exporting grid PNGs for each pattern group... +Saved slice 0 (bars 1-2) -> BAL_P001.MID 
-Grid PNG saved: BLU_P001_grid.png +Grid PNG saved: BAL_P001_grid.png 
-Grid PNG saved: BLU_P002_grid.png +Saved slice 1 (bars 3-4) -> BAL_P002.MID 
-Grid PNG saved: BLU_P003_grid.png +Grid PNG saved: BAL_P002_grid.png 
-Grid PNG saved: BLU_P004_grid.png +Saved slice 2 (bars 5-6) -> BAL_P003.MID 
-Grid PNG saved: BLU_P005_grid.png +Grid PNG saved: BAL_P003_grid.png 
-Grid PNG saved: BLU_P006_grid.png+Saved slice 3 (bars 7-8) -> BAL_P004.MID 
 +Grid PNG saved: BAL_P004_grid.png 
 +Saved slice 4 (bars 9-10) -> BAL_P005.MID 
 +Grid PNG saved: BAL_P005_grid.png 
 +Saved slice 5 (bars 11-12) -> BAL_P006.MID 
 +Grid PNG saved: BAL_P006_grid.png 
 +Saved slice 6 (bars 13-14) -> BAL_P007.MID 
 +Grid PNG saved: BAL_P007_grid.png 
 +Saved slice 7 (bars 15-16) -> BAL_P008.MID 
 +Grid PNG saved: BAL_P008_grid.png 
 +Saved slice 8 (bars 17-18) -> BAL_P009.MID 
 +Grid PNG saved: BAL_P009_grid.png 
 +Saved slice 9 (bars 19-20) -> BAL_P010.MID 
 +Grid PNG saved: BAL_P010_grid.png 
 +Saved slice 10 (bars 21-22) -> BAL_P011.MID 
 +Grid PNG saved: BAL_P011_grid.png 
 +Saved slice 11 (bars 23-24) -> BAL_P012.MID 
 +Grid PNG saved: BAL_P012_grid.png 
 +Saved slice 12 (bars 25-26) -> BAL_P013.MID 
 +Grid PNG saved: BAL_P013_grid.png 
 +Saved slice 13 (bars 27-28) -> BAL_P014.MID 
 +Grid PNG saved: BAL_P014_grid.png 
 +Saved slice 14 (bars 29-30) -> BAL_P015.MID 
 +Grid PNG saved: BAL_P015_grid.png 
 +[grid-pdf] Saved high-res two-column PDF: BAL_grids_A4_2col_big.pdf 
 +[grid-pdf] Running Ghostscript for A4 resize: 
 +          C:\Program Files\gs\gs10.06.0\bin\gswin64c.EXE -sDEVICE=pdfwrite -o BAL_grids_A4_2col.pdf -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 -dFIXEDMEDIA -dPDFFitPage -dNOPAUSE -dBATCH BAL_grids_A4_2col_big.pdf 
 +GPL Ghostscript 10.06.0 (2025-09-09) 
 +Copyright (C) 2025 Artifex Software, Inc.  All rights reserved. 
 +This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY: 
 +see the file COPYING for details. 
 +Processing pages 1 through 2. 
 +Page 1 
 +Page 2 
 +[grid-pdf] Saved resized A4 PDF: BAL_grids_A4_2col.pdf
 </code> </code>
  
-%%--%%export-grid 옵션은 모든 패턴에 대해 다음과 같은 그리드 이미지를 만든다. 패턴을 시각적으로 비교하기에 아주 편리할 것이다. 12개의 slot은 사전에 지정되어 있지만 이 범위를 벗어나는 것은 GM drum kit에 맞춘 노트 넘버로 표현된다.+%%--%%export-grid 옵션은 모든 패턴에 대해 다음과 같은 그리드 이미지를 만든다. 패턴을 시각적으로 비교하기에 아주 편리할 것이다. %%--%%grid-pdf 옵션은 모든 2-bar 패턴의 그리드를 하나로 모아서 여러 페이지의 PDF로 만들어 준다. 12개의 slot은 사전에 지정되어 있지만 이 범위를 벗어나는 것은 GM drum kit에 맞춘 노트 넘버로 표현된다. Triplet인 경우 자동으로 검출하여 12 step / bar로 만들어 준다.
 {{ :nano_ardule_midi_controller:pattern_grid.png?400 |}} {{ :nano_ardule_midi_controller:pattern_grid.png?400 |}}
  
Line 421: Line 433:
 | 11 | CP | 39 | Hand Clap | | 11 | CP | 39 | Hand Clap |
  
- 
-**split_drums_2bar_save.py** 스크립트는 원본 .MID 파일의 이름으로부터 장르를 유추한 뒤 다음과 같이 패턴명에 삽입할 수 있는 3글자 약자를 만든다. 
- 
-^ 코드 ^ 매칭 키워드 (파일명 내) ^ 장르 풀네임 ^ 
-| RCK | rock | Rock | 
-| BOS | bossa, bossanova | Bossa Nova | 
-| FNK | funk | Funk | 
-| JZZ | jazz | Jazz | 
-| BLU | blues, blue | Blues | 
-| LAT | latin | Latin | 
-| SMB | samba | Samba | 
-| WLZ | waltz, wlz | Waltz | 
-| SWG | swing, swg | Swing | 
-| SHF | shuffle, shf | Shuffle | 
-| REG | reggae | Reggae | 
-| MTL | metal | Metal | 
-| HHP | hip hop, hip-hop, hiphop, hhp | Hip Hop | 
-| HSE | house, hse | House | 
-| TNO | techno, tno | Techno | 
-| DRM | (기본값: 어떤 키워드에도 매칭되지 않을 때) | Generic Drum / Default | 
- 
-유사한 패턴을 묶는 가장 효율적인 방법을 찾기가 매우 어렵다. 여러 .MID 파일에 대해 한꺼번에 작업을 할 때, 이미 동일한 장르의 패턴이 있는 경우 덮어쓰지 않고 번호를 새로 붙이게 만들어야 한다. 
  
 하위 디렉토리(00_orig_MIDI_files)에 있는 모든 .MID 파일에 대하여 이 스크립트를 실행하고 화면 출력을 하나의 텍스트 파일에 담는 명령어는 다음을 참고하라. 생성된 패턴 MID 파일에 대해서는 재작업을 하지 않아야 하니 명령어가 한층 더 복잡해졌다. Bash가 그립다! 이전 단계에서 동일한 장르의 패턴이 만들어진 경우 기본 동작은 덮어쓰기이므로, 이를 방지하려면 '%%--%%no-overwrite' 옵션을 주어야 한다. 하위 디렉토리(00_orig_MIDI_files)에 있는 모든 .MID 파일에 대하여 이 스크립트를 실행하고 화면 출력을 하나의 텍스트 파일에 담는 명령어는 다음을 참고하라. 생성된 패턴 MID 파일에 대해서는 재작업을 하지 않아야 하니 명령어가 한층 더 복잡해졌다. Bash가 그립다! 이전 단계에서 동일한 장르의 패턴이 만들어진 경우 기본 동작은 덮어쓰기이므로, 이를 방지하려면 '%%--%%no-overwrite' 옵션을 주어야 한다.
Line 498: Line 488:
 .\ADP\*.ADP 및 .\SD\SYSTEM\INDEX.TXT를 SD 카드의 \PATTERNS와 \SYSTEM으로 복사하면 된다. .\ADP\*.ADP 및 .\SD\SYSTEM\INDEX.TXT를 SD 카드의 \PATTERNS와 \SYSTEM으로 복사하면 된다.
  
 +===== 패턴 간 유사도 측정 =====
 +패턴을 많이 모으게 되면 그중에는 틀림없이 똑같은 것도 나타날 것이다. 패턴이 몇개 되지 않는다면 그리드로 시각화하여 눈으로 비교하는 것이 가능하나, 그 숫자가 늘어나면 곤란하다. 2-bar 드럼 연주 MIDI 파일을 서로 비교하여 유사도 매트릭스를 구하는 스크립트인 **drum_sim_patrix.py**를 만들었다. 자세한 이론은 논문을 써야 할 정도로 심오하니 [[drum_sim_matrix_manual]] 문서를 참조하는 것으로 만족하자.
 +====== 드럼 패턴 파일 입수처 ======
  
 +  * [[https://discuss.cakewalk.com/topic/648-460-free-gm-midi-drum-patterns/|260 Drum Machine Patterns]] <- [[https://web.archive.org/web/20190305092857/http://www.fivepinpress.com/drum_patterns.html|archived]]
 +    * 1987년에 발간된 책자의 스캔본은 [[https://archive.org/details/260DrumMachinePatterns/page/n57/mode/2up?utm_source=chatgpt.com|여기]]에서 입수 가능. 
 +  * https://mididrumfiles.com/2024/07/download_free_midi_drum_files/
  
  
nano_ardule_midi_controller/adt_v2.2.1763894118.txt.gz · Last modified: by hyjeong