User Tools

Site Tools


nano_ardule_midi_controller:index_file_single-source_category_display_reordering

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. 핵심 원칙

  1. INDEX 파일은 하나(INDEX.TXT)만 유지한다.
  2. INDEX.TXT의 내용/정렬(알파벳 순 등)은 변경하지 않는다.
  3. 펌웨어는 INDEX.TXT를 스캔하여 장르별 집계 테이블을 만든다.
  4. 표시 순서 변경은 장르 25개 내외의 “표시용 인덱스 배열”만 정렬하여 처리한다.
  5. 표시 순서 변경은 즉시 반영되며, 별도의 파일 생성/저장은 없다.

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) 입력으로 다음 모드를 순환한다.

  1. A→Z : 장르 코드 알파벳 오름차순
  2. Z→A : 장르 코드 알파벳 내림차순
  3. N↓ : 패턴 개수 내림차순(많은 장르부터)
  4. N↑ : 패턴 개수 오름차순(적은 장르부터)

모드 전환 규칙:

  • mode = (mode + 1) mod 4
  • 모드 변경 시 order[]를 해당 기준으로 재정렬하고 화면을 갱신한다.

6. LCD 표시 규칙

6.1 Line 2 왼쪽 모드 인디케이터

LCD Line2의 좌측 4칸 내외에 모드를 고정 표시한다.

  • A->Z
  • Z->A
  • N↓
  • 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. 예외 및 정책

  1. 동일 count 장르의 tie-break
    • N↓/N↑에서 count가 같으면 2차 기준은 장르 코드(A→Z)로 정한다.
  2. 장르 수가 0인 항목
    • 정상적으로는 생성되지 않으나, 존재한다면 표시에서 제외하거나 최하단으로 보낸다(구현 선택).
  3. 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