User Tools

Site Tools


nano_ardule_midi_controller:adt_v2.2

Ardule Drum Pattern Text Format: ADT v2.2

  • BUILD_ID: ADT22-SPEC-20251116
  • Status: Stable specification (Ardule Drum Pattern Player v2.3 / v2.4 기준)
  • First published: 2025-11-16
  • Scope: ADT v2.2 텍스트 포맷 및 ADP v2.2 바이너리 캐시 생성 기준

Ardule Drum Pattern System에서 사용하는 2-bar 드럼 패턴의 텍스트 표현 포맷이다. ADT v2.2는 ADP v2.2 바이너리 캐시 포맷과 1:1 대응되며, 사람이 읽고 편집하기 쉬운 것을 목표로 한다.

1. 기본 개념

  • 패턴 단위: 2마디(2 bars)를 기본 전제로 한다.
  • TIME_SIG: 표기 및 UI용 박자표 정보. 실제 재생 타이밍 계산에는 관여하지 않는다.
  • GRID / LENGTH: 패턴의 해상도(그리드)와 총 스텝 수를 정의한다.
    • 표준 조합(2-bar 기준)
      • GRID=16, LENGTH=32 (4/4, 1 bar = 16 steps)
      • GRID=8T, LENGTH=24 (12/8, 1 bar = 12 steps)
      • GRID=16T, LENGTH=48 (4/4 triplet, 1 bar = 24 steps)
    • 다른 조합도 표현은 가능하지만, ADP v2.2 표준 플레이어와의 호환성은 보장하지 않는다.
  • SLOTS: 동시에 사용할 드럼 슬롯(보통 12).
  • ACC (accent level): 각 스텝의 타격 세기를 0~3의 4단계로 표현한다.
    • 0: rest (무음)
    • 1: 약박
    • 2: 중간강
    • 3: 강박
  • ORIENTATION
    • STEP: 한 줄이 “한 스텝에서의 모든 슬롯 상태”를 의미한다.
    • SLOT: 한 줄이 “한 슬롯에서의 전체 스텝 패턴”을 의미한다.
    • ADP 변환 시에는 항상 STEP 오리엔테이션으로 정규화된다.

2. 파일 구조 개요

ADT v2.2 파일은 다음과 같이 구성된다.

  • 첫 줄: 버전 코멘트(권장)
  • 헤더: key=value 형식의 메타데이터
  • SLOT 선언: SLOT0..SLOT11
  • 본문 패턴: ORIENTATION에 따라 STEP 또는 SLOT 방식으로 표현된 문자 격자

예)

; ADT v2.2

NAME=ROCK01_MAIN
TIME_SIG=4/4
GRID=16
LENGTH=32
SLOTS=12
KIT=GM_STD
ORIENTATION=STEP

SLOT0=KK@36,KICK
SLOT1=SN@38,SNARE
SLOT2=CH@42,HH_CL
...
SLOT11=PH@44,HH_PED

X..X..X..X..X..X..X..X..
....X.......X..........
........................
...

3. 헤더 필드

모든 헤더 필드는 `KEY=VALUE` 형식이며, 대소문자를 구분하지 않는다. 미지의 키는 무시된다.

필수 여부 형식 / 예시 설명
NAME 필수 `NAME=ROCK01_MAIN` 패턴 이름(ASCII/UTF-8 문자, 공백 허용).
TIME_SIG 필수 `TIME_SIG=4/4` 박자표. 재생 타이밍에는 영향 없음.
GRID 필수 `GRID=16` / `8T` / `16T` 패턴 해상도.
LENGTH 필수 `LENGTH=32` 전체 스텝 수(정수).
SLOTS 필수 `SLOTS=12` 슬롯 수. ADP v2.2 표준은 12를 가정.
KIT 필수 `KIT=GM_STD` 드럼 킷 이름(문자열).
ORIENTATION 선택 `ORIENTATION=STEP` STEP 또는 SLOT. 생략 시 자동 판정.
  • 버전 코멘트
    • 첫 줄에 `; ADT v2.2`를 넣는 것을 권장한다.
    • 이것은 코멘트일 뿐, 별도의 `VERSION=` 필드는 존재하지 않는다.
  • ORIENTATION 자동 판정 규칙
    • ORIENTATION이 누락되었을 때:
      • 본문에서 “길이 L, 폭 S”인 줄이 L개 존재하면 STEP으로 해석.
      • “길이 L, 폭 S”인 줄이 S개 존재하면 SLOT으로 해석.
      • 둘 다 아니면 STEP으로 가정한다.

