User Tools

Site Tools


nano_ardule_midi_controller:drum_sim_matrix_manual

This is an old revision of the document!


{{{drum_sim_matrix.py}}} 사용 설명서

2‑bar 드럼 패턴(MIDI 파일)들 사이의 유사도(similarity)를 계산하고, 두 가지 방법으로 얻은 전체 NxN 유사도 행렬을 화면에 출력하는 스크립트입니다.

- 비교 대상: GM 드럼 채널(CH10, = MIDI 채널 번호 9)의 2‑bar 패턴 - 내부 표현: 12개의 드럼 슬롯 × cols}개의 시간 스텝(기본 32)로 이루어진 이진 그리드 - 유사도 지표:

1. ////Hamming similarity//// (해밍 유사도)
2. ////Cosine similarity//// (코사인 유사도)

각 유사도 값은 모두 1.0에 가까울수록 더 비슷한 패턴을 의미합니다.

1. 요구 사항 및 실행 환경

- Python 3.8 이상 권장 - 필수 라이브러리

  1. mido} (MIDI 파일 파싱)

- 선택 사항

  1. 이 스크립트 자체는 추가적인 외부 라이브러리가 필요 없지만,

비교할 MIDI 파일들은 모두 2‑bar 드럼 패턴이라고 가정합니다

  (예: {{{split_drums_2bar_save.py}}}로 잘라낸 결과물).

설치 예시:

``bash_pip_install_mido}`2마디_2_bars_구간을}cols으로_매핑_킥_스네어_하이햇_탐_심벌_퍼커션_등_2._그_결과_각_패턴은}12 × cols길이}12×cols 슬롯 | 라벨 | 설명 (대략) | |------|------|-------------| | 0 | BD | Kick (Bass Drum) | | 1 | SD | Snare Drum (주로 Acoustic/Electric) | | 2 | RS | Rim Shot / Side Stick | | 3 | CP | Hand Clap | | 4 | CH | Closed Hi‑Hat | | 5 | PH | Pedal Hi‑Hat | | 6 | OH | Open Hi‑Hat | | 7 | LT | Low/Low‑mid toms | | 8 | HT | Mid/High toms | | 9 | CR | Crash 계열 cymbal | | 10 | RD | Ride 계열 cymbal & Bell | | 11 | PER| Cowbell 및 Latin/FX 퍼커션 묶음 | 예를 들어, 킥(35, 36)은 항상 슬롯 0(BD), 스네어(38, 40)는 슬롯 1(SD)에 매핑됩니다. --- ===== 4. 스크립트 사용법 ===== ==== 4.1. 기본 호출 형태 ==== }`bash_python_drum_sim_matrix.py_pattern1.mid_pattern2.mid_pattern3.mid}`쉘_종류에_따라_와일드카드_동작이_다릅니다}*.MID를_확장하므로_다음처럼_쓰면_됩니다}`bash_python_drum_sim_matrix.py_rck_p_.mid}`nano_ardule_midi_controller}`mid}`powershell에서는_다음처럼}Get-ChildItem을_이용해_확장할_수_있습니다}`powershell_python_drum_sim_matrix.py_get-childitem_rck_p_.mid_.name_또는_python_drum_sim_matrix.py_gci_rck_p_.mid_.name}`nano_ardule_midi_controller}`python_drum_sim_matrix.py_rck_p_.mid}`4.3._옵션}–colsnano_ardule_midi_controller}`bash_python_drum_sim_matrix.py_rck_p_.mid_--cols_32}`nano_ardule_midi_controller}cols2마디_32_스텝_을_의미합니다._-_만약_더_촘촘한_해상도가_필요하면_48_64_등으로_늘릴_수_있습니다._-_단_벡터_길이는}12×cols벡터_생성_과정_각_midi_파일에_대해_다음과_같은_순서로_벡터를_만듭니다._1._midi_파일_로드}mido.MidiFile2._type_0이면_첫_번째_트랙_type_1이면_모든_트랙을_merge_3._delta_time을_절대_시간으로_바꾼}abs_msgs4_한_마디의_tick_수}ticks_per_beat × 42마디_길이}2 × bar_ticks또는_그보다_짧으면_가능한_범위_내_6._이_구간을}cols개의_균일한_시간_구간으로_나누고_7._해당_구간에서_ch10_채널_9_의_note_on_메시지를_조사하여_-_해당_시점의_tick_위치를_적절한_스텝_index}0..cols-1스텝에_노트가_있음을_표시_1_8._이_12_cols_2차원_배열을_평탄화하여_1차원_벡터로_만듭니다._---_6._hamming_similarity_해밍_유사도_6.1._hamming_distance란}d(A, B) = 서로 다른 위치의 수가능한_값의_범위}0완전히_동일}N를_다음과_같이_정의합니다._-_벡터_길이_n_여기서는}12×colshamming_distance_d}`n}`을_비교하여_-_같은_위치에서_같은_값을_가지면_일치_-_다르면_불일치_로_보고_카운트합니다}`|v1|| * ||v2||) }`여기서}v1 · v2내적_dot_product}||v1||nano_ardule_midi_controller}||v2||이진_벡터의_경우_대체로}0.0 ~ 1.01_벡터로_두었을_때}v1 · v2입니다}||v1||hit_수}||v2|| 항목 | Hamming similarity | Cosine similarity | |------|--------------------|-------------------| | 기본 개념 | 서로 다른 비트 수 | 벡터 사이의 각도 | | 1.0 의미 | 완전히 동일한 패턴 | 방향이 동일(정규화 관점에서 거의 동일) | | 민감도 | 위치가 한 칸만 어긋나도 크게 감소 | 전체 패턴의 분포와 공통 hit에 더 민감 | | 해석 난이도 | 매우 직관적 | 약간 수학적이지만 널리 쓰이는 척도 | 두 척도를 함께 보면서: - Hamming은 ////정밀한 구조 차이////, - Cosine은 ////전체적인 스타일/밀도 차이////를 본다고 이해하면 좋습니다. --- ===== 8. 출력 형식 해석 ===== 스크립트를 실행하면, 예를 들어 패턴 4개를 비교했을 때 다음과 같이 출력됩니다. }`rck_p010.mid}`cosine_similarity_-_왼쪽의_인덱스_0_1_2_3_는_아래의}Index → Filename` 목록과 매칭됩니다. - 대각선(각 i,i)은 항상 1.000 (자기 자신과의 유사도)입니다. - (i,j)와 (j,i)는 동일 값입니다 (대칭 행렬).

