nano_ardule_midi_controller:arr-based_pattern_length_interpretation

ARR-based Pattern Length Interpretation

작성일: 2026-01-13


1. 배경과 문제의식

Ardule 시스템에서 드럼 패턴의 기본 단위는 ADT(Ardule Drum Pattern)이며, 기존에는 패턴의 길이(1-bar / 2-bar)가 ADT 파일 자체에 의해 결정되었다. 이로 인해 동일한 연주 내용을 가지면서 길이만 다른 패턴(예: half pattern)이 다수 생성되는 문제가 발생하였다.

본 문서는 패턴의 연주 내용과 재생 길이 해석을 분리하여, 패턴 길이에 대한 authority를 ADT가 아닌 ARR(체인)로 이동시키는 설계 원칙과 구현 방안을 정리한다.


2. 설계 목표

  • ADT 파일은 연주 내용만을 정의한다.
  • 패턴의 재생 길이(전체 / 앞마디 / 뒷마디)는 ARR에서만 해석한다.
  • 기존 half pattern(_h 패턴)은 제거하지 않고 그대로 유지한다.
  • ARR 포맷은 하위 호환성을 유지해야 한다.
  • 체인 편집 UI는 사용자의 의도를 과도하게 추측하지 않는다.

3. 기본 개념 정리

3.1 ADT (Pattern Authority)

  • ADT는 고유한 패턴 길이를 가진다.
    • 일반 패턴: 2 bars
    • half pattern (_h): 1 bar
  • ADT에 정의된 길이는 상한선(authority) 이다.

3.2 ARR (Interpretation Authority)

  • ARR는 패턴을 어떻게 재생할지 해석한다.
  • ARR는 ADT의 내용을 변경하지 않으며, 재생 범위만 선택할 수 있다.

4. BARS 라인 (Optional)

4.1 개요

ARR 파일에는 선택적으로 BARS| 라인을 포함할 수 있다.

  • BARS| 라인은 옵션(optional) 이다.
  • 존재하지 않을 경우, 모든 패턴 엔트리는 Full(F) 로 간주된다.
  • 이를 통해 기존 ARR 파일과의 하위 호환성을 유지한다.

4.2 MAIN| 과의 관계

  • BARS| 라인은 MAIN| 라인과 1:1 대응한다.
  • 각 엔트리는 콤마(,)로 분리된다.
  • 엔트리 개수가 다를 경우, ARR는 invalid로 간주할 수 있다.

예시:

MAIN|DRM_012,DRM_045,DRM_020
BARS|F,A,B

5. BARS 토큰 정의

BARS| 라인은 단일 문자 토큰만 사용한다.

토큰 의미
F Full pattern (ADT 전체 길이)
A 1st bar만 재생
B 2nd bar만 재생

해석 규칙

  • 실제 재생 길이는 다음과 같이 결정된다:
effective_length = min(ADT_length, BARS_selection)
  • half pattern(_h) 위에 A 또는 B가 지정되어도 ADT 고유 길이를 초과할 수 없으며, 결과는 항상 1 bar이다.

6. 체인 편집 UI 동작 규칙

6.1 L 키 동작

체인 편집 창에서 L 키를 누르면, 현재 선택된 패턴 엔트리에 대해 다음 상태를 순환한다.

F → A → B → F
  • L 키는 ARR 내부 해석만 변경한다.
  • ADT 파일 자체는 절대 수정하지 않는다.

6.2 run (''%%xN%%'') 처리 규칙

  • PATT x2 와 같이 동일 패턴이 반복(run)된 경우, 전체 run을 한 번에 half로 만드는 것은 의미가 없다.
  • L 키를 누르면:
    • 항상 마지막 반복 엔트리만 length 변경 대상이 된다.
    • 그 결과, UI 상에서 run은 자동으로 분해된다.

예시:

PATT x2

L 입력 후:

PATT x1
PATT @A

이는 사용자의 의도가 “두 번째 반복만 다르게 재생하고 싶다”는 점을 명시적으로 반영한 설계이다.


7. 기존 half pattern(_h)의 처리

  • _h 패턴은 본질적으로 1-bar 패턴이다.
  • ARR에서 길이 변경을 시도하더라도 결과는 변하지 않는다.
  • _h 패턴은 계속 유효하며, 제거 대상이 아니다.

8. 설계 요약

  • 패턴 길이의 authority는 ADT → ARR로 이동한다.
  • BARS| 라인은 옵션이며 하위 호환성을 보장한다.
  • 길이 관련 토큰은 단일 문자(F/A/B) 로 단순화한다.
  • run에 대한 length 변경은 항상 마지막 엔트리만 적용한다.
  • 기존 half pattern 자산은 존중하고 유지한다.

이 설계는 과거의 자산을 보존하면서, 미래의 확장(세분화된 길이 해석, ADS 컴파일)을 자연스럽게 수용하기 위한 기반을 제공한다.

nano_ardule_midi_controller/arr-based_pattern_length_interpretation.txt · Last modified: by hyjeong