4. SLOT 선언

각 슬롯은 MIDI 노트 번호, 약어, 이름으로 정의한다. 키 이름은 `SLOT0`부터 `SLOT11`까지를 표준으로 한다.

형식:

SLOTn=ABBR@NOTE[,NAME]
  • `n`: 0~11 (정수)
  • `ABBR`: 1~3자의 슬롯 약어 (예: KK, SN, CH)
  • `NOTE`: 0~127 범위의 MIDI 노트 번호
  • `NAME`: 인간이 읽기 위한 슬롯 이름(선택)

예)

SLOT0=KK@36,KICK
SLOT1=SN@38,SNARE
SLOT2=CH@42,HH_CL
SLOT3=OH@46,HH_OP
SLOT4=LT@45,TOM_L
SLOT5=MT@47,TOM_M
SLOT6=HT@50,TOM_H
SLOT7=RD@51,RIDE
SLOT8=CR@49,CRASH
SLOT9=RM@37,RIM
SLOT10=CL@39,CLAP
SLOT11=PH@44,HH_PED
  • 어떤 SLOTn이 선언되지 않은 경우, 위의 GM 12슬롯 기본값으로 채운다.
  • ADP v2.2 표준에서는 SLOTS=12, SLOT0~11이 모두 존재하는 것을 기본으로 한다.

5. 본문 패턴: STEP / SLOT 표현

헤더와 SLOT 선언 이후부터 파일 끝까지는 “본문 패턴” 영역이다. 빈 줄 또는 세미콜론(;)으로 시작하는 줄은 코멘트로 취급하여 무시한다.

5.1 사용 가능한 문자와 ACC 매핑

본문에서 사용할 수 있는 문자는 다음과 같다.

문자 집합 ACC 값 의미
`-` 0 rest / hit 없음
`.` 1 약박
`o`, `O` 2 중간강
`x`, `X`, `` 3 강박
  • 공백, 탭, 기타 문자는 모두 무시된다(라인 정규화 과정에서 제거).
  • 출력 시에는 `- . o X` 형태를 권장하지만, 파서는 위 문자 집합 전체를 허용한다.

5.2 STEP 오리엔테이션

  • 한 줄이 “한 스텝에서의 모든 슬롯 상태”를 의미한다.
  • 각 줄의 길이(유효 문자 수)는 `SLOTS`와 같아야 한다.
  • 줄의 개수는 `LENGTH`와 같아야 한다.

예) GRID=16, LENGTH=32, SLOTS=12

X..X..X..X..X..X..X..X..
....X.......X..........
........................
...
  • 위 예시에서 첫 줄은 step 0에 해당하며, 왼쪽에서 오른쪽으로 SLOT0→SLOT11 순서이다.
  • 각 문자에 대응하는 ACC 값(0~3)이 ADP에 저장된다.

5.3 SLOT 오리엔테이션

  • 한 줄이 “한 슬롯에서의 전체 스텝 패턴”을 의미한다.
  • 각 줄의 길이(유효 문자 수)는 `LENGTH`와 같아야 한다.
  • 줄의 개수는 `SLOTS`와 같아야 한다.
  • 줄의 순서는 SLOT0, SLOT1, …, SLOT(SLOTS-1)이다.

예) SLOTS=12, LENGTH=32

