User Tools

Site Tools


nano_ardule_midi_controller:reducing_starting_burst_in_multi_midi_playback

This is an old revision of the document!


Reducing Starting Burst in MULTI MIDI Playback

개요

Nano Ardule Drum Pattern Player의 MULTI 모드에서 MIDI 파일(Type 0) 재생 시 곡 시작부에 들리던 짧은 ‘burst’(음이 한꺼번에 몰려서 나오는 현상)에 대해, 문제의 원인을 분석하고 실제 펌웨어에 적용한 개선 사항을 정리한다.

본 문서는 엔진의 기본 구조와 음악적 타이밍 의미를 훼손하지 않으면서, 청감상 불쾌감을 줄이기 위해 적용한 최소·국소적 개선을 기록하는 것을 목적으로 한다.


문제 정의 (Problem Statement)

관찰된 증상

  • MULTI 모드에서 MIDI 파일 재생을 시작할 때,
  • 곡의 시작 부분에서 짧은 시간 동안 여러 이벤트가 한꺼번에 출력되는 듯한 burst가 들림
  • 노트 수가 많지 않은 곡에서도 발생
  • INTERNAL 패턴이나 단일 패턴 재생에서는 관찰되지 않음

청감적 특성

  • 노이즈라기보다는 리듬이 순간적으로 뭉개지는 느낌
  • ‘퍽’ 하는 단발성 충격음이 아니라, 아주 짧은 시간에 어택이 밀집

원인 분석 (Root Cause Analysis)

분석 결과, 이 현상은 다음과 같은 타이밍 스케줄링 문제로 정리할 수 있다.

핵심 원인

곡 재생의 시간 기준(clock)이 너무 이른 시점에 설정되어, SD 카드 접근 및 MIDI 파일 초기 파싱에 소요된 시간이 ‘재생 경과 시간’으로 계산되는 문제

구체적 메커니즘

  1. 사용자가 MULTI 모드에서 재생을 시작함
  2. 펌웨어는 재생 시작 시점에 재생 기준 시간(play clock)을 설정
  3. 이후 SD 카드에서 MIDI 파일을 열고, 헤더 및 초기 이벤트를 파싱 (블로킹 동작)
  4. 이 준비 시간이 끝난 뒤 실제 이벤트 처리 루프가 시작됨
  5. 스케줄러는 이미 시간이 경과했다고 판단하여,
    • now >= nextEventTime 조건을 만족하는 초기 이벤트들을 한 번에 따라잡기(catch-up)
  6. 그 결과, 시작부 이벤트(노트 포함)가 짧은 시간에 몰려 출력됨

적용한 개선 전략 (Applied Improvements)

개선은 MULTI 모드의 MIDI 재생에만 국한하여 적용하였으며, 다른 재생 모드에는 영향을 주지 않는다.

1. 재생 시간 기준의 재설정 (Time Base Re-arming)

  • MIDI 파일을 열고 초기 파싱을 완료한 이후 시점에 재생 시간 기준을 설정
  • SD 접근 및 준비 시간은 재생 시간 계산에서 제외

2. 시작부 Catch-up 완충 구간 도입 (Scheduler Warm-up Guard)

  • 곡 시작 후 약 450ms 동안만 스케줄러의 과도한 따라잡기를 제한
  • 일정 시간이 지나면 자동 해제

검증 결과 (Verification)

  • 수정 전 → 1차 개선 → 최종 개선 녹음 비교
  • 시작부 최대 피크 및 에너지 밀집도 단계적 감소 확인
  • 실사용 환경에서 시작부 거슬림이 거의 인지되지 않는 수준으로 완화

결론

본 개선은 엔진의 구조와 타이밍 의미를 유지한 채, 실용적으로 충분한 수준의 청감 개선을 달성하였다.

추가 튜닝은 설계 변경 또는 취향의 영역으로 판단된다.

nano_ardule_midi_controller/reducing_starting_burst_in_multi_midi_playback.1768618713.txt.gz · Last modified: by hyjeong