nano_ardule_midi_controller:arr-based_pattern_length_interpretation
Table of Contents
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
