User Tools

Site Tools


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