Files
muziekdoos/FW/leo_muziekdoos_esp32/AUDIO_IMPROVEMENTS.md
T
Willem Oldemans 2ca4679079 bug: NFC broken HW/SW?
implement webui (in OTA mode)
implemented startup and shutdown sound
moved audio playback (and led) to seperate task for better audio latency/stabililty
2026-06-01 16:16:46 +02:00

2.4 KiB

Audio Handling Improvement Advice

High Impact

  1. Prevent heap growth and fragmentation during song changes.
  • Current behavior allocates new audio source objects for each play request.
  • Improvement: centralize ownership of playback objects and always stop and release old objects before creating new ones.
  1. Separate end-of-track from decode error.
  • Current behavior treats any failed loop step as a reason to restart playback.
  • Improvement: classify playback outcomes into Running, Ended, and Error, and only auto-repeat when explicitly enabled.
  1. Remove blocking serial work from decoder callbacks.
  • Current behavior prints ID3 data character-by-character and flushes serial from callback context.
  • Improvement: keep callback logging minimal, avoid flush in hot paths, and buffer logs where possible.
  1. Model real playback state instead of a single software flag.
  • Current behavior uses one flag for amplifier state and decision flow.
  • Improvement: expose states such as Idle, Starting, Playing, Stopping, Error, and base transitions on decoder status plus requested state.
  1. Validate song input before playback starts.
  • Current behavior starts playback when filename is non-empty.
  • Improvement: verify file exists in LittleFS, return reason codes for missing file, invalid path, or decoder start failure.

Medium Impact

  1. Introduce an AudioManager command queue.
  • Use commands like Play(file), Stop, Pause, SetGain.
  • This decouples game logic timing from decoder timing and reduces race-like behavior.
  1. Register callbacks once during audio initialization.
  • Avoid repeated callback registration on every play request unless dynamic callback context is required.
  1. Make playback policy configurable.
  • Add options such as RepeatMode, ErrorRetryLimit, and RetryBackoffMs in settings.
  1. Add runtime telemetry.
  • Track counters for starts, stops, open failures, decode errors, and loop overruns.
  • This improves observability and simplifies field debugging.

Suggested Implementation Order

  1. Add explicit cleanup path for current playback objects.
  2. Introduce a playback result enum and stop auto-restart on all errors.
  3. Reduce callback logging overhead.
  4. Add explicit AudioManager states and update game transitions.
  5. Add configuration flags for repeat and retry policy.

Affected Areas in Code

  • src/audio.cpp
  • src/audio.h
  • src/game.cpp
  • src/config.cpp and data/settings.json (for new policy options)