작성일: 2026-01-06
범위: APS → ADS 컴파일 → Nano Ardule 재생 엔진
목표: bar 일부 비활성(beat/step 단위 무시) 기법을 이용해
4/4 기반 패턴에서 최소한의 변경으로 3박(왈츠) 느낌을 구현
Nano Ardule / APS 시스템은 현재 다음을 전제로 설계되어 있다.
이번에 새롭게 확인한 사실은 다음과 같다.
“bar 전체”가 아니라 “bar 내부 일부(step/beat)”를 비활성 처리해도
음악적으로 의미 있는 결과를 얻을 수 있다.
이를 이용하면,
PLAY_BARS = 1PLAY_STEPS = N즉,
[ step 0 ... step (N-1) ] → 재생 [ step N ... step end ] → 비활성
이 기법은:
본 설계에서 말하는 왈츠는 엄밀한 3/4 박자가 아니라,
4/4 루프 안에서
마지막 박(4th beat)을 쉼으로 처리한 “3박 느낌”
이다.
| Grid 해상도 | steps / bar | 1 beat | PLAY_STEPS (3 beats) | 비활성 영역 |
|---|---|---|---|---|
| Straight 16th | 16 | 4 step | 12 | step 12–15 |
| Triplet 8T | 12 | 3 step | 9 | step 9–11 |
| Triplet 16T | 24 | 6 step | 18 | step 18–23 |
공식:
PLAY_STEPS = steps_per_bar × (beats_to_play / beats_per_bar)
여기서는:
beats_per_bar = 4beats_to_play = 3ADS(또는 ARR→ADS 컴파일 단계)에 다음 필드를 추가한다.
PLAY_STEPS = <int>
특징:
PLAY_STEPS = steps_per_bar (기존 4/4 완전 재생)| 메타 | 역할 |
|---|---|
| PLAY_BARS | bar 단위 재생 제한 (_H) |
| PLAY_STEPS | bar 내부 step 단위 재생 제한 (신규) |
두 메타는 독립적이며 동시에 적용 가능하다.
기존 (개념적):
for (step = 0; step < steps_per_bar; step++) { play_step(step); }
확장 후:
int play_steps = meta.PLAY_STEPS > 0 ? meta.PLAY_STEPS : steps_per_bar; for (step = 0; step < steps_per_bar; step++) { if (step >= play_steps) continue; // 비활성 영역 play_step(step); }
| 계층 | 역할 |
|---|---|
| StepSeq | 항상 전체 grid 편집 (16/12/24 step) |
| Grid Preview | 비활성 영역을 흐리게 표시 가능 |
| ADS Compiler | PLAY_STEPS 계산 및 기록 |
| Nano Ardule | PLAY_STEPS 기준 재생 제어 |
편집과 재생을 명확히 분리함으로써 UX와 구조 모두 안정화된다.
PLAY_STEPS=12Triplet grid(12/24)에서도 동일 원리로 검증한다.
이 설계는 왈츠에만 국한되지 않는다.
PLAY_STEPS = 20 (16step×1.25)즉,
“비활성 구간”은 변박을 흉내 내는 가장 저렴한 도구다.
Triplet 일반화에 이어,
이번 PLAY_STEPS 개념은 Ardule 리듬 엔진을 한 단계 더 유연하게 만든다.