Music player app for the PocketMage PDA. Streams MP3, (AAC and WAV soon) from SD card over I2S single-pin PDM output through the piezo buzzer GPIO. Supports library browsing, now-playing with album art, playlist management, shuffle, and loop modes. Runs as an OTA application slot on the PocketMage OS.
Requires PlatformIO, just, and the standard ESP32-S3 toolchain.
just buildThis runs two scripts in sequence:
scripts/build_firmware.py- runpio run -e OTA_APP.scripts/package_ota.py- wrapfirmware.binintoPocketMuse.tarfor OTA distribution.
The default environment is OTA_APP. Set env in the Justfile or pass
ENV=<name> to build a different PlatformIO environment.
just upload # build + upload via USB
just monitor # build + upload + serial monitor| Input | Action |
|---|---|
| LEFT / RIGHT | Navigate list / skip track |
| UP / DOWN | Volume (Now Playing) |
| SPACE | Play / pause |
| ENTER | Select / play |
| P | Cycle source (Lib/Fav/Pl) |
| F | Toggle favorite |
| S | Toggle shuffle |
| L | Cycle loop (None/One/All) |
| D | Delete from playlist |
| B | Back to browser |
| ? | Help overlay |
| ESC / A | Exit to PocketMage OS |
Touch scroll on the slider controls volume in all modes.
- PlatformIO (
espressif32platform, Arduino framework) - arduino-audio-tools - audio pipeline (I2S, source callbacks, fading)
- arduino-libhelix - MP3/AAC decode
- GxEPD2 (fork:
ashtf8/GxEPD2_Editable_useFastFullUpdate) - JPEGDEC - album art decode
- PNGdec - album art decode
- U8g2 - OLED display
src/
main.cpp audio pipeline, app entry, setup/loop
muse.cpp app-wide globals
library.cpp SD card track scanner (/music/)
playlist.cpp playlist manager (favorites, .m3u)
metacache.cpp ID3 metadata cache on SD
albumart.cpp ID3v2 APIC extraction, JPEG/PNG decode, 1-bit render
ui_player.cpp playback control, shuffle, duration compute
ui/
ui_browser.cpp library/favorites/playlist browser
ui_nowplaying.cpp now-playing screen with album art
ui_playlist.cpp playlist queue view
ui_helpers.cpp header/footer/scrollbar/OLED/time formatting
include/ public headers
lib/
PocketMage/ shared PocketMage PDA framework (submodule)
scripts/
build_firmware.py PlatformIO build helper
package_ota.py firmware -> tar for OTA
Apache-2.0. Same as the PocketMage project.