nano_ardule_midi_controller:ads_v0.1_and_engine_judgement

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 바이너리 캐시 포맷을 제안한다.

핵심 판정 요약

  • ❌ 재생 엔진은 step(32) / bar / 2-bar 단위로 이벤트를 처리하지 않는다
  • ✅ 실제 재생 메커니즘은 절대시간 기반 이벤트 스트리밍 엔진이다
  • ⚠️ 다만 “2-bar 패턴”을 전제로 한 의미적 흔적(주석, 명명) 은 남아 있다
  • 🎯 구조적으로 ADS 입력을 수용하는 데 본질적인 장애는 없다

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

2.1 시간축 기준 판정

❌ 존재하지 않는 구조

  • step index (0..31)
  • for(step < 32)
  • step → note 매핑 테이블
  • bar boundary에서만 이벤트 처리하는 로직

✅ 실제 사용 중인 구조

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

  • patLoopLenTicks
  • patLoopStartUs
  • patEventIndex
  • patEventCount
  • nextEventUs
  • haveNextEvent

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


2.2 “2-bar”의 실제 의미

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

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

그러나 코드 분석 결과:

  • “2-bar”는 재생 단위가 아니라 데이터의 길이에 대한 관례적 설명
  • 엔진은 bar 수, 박자표(time signature)를 해석하지 않으며
  • 단지 loop length(ticks)까지만 시간을 비교한다

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의 책임 범위

책임

  • MIDI 이벤트 시퀀스
  • 이벤트 간 시간 간격
  • 전체 재생 길이
  • (선택) loop 여부

비책임

  • bar / beat / time signature
  • 패턴 개념
  • 구조 해석
  • 실시간 편집

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 규칙

  • flags.bit0 == 1 → 전체 길이 기준 loop
  • loop 위치는 항상 tick 0

4.5 1-bar / 변박 처리 원칙

  • ADS에는 bar 개념 없음
  • APS 단계에서 tick 기반으로 평탄화
  • Nano Ardule는 박자를 알지 못한 채 재생

5. ADS vs MIDI 역할 분담

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

6. 최종 정리

ADS는 Nano Ardule을 위한 ‘무사고 재생 스트림’이며,
현재 재생 엔진은 이미 그 철학에 부합한다.
nano_ardule_midi_controller/ads_v0.1_and_engine_judgement.txt · Last modified: by hyjeong