Table of Contents

Ardule Playback Engine 판정 보고서

& ADS v0.1 Binary Cache Format Proposal


1. 판정 개요 (Executive Summary)

본 문서는 현재 Ardule Drum Pattern Player v2.5 재생 엔진
ADS(Ardule Data Stream)를 입력으로 받을 경우에도 2-bar 단위로 강제 분절되어 처리되는지 여부를 검증하고,
이를 기반으로 Nano Ardule에 적합한 ADS v0.1 바이너리 캐시 포맷을 제안한다.

핵심 판정 요약


2. 재생 엔진 구조 판정 (Detailed Analysis)

2.1 시간축 기준 판정

❌ 존재하지 않는 구조

✅ 실제 사용 중인 구조

엔진은 다음 상태 변수들로 재생을 제어한다:

이 구조는 grid/step 기반 시퀀서가 아니라,
delta/absolute time event scheduler의 전형적인 형태이다.


2.2 “2-bar”의 실제 의미

코드 주석 중 다음 문구가 존재한다:

// Pattern playback loop (2-bar absolute-time engine)

그러나 코드 분석 결과:


2.3 이벤트 처리 경계 분석

이벤트는 다음 조건에서 즉시 송출된다:

if (haveNextEvent && nowUs >= nextEventUs) {
    // send MIDI event
}

패턴 끝은 이벤트 인덱스 비교 후 loop 또는 종료를 결정할 뿐이다.

➡️ bar / 2-bar 경계에서만 이벤트를 묶는 구조는 존재하지 않는다.


3. 판정 결론

현재 Ardule 재생 엔진은 ADS를 입력으로 받아도
2-bar 단위로 끊어서 재생하지 않는다.


4. ADS v0.1 설계안 (Binary Cache Format)

4.1 설계 철학

ADS는 Nano Ardule에서 해석 없이 즉시 재생 가능한 입력물이다.
ARR / ADT의 구조적 의미를 모두 제거한 시간 정렬된 MIDI 이벤트 스트림이다.


4.2 ADS의 책임 범위

책임

비책임


4.3 ADS v0.1 파일 구조

전체 구조

[ ADS Header ]
[ Event Stream ]

Header (16 bytes)

Offset Size Field Description
0x00 4 magic “ADS\0”
0x04 1 version 0x01
0x05 1 flags bit0: loop
0x06 2 reserved future
0x08 4 totalTicks 전체 길이
0x0C 2 tpqn ticks/QN
0x0E 2 eventCount 이벤트 수

Event Stream

각 이벤트는 delta-tick 기반:

[ deltaTick ][ status ][ data1 ][ data2? ]

4.4 Loop 규칙


4.5 1-bar / 변박 처리 원칙


5. ADS vs MIDI 역할 분담

항목 ADS MIDI
패턴 기반 그루브 최적 가능
변박 제한적 최적
메모리 효율 매우 높음 낮음
엔진 부담 최소

6. 최종 정리

ADS는 Nano Ardule을 위한 ‘무사고 재생 스트림’이며,
현재 재생 엔진은 이미 그 철학에 부합한다.