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

*Date: 2026-01-17*

## 개요

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. 스케줄러는 이미 시간이 경과했다고 판단하여,

  1. `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.1768618612.txt.gz · Last modified: by hyjeong