9. 이론적인 참고 정보 (간단 레퍼런스)

- Hamming distance

  1. Richard W. Hamming이 1950년대에 정립한 개념으로,

오류 검출·수정 코드, 정보 이론에서 널리 사용됩니다.

  1. 여기서는 오류 코드 대신, 드럼 패턴의 이진 표현에 적용하여

“얼마나 많은 위치에서 다른가?”를 측정하는 용도로 사용합니다.

- Cosine similarity

  1. 정보 검색(Information Retrieval), 자연어 처리(NLP)에서

문서 벡터 간 유사도를 잴 때 가장 널리 쓰이는 척도 중 하나입니다.

  1. 이진 또는 실수 벡터 모두에 사용 가능하며,

“벡터가 가리키는 방향이 얼마나 비슷한가”를 의미합니다.

드럼 패턴 연구/리듬 분석 분야에서도 이 두 가지 계열의 아이디어는 흔히 사용되며, 보다 복잡한 연구에서는 Dynamic Time Warping(DTW), 편집 거리(edit distance), 회전 불변(cyclic/invariant) 거리 등으로 확장되기도 합니다.

10. 확장 아이디어

현재 스크립트는 고정된 grid 위에서의 단순 비교를 수행합니다. 이후 다음과 같은 확장도 고려할 수 있습니다.

1. 회전 불변(cyclic shift‑invariant) Hamming distance

  1. 패턴을 한 스텝씩 회전시키며 최소 Hamming distance를 사용
  2. “시작 위치가 달라서 생기는 차이”를 제거

2. 슬롯 가중치 부여

  1. 예: 킥/스네어 차이는 크게, 심벌·퍼커션 차이는 조금만 반영

3. 부분 패턴 비교

  1. 특정 구간(예: backbeat 스네어 위치, 하이햇 패턴 등)만 따로 비교

4. 결과를 CSV/엑셀로 export

  1. 유사도 행렬을 CSV로 저장하여 다른 도구에서 더 편하게 시각화

필요하다면 이러한 확장 기능을 추가한 버전도 제작할 수 있습니다.

nano_ardule_midi_controller/drum_sim_matrix_manual.1763896216.txt.gz · Last modified: by hyjeong