Music player homebrew untuk Nintendo Switch (Atmosphere CFW) yang memutar file FLAC/MP3 dari SD card di background sambil bermain game.
Arsitektur: sysmodule background (sys-nada) + overlay libultrahand
(ovl-nada.ovl), mengikuti pola sys-tune/streamfin-switch.
- Playback FLAC & MP3 dari
/music/<album>/di SD card - Cover art: JPEG (baseline & progresif ≤1150px) dan PNG (≤740px),
embedded di metadata atau file
cover.jpg/cover.pngdi folder album - Metadata: title, artist, album dari Vorbis comment (FLAC) dan ID3v2 (MP3)
- Queue otomatis per folder, sort alfabetis, shuffle & repeat (off/one/all)
- Seek, progress bar, volume control (multiplier PCM di sysmodule)
- File browser hierarkis: Albums → Tracks → Now Playing
- Marquee scroll untuk judul panjang
- Blacklist per-game:
/config/sys-nada/blacklist.ini(satu title ID hex per baris); musik auto-pause saat game di-blacklist, resume saat keluar - AudioRenderer session limit handling: state Disabled + pesan di overlay
- Nintendo Switch dengan Atmosphere CFW
- Firmware 22.1.0 / Atmosphere 1.11.1 (target; versi lain belum teruji)
- nx-ovlloader (ppkantorski fork) + Ultrahand Overlay
- devkitPro (devkitA64, libnx, switch-tools) untuk build
source toolchain.env # pastikan DEVKITPRO dan DEVKITA64 ter-set
make # build sysmodule/sys-nada.nsp + overlay/ovl-nada.ovl
make dist # susun layout SD card di ./out/
make dist DEBUG_LOG=1 # build dengan debug logging (tulis /config/sys-nada/log.txt)Dependency portlibs (via dkp-pacman):
switch-libjpeg-turbo— decode cover JPEG (sysmodule)switch-curl,switch-zlib,switch-mbedtls, dll — overlay Ultrahand
Vendored di third_party/:
dr_flac.h,dr_mp3.h— decode audio (public domain / MIT)stb_image.h— decode cover PNG (public domain)
Copy isi out/ ke root SD card:
SD:/
atmosphere/contents/4200000000000ADA/
exefs.nsp
toolbox.json
flags/boot2.flag
switch/.overlays/
ovl-nada.ovl
Sysmodule auto-launch saat boot via boot2.flag. Struktur musik:
/music/
Nama Album/
01 - Judul Lagu.flac
02 - Judul Lagu.mp3
cover.jpg (opsional, fallback)
| Tombol | Fungsi |
|---|---|
| D-pad kiri/kanan | Geser fokus antar kontrol (repeat/prev/play/next/shuffle) |
| A | Aktifkan kontrol yang difokus |
| D-pad atas | Fokus ke seek bar (kiri/kanan = seek ±5s) |
| X/Y | Repeat / Shuffle (saat kontrol difokus) |
| X/Y (seek bar difokus) | Volume up / down ±5% |
| Touch seek bar | Lompat posisi |
| Touch ikon transport | Play/Pause/Repeat/Shuffle langsung |
sysmodule/ — sysmodule background (.nsp), playback engine + decoder + IPC server
overlay/ — overlay libultrahand (.ovl), UI + IPC client
common/ — header-only: IPC protocol, type definitions
third_party/ — vendor: dr_flac, dr_mp3, stb_image
tools/ — fix_covers.py: deteksi & resize cover FLAC 4:4:4 >800px
/config/sys-nada/blacklist.ini— title ID game yang di-blacklist (satu per baris, hex)/config/sys-nada/log.txt— debug log (hanya buildDEBUG_LOG=1)
- Heap sysmodule 5 MB (batas system pool FW 22.1.0). Cover JPEG progresif
1150px atau 4:4:4 >800px tidak bisa di-decode — ganti dengan
cover.jpgyang di-resize. Gunakantools/fix_covers.pyuntuk otomatisasi. - AudioRenderer session limit (2 sesi). Game yang menggunakan kedua sesi akan membuat sys-nada masuk state Disabled.
- Beberapa game tidak kompatibel — gunakan blacklist untuk mencegah konflik.
- PNG cover ≤740px (budget heap stb_image).
MIT. Library pihak ketiga mengikuti lisensi masing-masing (lihat third_party/).