X..X..X..X..X..X..X..X..   ; SLOT0
....X.......X..........   ; SLOT1
........................   ; SLOT2
...

ADT v2.2 → ADP v2.2 변환기에서는 내부적으로 항상 STEP 오리엔테이션으로 변환한 뒤, ADP를 생성한다.

6. 멀티 ADT 컨테이너(ADX)

ADT v2.2는 여러 개의 패턴을 하나의 파일로 묶는 컨테이너 형식(ADX)을 지원한다.

  • 파일 확장자: `.adx` 권장.
  • 구조:
    • `[패턴 헤더 + SLOT 선언 + 본문]` 블록이 여러 개 연속.
    • 각 패턴은 `NAME=` 필드를 통해 고유한 이름을 가진다.
  • 다른 파일에서 참조:
    • `FILE.ADX:SECTION` 형태로 참조.
    • 여기서 `SECTION`은 해당 패턴의 `NAME` 값이다.
      • 예: `ROCKPACK.ADX:ROCK01_MAIN`

7. ADP v2.2와의 관계(요약)

ADT v2.2는 ADP v2.2 바이너리 캐시와 1:1 대응한다.

  • GRID, LENGTH, SLOTS 정보는 ADP 헤더에 그대로 반영된다.
  • 각 스텝의 ACC 값(0~3)과 슬롯 인덱스(0~11)가 ADP payload로 인코딩된다.
  • ADP 헤더에는 다음과 같은 메타 필드가 추가된다.
    • PPQN: 재생 엔진 참고용 (표준 값 96)
    • SWING, TEMPO: 현재 버전의 ADT→ADP 변환기에서는 0으로 고정
    • CRC16: 정규화된 ADT 텍스트(ORIENTATION=STEP, SLOT0~11, 본문 STEP 격자)에 대한 CRC-CCITT(0x1021, init 0xFFFF)

ADT v2.2 사양에서는 SWING, TEMPO를 별도의 헤더 필드로 정의하지 않는다. 이 필드는 ADP v2.2 헤더 레벨에서만 존재하며, 현재 구현에서는 모두 0으로 저장된다.

8. 검증 체크리스트

ADT v2.2 파일을 생성하거나 읽을 때 다음을 확인한다.

  • 첫 줄이 `; ADT v2.2`인지 확인 (권장, 필수는 아님).
  • 헤더:
    • NAME, TIME_SIG, GRID, LENGTH, SLOTS, KIT 필드가 모두 존재하는가?
    • GRID는 16 / 8T / 16T 중 하나인가?
    • LENGTH는 24 / 32 / 48 중 하나인가? (표준 조합 권장)
    • SLOTS는 12인가? (ADP v2.2 표준 플레이어는 12를 가정)
  • SLOT 선언:
    • SLOT0..SLOT11이 모두 정의되었는가?
    • 정의되지 않은 SLOTn은 GM 12슬롯 기본값으로 채워졌는가?
  • 본문:
    • ORIENTATION=STEP인 경우
      • 본문 내 유효 라인 수가 LENGTH와 동일한가?
      • 각 라인의 유효 문자 수가 SLOTS와 동일한가?
    • ORIENTATION=SLOT인 경우
      • 본문 내 유효 라인 수가 SLOTS와 동일한가?
      • 각 라인의 유효 문자 수가 LENGTH와 동일한가?
    • 사용된 문자가 `- . o O x X ^` 범위를 벗어나지 않는가?
  • 멀티-ADT(ADX)의 경우
    • 각 패턴이 고유한 NAME을 가지고 있는가?
    • 외부 참조 시 `FILE.ADX:NAME` 형식을 사용하는가?

이 사양은 현재 제공되는 `mid2adt.py` 및 `adt2adp.py` 스크립트와 호환되며, Ardule Drum Pattern Player v2.3/2.4에서 사용할 ADP v2.2 캐시 파일 생성의 기준으로 삼는다.

nano_ardule_midi_controller/adt_v2.2.txt · Last modified: by hyjeong