User Tools

Site Tools


nano_ardule_midi_controller:stepseq_triplet_pattern_support_note

This is an old revision of the document!


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=16
  • GRID_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. 테스트 체크리스트

  1. 24-step ADT에서 S 키 진입 가능
  2. 편집 후 저장 → 재로딩 시 동일한 step 구조 유지
  3. 미리보기/재생에서 triplet 느낌 유지
  4. 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.1767600146.txt.gz · Last modified: by hyjeong