nano_ardule_midi_controller:ads_v0.1_and_engine_judgement
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 바이너리 캐시 포맷을 제안한다.
핵심 판정 요약
- ❌ 재생 엔진은 step(32) / bar / 2-bar 단위로 이벤트를 처리하지 않는다
- ✅ 실제 재생 메커니즘은 절대시간 기반 이벤트 스트리밍 엔진이다
- ⚠️ 다만 “2-bar 패턴”을 전제로 한 의미적 흔적(주석, 명명) 은 남아 있다
- 🎯 구조적으로 ADS 입력을 수용하는 데 본질적인 장애는 없다
2. 재생 엔진 구조 판정 (Detailed Analysis)
2.1 시간축 기준 판정
❌ 존재하지 않는 구조
- step index (0..31)
- for(step < 32)
- step → note 매핑 테이블
- bar boundary에서만 이벤트 처리하는 로직
✅ 실제 사용 중인 구조
엔진은 다음 상태 변수들로 재생을 제어한다:
patLoopLenTickspatLoopStartUspatEventIndexpatEventCountnextEventUshaveNextEvent
이 구조는 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
