User Tools

Site Tools


nano_ardule_midi_controller:slot_reassignment_by_editor

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
nano_ardule_midi_controller:slot_reassignment_by_editor [2026/02/09 22:01] – created hyjeongnano_ardule_midi_controller:slot_reassignment_by_editor [2026/02/09 23:02] (current) hyjeong
Line 1: Line 1:
 <!DOCTYPE markdown> <!DOCTYPE markdown>
 +
 +# Slot Reassignment by Editor
  
 _Last updated: 2026-02-09_ _Last updated: 2026-02-09_
 +
 +다음의 그림은 노트 번호를 잘못 기록한 곳이 있으니 수정해야 함.
 +
 +{{ :pictures:instrument_set_comparison.png?400 |}}
 +
 +## 설계 개념서 (Design Concept)
 +
 +**문서 유형**: 설계 개념 / 편집기 동작 명확화
 +**적용 범위**: APS (Ardule Pattern Studio) 편집기 – ADT 패턴 처리
 +**상태**: 초안 (개념 설계)
 +
 +---
 +
 +## 1. 배경
 +
 +ADT(Ardule Drum Pattern Text)는 드럼 패턴을 **고정된 길이의 스텝 시퀀스**와
 +**고정된 개수의 슬롯(slot, 일반적으로 12개)**으로 표현한다. 각 슬롯은
 +ADT 헤더의 `SLOTn=CODE@NOTE,LABEL` 정의를 통해 특정 MIDI 노트에 매핑된다.
 +
 +실제 사용 환경에서 사용자는 각 슬롯을 흔히 *악기 행(instrument row)*으로
 +인식한다. 그러나 스펙 및 데이터 모델 관점에서 슬롯은 **특정 악기나 사운드에
 +본질적으로 고정된 개념이 아니다.**
 +
 +이 구분은 MIDI 패드나 키보드와 같은 외부 컨트롤러로부터, 사전에 정의되지 않은
 +노트 번호가 실시간으로 입력될 수 있는 상황을 지원할 때 특히 중요해진다.
 +
 +---
 +
 +## 2. 문제 정의
 +
 +전통적인 스텝 시퀀서는 행(row)과 악기(instrument)의 고정된 대응 관계를
 +전제로 한다. 이 경우 다음과 같은 문제가 발생한다.
 +
 +* 미리 매핑되지 않은 MIDI 노트 입력은 무시되거나
 +* 편집기 내부 구조를 확장하여 슬롯 수를 늘려야 한다
 +
 +APS에서는 두 접근 모두 바람직하지 않다.
 +
 +* 입력을 무시하면 패드 기반 연주의 표현력이 사라진다.
 +* 슬롯 수 확장은 ADT의 고정 슬롯 설계를 깨뜨리고 기존 도구와의 호환성을
 +  저해한다.
 +
 +따라서 APS에는 다음 조건을 만족하는 메커니즘이 필요하다.
 +
 +* 임의의 MIDI 노트 입력을 수용할 것
 +* ADT가 정의한 고정 슬롯 개수를 유지할 것
 +* 저장 시 단일 ADT 파일만을 생성할 것
 +* ADT 포맷 자체에는 구조적 변경을 가하지 않을 것
 +
 +---
 +
 +## 3. 핵심 설계 원칙
 +
 +> **ADT에서 슬롯은 고정 악기가 아니라 리듬적 역할(rhythmic role)이다.**
 +
 +이 원칙에 따라 다음이 성립한다.
 +
 +* 슬롯의 개수는 고정되고 권위적이다.
 +* 슬롯이 어떤 악기를 의미하는지는 헤더의 매핑 정의에 의해서만 결정된다.
 +* 편집기는 패턴 본문의 구조를 유지하는 한, 슬롯 정의를 수정할 수 있다.
 +
 +따라서 슬롯 재정의(slot reassignment)는 **파일 포맷의 변경이 아니라
 +편집기 수준의 동작**으로 간주된다.
 +
 +---
 +
 +## 4. 슬롯 재정의 개념
 +
 +**슬롯 재정의**란, 사용자의 입력에 반응하여 기존 슬롯 정의를 새로운 MIDI
 +노트 매핑으로 교체하는 편집기 동작을 의미한다.
 +
 +이 동작은 다음 조건에서 발생한다.
 +
 +* MIDI Note On 이벤트가 수신되었고
 +* 해당 노트 번호가 현재 어떤 슬롯에도 할당되어 있지 않으며
 +* 패턴 전체에 걸쳐 완전히 비어 있는 슬롯이 하나 이상 존재할 경우
 +
 +이때 편집기는 슬롯 수를 늘리거나 입력을 버리는 대신, 비어 있는 슬롯 하나를
 +선택하여 해당 노트로 재정의한다.
 +
 +---
 +
 +## 5. 적용 자격 규칙
 +
 +슬롯 재정의는 예측 가능성과 안전성을 위해 엄격한 규칙을 따른다.
 +
 +### 5.1 고정(보호) 슬롯
 +
 +편집기 정책에 따라 특정 슬롯은 **코어 슬롯(core slots)**으로 지정될 수 있다
 +(예: Kick, Snare, Closed Hi-Hat, Open Hi-Hat).
 +
 +* 코어 슬롯은 재정의 대상이 아니다.
 +* 이는 ADT 포맷의 요구 사항이 아니라, 편집기 구현 정책이다.
 +
 +### 5.2 재정의 가능 슬롯
 +
 +다음 조건을 모두 만족하는 슬롯만 재정의가 가능하다.
 +
 +* 보호 슬롯이 아닐 것
 +* 패턴 전체 길이에 걸쳐 단 한 번도 노트 이벤트가 존재하지 않을 것
 +
 +이 판단은 현재 마디나 화면 범위가 아닌, **패턴 전체**를 기준으로 수행된다.
 +
 +---
 +
 +## 6. 재정의 절차
 +
 +정의되지 않은 MIDI 노트가 입력되면, 편집기는 다음 절차를 따른다.
 +
 +1. 해당 노트가 이미 어떤 슬롯에 매핑되어 있는지 확인한다.
 +2. 매핑되어 있지 않다면, 우선순위 규칙에 따라 재정의 가능한 빈 슬롯을 탐색한다.
 +3. 선택된 슬롯의 `SLOTn=CODE@NOTE,LABEL` 정의를 새로운 노트로 갱신한다.
 +4. 현재 스텝 위치에 노트 이벤트를 기록한다.
 +
 +재정의 가능한 슬롯이 없을 경우, 편집기는 입력을 거부하거나 사용자에게
 +알림을 제공할 수 있다. 데이터가 있는 슬롯을 자동으로 대체하는 동작은
 +본 개념서의 범위에 포함되지 않는다.
 +
 +---
 +
 +## 7. 저장 및 지속성 모델
 +
 +슬롯 재정의는 **ADT 헤더의 직접적인 수정**으로 귀결된다.
 +
 +* 보조 파일이나 사이드카 데이터는 생성되지 않는다.
 +* 저장 시, 단일 ADT 파일이 패턴 데이터와 슬롯-노트 매핑을 모두 포함한다.
 +* ADT 파일을 다시 열면, 재정의된 슬롯 상태가 그대로 복원된다.
 +
 +이는 APS 프로젝트가 항상 하나의 이식 가능한 ADT 파일로 귀결되어야 한다는
 +요구를 만족한다.
 +
 +---
 +
 +## 8. 사용자 경험(UX) 고려 사항
 +
 +사용자 관점에서 슬롯 재정의는 다음과 같은 특성을 갖는다.
 +
 +* 편집 세션에 따라 화면에 표시되는 악기 목록이 달라질 수 있다.
 +* 이는 파일에 정의된 슬롯 매핑이 권위적이기 때문에 발생하는 의도된 결과이다.
 +* 편집기는 슬롯 재정의 발생 시, 상태 메시지나 로그 등으로 이를 명확히
 +  사용자에게 전달하는 것이 바람직하다.
 +
 +UI 상에서는 슬롯을 악기 행으로 표현하되, 내부 모델은 본 문서에서 정의한
 +슬롯/역할 개념을 따른다.
 +
 +---
 +
 +## 9. ADT 스펙과의 관계
 +
 +본 설계는 다음 조건을 모두 만족한다.
 +
 +* ADT 파일 구조를 변경하지 않는다.
 +* 슬롯 개수를 증가시키지 않는다.
 +* ADT v2.x 스펙과 완전히 호환된다.
 +
 +슬롯 재정의는 ADT의 비고정 악기 의미론에 기반한, 합법적이고 의도된
 +사용 패턴이다.
 +
 +---
 +
 +## 10. 요약
 +
 +편집기에 의한 슬롯 재정의는, ADT의 고정 슬롯 설계를 유지하면서도
 +실시간 MIDI 입력의 표현력을 확보하기 위한 핵심 메커니즘이다.
 +
 +슬롯을 불변의 악기가 아닌 가변적인 리듬 역할로 취급함으로써,
 +APS는 단일 ADT 파일이라는 제약 안에서 유연성, 이식성, 하위 호환성을
 +동시에 달성할 수 있다.
 +
nano_ardule_midi_controller/slot_reassignment_by_editor.1770642069.txt.gz · Last modified: by hyjeong