nano_ardule_midi_controller:stepseq_triplet_pattern_support_note
This is an old revision of the document!
Table of Contents
StepSeq에서 Triplet 패턴 지원에 대한 기술 노트
작성일: 2026-01-05
범위: APS의 StepSeq(S키)에서 triplet 기반 패턴(예: 8T / 16T feel)을 다루기 위한 현재 제약 사항과 구현 가능성 정리
1. 현재 StepSeq의 제약 사항 (현행 aps_main.py 기준)
StepSeq 진입(S 키)은 다음 조건을 모두 만족해야 합니다.
1) ADT 패턴만 허용
- StepSeq는 .ADT 패턴 파일만 편집 대상으로 합니다.
2) 고정 길이: 2 bar / 32 step만 허용
open_stepseq_for_selected_pattern()에서 다음 조건을 강제합니다.pat.length != 32→ 즉시 거부- 메시지:
StepSeq: length=32(2bar) 패턴만 지원 (현재 {pat.length})
3) SLOT 기반 드럼 레인 정의 필수
- StepSeq는 ADT 내부의 SLOT 정의를 기준으로 레인을 생성합니다.
- SLOT 노트가 없으면 다음 메시지와 함께 진입이 거부됩니다.
StepSeq: no SLOT notes found in this ADT
4) step 수가 코드에 하드코딩됨
- length 체크 이후에도 내부에서:
steps = 32
- 여러 루프가
range(32)를 전제로 동작합니다.
결론
Triplet 패턴(예: 2 bar 기준 24 step)은
- (2)에서 즉시 차단되며
- 설령 허용하더라도 (4) 때문에 정상 동작하지 않습니다.
2. StepSeq 관점에서 “Triplet 패턴”이란 무엇인가
StepSeq에서 triplet을 다룬다는 것은 단순히 step 수 문제가 아니라,
grid index (step) ↔ 음악적 시간 위치
의 매핑을 새로 정의한다는 뜻입니다.
흔한 선택지 (2 bar 기준)
| 느낌 | bar당 분할 | 2 bar step 수 | 설명 |
|---|---|---|---|
| Straight 16th | 16 | 32 | 현재 StepSeq |
| Triplet (12) | 12 | 24 | 8분음표 셋잇단 느낌 |
| Triplet (24) | 24 | 48 | 16분 셋잇단, 고해상도 |
StepSeq는 “이 패턴이 어떤 그리드를 쓰는지”를 반드시 알아야 합니다.
3. 가장 쉬운 구현 방법 (최소 변경)
목표:
“Triplet 패턴을 StepSeq에서 편집 가능하게 만들기”
A) step 길이 가변 허용
- 기존:
pat.length != 32→ 거부
- 변경:
{24, 32}(또는{24, 32, 48}) 허용
B) ''%%steps = 32%%'' 하드코딩 제거
- 다음과 같이 변경:
steps = pat.length
- 모든 루프에서 상수 대신
steps사용
C) bar 수는 그대로 2 bar 유지
- 초기 단계에서는 2 bar 고정을 유지하는 것이 안전
- UI, 미리보기, 재생 로직과의 충돌을 최소화
👉 이 단계까지만 해도 24-step triplet 패턴을 StepSeq에서 열고 저장하는 것은 가능합니다.
4. 추가로 고려해야 할 숨은 제약
1) step → 시간 변환이 straight 기준일 가능성
- 내부 변환 로직이 “1 step = 16분음표”를 가정하면
- triplet 패턴의 타이밍이 깨집니다.
개념적으로 필요한 정의:
| grid | step 1칸의 의미 |
|---|---|
| 32 step | 1/16 note |
| 24 step | 1/12 note (triplet) |
| 48 step | 1/24 note |
즉:
event_time = step_index × step_duration
2) 패턴 메타데이터에 grid 정보가 없음
현재는 pat.length로 추정해야 합니다.
단기적으로는 가능:
- 32 → straight
- 24 → triplet
장기적으로는 취약합니다.
권장 메타데이터 예
GRID_PER_BAR=16GRID_PER_BAR=12- 또는
GRID_MODE=STRAIGHT | TRIPLET
이 정보는:
- StepSeq
- APS 미리보기
- ADS 컴파일
- Nano Ardule 재생 엔진
모두에서 공통 계약이 될 수 있습니다.
3) UI 비트 마커 문제
- 현재 StepSeq는 보통
- 4 step마다 beat 표시 (16 grid 기준)
- Triplet에서는
- 3 step마다 beat 표시가 자연스러움
초기에는 완벽하지 않아도 되지만, 잘못된 가이드를 보여주는 것은 피해야 합니다.
5. 추천 구현 단계 (안전한 순서)
Phase 1: Triplet 진입 허용 (빠른 성과)
pat.length가변 허용steps = pat.length- 화면 상단에 표시:
GRID: 16(32 step)GRID: 12T(24 step)
Phase 2: 타이밍 정확성 확보
- step → event 변환 함수에
steps_per_bar인자 추가
- grid 종류에 따라 step duration 계산
Phase 3: 포맷 차원의 안정화
- ADT 헤더에 grid 정보 저장
- length 추정 의존 제거
6. 테스트 체크리스트
- 24-step ADT에서
S키 진입 가능 - 편집 후 저장 → 재로딩 시 동일한 step 구조 유지
- 미리보기/재생에서 triplet 느낌 유지
- round-trip 안정성:
- step 이동 없음
- 레인 손실 없음
7. APS / ADT / ADS / Ardule 전체 관점에서
Triplet StepSeq를 허용하면, 다음 구성요소도 결국 같은 정보를 공유해야 합니다.
- ADS 스트리밍 엔진
- Nano Ardule 펌웨어
- 패턴 미리보기
- BPM / bar 계산
가장 깔끔한 해법은:
패턴 메타데이터에 grid 정의를 명시적으로 저장하고
모든 구성요소가 이를 신뢰하는 구조
요약
- 구조적 제약은 없음
- 현재 막고 있는 것은:
pat.length == 32강제- step 수 하드코딩
- straight 기준 시간 가정
- 단계적으로 충분히 확장 가능
Triplet StepSeq는 “어려운 기능”이 아니라
지금까지 일부러 닫아 두었던 문을 여는 작업에 가깝습니다.
nano_ardule_midi_controller/stepseq_triplet_pattern_support_note.1767600095.txt.gz · Last modified: by hyjeong
