nano_ardule_midi_controller:aps_arr_ads_pipeline_extension_and_stabilization
Table of Contents
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 onlyB: 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 barbars == A/B→ 1 barbars == 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
