nano_ardule_midi_controller:index_file_single-source_category_display_reordering
Table of Contents
Index File Single-Source, Category Display Reordering
작성일: 2026-01-13
1. 목적
Ardule Pattern Player는 INDEX.TXT를 단일 소스로 유지하면서도, 사용자가 버튼 입력으로 카테고리(장르) 목록의 표시 순서를 즉시 전환할 수 있게 한다.
이 설계는 SD 카드의 인덱스 파일을 재생성/수정하지 않고, 펌웨어 내부의 “표시용 순서”만 바꾸는 방식을 채택한다.
2. 범위
- 대상: Pattern Player의 장르 요약 화면(예:
AFC(20) BLU(10) ...처럼 장르별 집계를 보여주는 화면) - 비대상: 패턴 개별 목록 자체의 정렬(447개 전체 엔트리를 재정렬하는 기능은 범위 밖)
3. 핵심 원칙
- INDEX 파일은 하나(
INDEX.TXT)만 유지한다. INDEX.TXT의 내용/정렬(알파벳 순 등)은 변경하지 않는다.- 펌웨어는
INDEX.TXT를 스캔하여 장르별 집계 테이블을 만든다. - 표시 순서 변경은 장르 25개 내외의 “표시용 인덱스 배열”만 정렬하여 처리한다.
- 표시 순서 변경은 즉시 반영되며, 별도의 파일 생성/저장은 없다.
4. 데이터 모델
4.1 장르 집계 테이블(실데이터)
펌웨어 내부에 장르별 정보를 다음과 같이 유지한다.
genre[i].code: 3글자 장르 코드(예:AFC)genre[i].count: 해당 장르 패턴 개수genre[i].first_pos: 해당 장르의 첫 패턴 위치(줄 인덱스 또는 파일 오프셋)
>first_pos는 장르 선택 후 패턴 리스트로 진입할 때 즉시 점프하기 위한 정보다.
4.2 표시용 순서 배열(정렬 대상)
order[k] = i형태의 인덱스 배열(길이 ≈ 장르 수)- 화면 출력 시
i = order[k]를 사용하여genre[i]를 참조한다. - 실데이터(genre 배열)는 움직이지 않고, order만 정렬한다.
5. 표시 순서 모드(카테고리 정렬 모드)
장르 표시 순서는 버튼(A6) 입력으로 다음 모드를 순환한다.
- A→Z : 장르 코드 알파벳 오름차순
- Z→A : 장르 코드 알파벳 내림차순
- N↓ : 패턴 개수 내림차순(많은 장르부터)
- N↑ : 패턴 개수 오름차순(적은 장르부터)
모드 전환 규칙:
mode = (mode + 1) mod 4- 모드 변경 시
order[]를 해당 기준으로 재정렬하고 화면을 갱신한다.
6. LCD 표시 규칙
6.1 Line 2 왼쪽 모드 인디케이터
LCD Line2의 좌측 4칸 내외에 모드를 고정 표시한다.
A->ZZ->AN↓N↑
예시(16×2 기준, 개념):
N↓ FNK(74) ...A->Z AFC(20) ...
>N은 “패턴 개수(Number of patterns)”를 의미한다.
화살표는 “정렬 방향”을 의미한다.
7. 사용자 동작 흐름
7.1 장르 요약 화면에서
- 엔코더 회전: 현재 하이라이트 장르 이동(선택 이동)
- 엔코더 버튼(또는 기존 선택 버튼): 해당 장르로 진입(첫 패턴으로 점프)
- A6 버튼: 장르 표시 순서 모드 순환(A→Z → Z→A → N↓ → N↑)
7.2 장르 진입(점프) 규칙
- 선택된 장르
genre[i]의first_pos로 이동하여 패턴 리스트를 보여준다. - 패턴 리스트는
INDEX.TXT순서 그대로이며, 별도의 “전체 정렬”을 하지 않는다.
8. 구현 난이도 및 리소스 평가
- 정렬 대상: 장르 수 ≈ 25
- 정렬 알고리즘: 삽입정렬/버블정렬로 충분(데이터가 작고 빠름)
- RAM 사용량: 매우 작음
genre[]테이블 +order[]배열
- SD I/O: 기존과 동일(인덱스 파일을 바꾸지 않음)
9. 예외 및 정책
- 동일 count 장르의 tie-break
N↓/N↑에서 count가 같으면 2차 기준은 장르 코드(A→Z)로 정한다.
- 장르 수가 0인 항목
- 정상적으로는 생성되지 않으나, 존재한다면 표시에서 제외하거나 최하단으로 보낸다(구현 선택).
- INDEX 스캔 실패/누락
- 장르 테이블 생성 실패 시 기본 모드(A→Z)로 폴백하고 오류 메시지 표시(선택).
10. 기대 효과
- “항상 Afro-Cuban이 먼저 나오는 지겨움”을 제거하고,
- 사용자 의도(자주 쓰는 장르/많은 패턴 장르)를 빠르게 탐색할 수 있으며,
- INDEX.TXT 단일 소스 유지로 유지보수/배포/도구 체계를 단순화한다.
11. 향후 확장(선택)
- 모드 추가:
REC(최근 사용 장르)FAV(즐겨찾기 장르)
- 모드 토글을 장르 화면에만 국한하지 않고, 패턴 목록에서도 “장르 점프”에 적용
- 장르 목록을 페이지 단위로 넘기는 “PAGE 점프” 병행
(단, 본 문서는 “INDEX 파일 하나 + 장르 표시 순서 변경”을 핵심 범위로 한다.)
Note: 장르별 집계후 알파벳 순서대로 표시되는 것은 현재의 기본 동작임
nano_ardule_midi_controller/index_file_single-source_category_display_reordering.txt · Last modified: by hyjeong
