User Tools

Site Tools


nano_ardule_midi_controller:emergency_payload_architecture_and_ads_milestone

Emergency Payload Architecture and ADS Milestone

작성일: 2026년 1월 14일

1. 오늘의 기술적 성취 요약

오늘 Nano Ardule Drum Pattern Player 프로젝트는 중요한 전환점을 맞이하였다. 단순한 기능 추가를 넘어, 설계 원칙으로만 존재하던 개념들이 실제 하드웨어 위에서 검증되었다.

1.1 ADS v0.1 재생 성공

  • ADS(Ardule Data Stream) v0.1 포맷이 SONG 모드에서 정상 재생됨
  • ADS 헤더가 BPM, PPQ, 채널의 authority로 작동함을 실증
  • absolute tick 기반 MetaTime 원칙이 펌웨어 레벨에서 구현 및 검증됨
  • 이벤트 레코드 구조(8 bytes/event)가 확정됨

1.2 구조적 성취

  • ADT(편집) / ARR(조합) / ADS(실행)의 책임 분리가 완성 단계에 도달
  • 재생 엔진은 해석자가 아닌 실행자로 역할이 명확히 정의됨
  • 스펙과 코드 중 authority가 어디에 있는지 명확해짐

2. Emergency Binary Payload의 목적

Emergency Binary Payload는 SD 카드가 없는 상황에서도 최소한의 음악적 기능을 보장하기 위한 내부 Flash 기반 패턴 뱅크이다.

2.1 설계 목적

  • SD 카드 미삽입 또는 인식 실패 시에도 즉시 재생 가능
  • 부트 직후 데모/테스트용 패턴 제공
  • SRAM 사용을 최소화하고 PROGMEM 기반으로 동작
  • SD 기반 패턴과 동일한 재생 엔진 경로를 사용

3. Payload 데이터 포맷 설계

3.1 기본 원칙

  • 텍스트(ADT) 저장 금지
  • 엔진 친화적인 바이너리 포맷 사용
  • 패턴 단위 독립성 보장

3.2 권장 포맷: Packed Grid Payload

3.2.1 데이터 구조(예시)

  • Header
    • patternId (1B)
    • playBars (1B) : 1 or 2
    • steps (1B) : 16 or 32
  • Grid payload
    • 12 instruments × steps × 2bit
  • Optional metadata
    • default tempo (1B or 2B)
    • flags (1B)

3.2.2 용량 추정

  • 2-bar 패턴: 약 96~110 bytes
  • 1-bar 패턴: 약 48~60 bytes
  • 남은 Flash 약 8KB 기준:
    • 2-bar 기준 60~80개
    • 1-bar 기준 120개 이상 가능

4. 메모리 배치 전략

4.1 저장 위치

  • const uint8_t emergencyPayload[] PROGMEM
  • payload index 테이블 별도 유지

4.2 SRAM 사용 원칙

  • payload를 통째로 RAM에 복사하지 않음
  • 재생 시 필요한 단위만 PROGMEM에서 즉시 읽기

5. 재생 엔진 연동 설계

5.1 엔진 분기

재생 엔진은 데이터 출처에 따라 분기만 하고, 로직은 공유한다.

  • Source = SD
  • Source = PAYLOAD (Flash)

5.2 공통 인터페이스 개념

  • readStepValue(source, patternId, slot, step)
  • SD/Flash 여부는 내부에서만 처리

6. UI 및 메뉴 설계

6.1 정상 접근 경로

  • Global 메뉴에 Emergency Patterns 항목 추가
  • 사용자가 수동으로 payload 패턴을 선택 및 재생 가능

6.2 자동 페일세이프 동작

  • 부팅 시 SD 카드 인식 실패 시:
    1. 자동으로 Emergency Patterns 메뉴로 진입
    2. 첫 번째 payload 패턴을 기본 선택
    3. LCD에 “SD NOT FOUND / EMERGENCY MODE” 표시

6.3 모드 상태 표시

  • Emergency 모드에서는 LED 최소화 또는 OFF
  • UI 상단 또는 상태 라인에 “E-MODE” 표시

7. 동작 시나리오 요약

  1. 부팅
  2. SD 초기화 시도
  3. 실패 → Emergency Payload 모드 자동 진입
  4. 사용자 입력 없이도 재생 가능
  5. SD 삽입 후 재스캔 시 정상 모드 복귀 가능

8. 단계적 구현 로드맵

  1. Payload 포맷 확정 (packed grid)
  2. PROGMEM payload 삽입
  3. Payload index 생성
  4. 재생 엔진 source 분기
  5. Emergency 메뉴 UI 추가
  6. SD 실패 자동 전환 구현

9. 맺음말

Emergency Binary Payload는 단순한 예비 기능이 아니다.
이는 Ardule이 “외부 저장장치 의존 시스템”에서 “자기 완결적 악기”로 진화하는 단계이다.

오늘 ADS가 소리로 증명된 것처럼, 이 payload는 Ardule이 언제 어디서나 소리를 낼 수 있음을 보장하는 마지막 퍼즐이 될 것이다.

nano_ardule_midi_controller/emergency_payload_architecture_and_ads_milestone.txt · Last modified: by hyjeong