User Tools

Site Tools


nano_ardule_midi_controller:aps_arr_ads_pipeline_extension_and_stabilization

APS–ARR–ADS Pipeline Extension and Stabilization

작성일: 2026년 1월 14일

1. 작업 배경과 목표

기존 APS(Ardule Pattern Studio) 체인 편집기에서는
각 체인 엔트리별로 per-entry bar 선택(F/A/B) 기능이 UI 차원에서만 존재했다.

그러나 이 정보는:

  • ARR 파일에 저장되지 않았고
  • 외부 변환 도구(adc-arrtool)를 거쳐
  • MIDI / ADS로 변환되는 과정에서 완전히 소실되었다.

오늘의 작업 목표는 다음과 같았다.

  • per-entry bar 선택 정보를 ARR 포맷에 직렬화
  • ARR → MIDI / ARR → ADS 변환 과정에서도 동일한 연주 의미 유지
  • _h(1-bar pattern)와의 상호작용을 개념적으로 정합되게 정리
  • 펌웨어를 수정하지 않고도 전체 파이프라인을 완결

2. ARR 포맷 확장: ''%%BARS|%%'' 도입

2.1 ''%%BARS|%%'' 라인 정의

  • BARS|MAIN|1:1 대응하는 엔트리 리스트
  • 각 토큰은 다음 중 하나:
    • F : Full (기존 동작, 기본값)
    • A : First bar only
    • B : Second bar only

예:

MAIN|1,1,3,4,4,4
BARS|F,F,A,B,B,B
참고: MAIN|에는 반복(xN) 없이 완전히 전개된 엔트리 리스트만 기록된다.

2.2 하위 호환 규칙

  • 모든 엔트리가 F인 경우 BARS| 라인은 생략 가능
  • BARS|가 없는 ARR는:
    • 내부적으로 전부 F로 간주
    • 기존 ARR 파일과 완전 하위 호환

3. APS 쪽 변경 사항

3.1 ''%%aps_arr.py%%''

  • save_arr():
    • ChainEntry.bars를 읽어 BARS| 토큰 생성
    • 하나라도 A/B가 있으면 MAIN| 다음 줄에 기록
  • parse_arr():
    • BARS|가 있으면 토큰을 파싱해 entry.bars에 저장
    • 없으면 모든 엔트리를 bars="F"로 초기화

➡️ ARR 파일이 per-entry bar 의미를 영속적으로 보존


3.2 ''%%aps_main.py%%''

  • ARR 로드 시 체인을 재구성하면서
    • filename, repeats만 복사하고
    • bars를 누락하던 버그 발견
  • 수정:
    • ChainEntry 재생성 시 bars까지 반드시 복사
    • 또는 파싱된 ChainEntry 객체를 그대로 사용

➡️ ARR에서 읽은 @A / @B가 UI에 정확히 복원됨


3.3 ''%%aps_core.py%%''

  • 체인 길이 계산 로직 정비:
    • _h 패턴 → 항상 1 bar
    • bars == A/B → 1 bar
    • bars == F → 2 bars
  • Items / Unique / Bars 계산과
    • start-bar numbering이 실제 재생과 일치

➡️ UI 통계, 타이틀바, 내부 계산의 정합성 확보


4. ''%%_h%%'' 패턴과 A/B의 개념 정리

  • _h 패턴은 물리적으로 1 bar
  • 그러나 A / B시간 선택이 아니라 의미 선택(semantic selection)

정의:

  • _h + A : A 의미를 대표로 선택한 1-bar 재생
  • _h + B : B 의미를 대표로 선택한 1-bar 재생
  • 2nd bar 오프셋이나 침묵은 절대 발생하지 않음

정책 문장:

In half patterns, A/B select semantic source, not playback offset.

5. adc-arrtool 확장 (ARR → MIDI / ADS)

5.1 ARR 파서 확장

  • BARS| 인식 추가
  • MAIN| 전개 엔트리 수와 동일한 길이의 bars 리스트 생성
  • BARS|가 없으면 F로 자동 채움

5.2 변환 로직 반영

  • F : 전체 패턴
  • A : 1st bar만
  • B : 2nd bar만 (2-bar 패턴에서만)
  • _h 패턴:
    • A/B 모두 1-bar 캡
    • B여도 침묵 없이 정상 재생

➡️ ARR 의미가 MIDI / ADS 결과물에 정확히 반영


6. 펌웨어 변경 불필요 판정

  • ADS는 이미 절대시간(MetaTime) 이벤트 스트림
  • 모든 의미 해석은 PC 쪽에서 완료
  • 펌웨어는 ADS를 그대로 재생하는 단순 플레이어

결론:

ADS가 정상이라면, 펌웨어는 수정할 필요가 없다.

7. 최종 상태 요약

  • APS 내부 편집 의미 ✔
  • ARR 포맷 직렬화 ✔
  • adc-arrtool 변환 반영 ✔
  • ADS 결과 정합 ✔
  • 펌웨어 무변경 ✔

남은 작업:

비상용 바이너리 ADS/ADP 패턴을 아두이노 플래시에 내장하는 fallback 경로 구성

한 줄 결론

per-entry bar 선택을 UI → 파일 포맷 → 변환 도구 → 실행 결과까지 하나의 의미 축으로 관통시킨 설계 완성 작업
nano_ardule_midi_controller/aps_arr_ads_pipeline_extension_and_stabilization.txt · Last modified: by hyjeong