Audiofilus
Music player for Linux handhelds

Your music keeps playing while you game.

Audiofilus is a pixel-art music player with album covers, visualizers, eight arcade games and a chiptune tracker. Close it, open an emulator, and the music goes on. Turn the screen off and control it from your pocket.

Knulli · muOS · ROCKNIX · ArkOS · dArkOS · EmuELEC — also on Linux and Windows desktops, and on iPhone.

The Now Playing screen: album cover, track info and a spectrum visualizer pulsing with the song
  • MP3
  • AAC / M4A
  • ALAC
  • FLAC
  • Ogg Vorbis
  • Opus
  • WAV
  • AIFF
  • WMA
  • DSD (DSF · DFF)
  • NSF · SPC · GBS · VGM · HES · KSS · AY · SAP
  • SID · YM · VTX · PT3
  • MOD · XM · IT · S3M
  • CUE sheets
  • M3U playlists
Support

Keep it playing

Audiofilus is free, with no ads or paywalls, and I make it in my spare time. If it plays on your handheld every day, a coffee helps me keep adding features and fixing what you report.

Buy me a coffee on Ko-fi
Background play

A player that stays out of the way

The audio lives in its own service

The interface is just a remote. Close it and the music keeps going; launch a game and it still plays, with gapless track changes and a quick fade when you pause.

Controls from inside any game

Hold FN and tap a button to pause, skip, go back or seek. Your headphones' play button works too, over Bluetooth or cable: one press pauses, two skip, three go back.

Sleep mode for your pocket

Press START twice or the power button: the screen turns off, the CPU slows down and the triggers become gestures. Close the lid and it stays asleep. On an RG34XX-SP it draws about 260 mA in this mode: around 11 to 12 hours of music on its 3300 mAh battery.

Help is one button away

Hold FN on any screen to see what every button does there.

The controls guide over the player, listing the buttons for on-screen, everywhere, sleep and background use

The controls guide, shown while FN is held.

The More menu with Album, Artist, Add to a playlist, Queue, Shuffle, Repeat, Screen off, Background and Quit

START opens the More menu, including “Background” to leave the app and keep listening.

Visualizers and games

Something to look at

Nine visualizers that follow the beat, from pixel scenes that are light on the CPU to MilkDrop with its classic .milk presets. Colors come from the album cover. Any of them can also play dimmed behind the player.

Lake visualizer: a night lake whose lily pads ripple with the music
Lake ripples on the beat
Drift visualizer: a car driving down a lit road at night
Drift three cameras
Trench visualizer: flying down a city canyon
Trench city canyon
Plasma visualizer: dithered glowing plasma
Plasma dithered
Tunnel visualizer: a pulsing ring tunnel
Tunnel pulses with bass
Waves visualizer: an oscilloscope trace
Waves oscilloscope
Bars visualizer: spectrum bars with falling peaks
Bars spectrum
Ridges visualizer: stacked spectrum lines rising like the Unknown Pleasures cover
Ridges stacked spectrum
MilkDrop visualizer: a glowing kaleidoscope warping to the music
MilkDrop Winamp presets
Crypt: a hooded hero steps through a dungeon whose floor tiles flash on every beat, with slimes, coins and a rhythm bar
Crypt rhythm roguelike
Blocks: a falling-blocks game played next to the mini player
Blocks falling blocks
Rhythm: notes fall down lanes built from the song's drums, with a PERFECT hit message
Rhythm drum lanes
Runner: a pixel runner with headphones jumps speakers and ducks under flying vinyls that arrive on the song's drums, under a dim plasma sky
Runner jump on the kick
Snake: the snake steps on the song's beat subdivisions over a grid of dots that pulse with it
Snake moves on the beat
Ships: a ship firing upward at pixel aliens over a starfield
Ships fires on eighths
Duel: a one-bit vinyl monster fires notes while a heart dodges inside a box
Duel battles to the beat
Name that song: four songs from the library to choose from while one plays
Name that song ten rounds
Tracker

Make your own chiptune

An LSDJ style tracker for the D-pad, with a touch of PICO-8: chains and phrases, instruments with envelopes and tables, grooves with swing, editable waves, 21 effect commands and a piano roll. Write for a Game Boy's four channels or go Free with eight synth channels. Import MOD, XM and LSDJ songs, export as WAV, XM or MOD, and play or sync it from a USB MIDI keyboard or drum machine. Exports land in your library, ready to play in the background like anything else. Tracker guide.

The tracker playing Pocket Pop: a phrase with its notes, instruments and volumes lighting up as they play, then the song view with live oscilloscopes per channel

The games and the tracker live behind one Games entry in the screens dock, each game with its own record. And there are a few secrets hidden around the app.

Colors

Every album paints it

The interface takes its colors from the cover that's playing. Change the album and the whole player, the visualizers and the games follow.

Shown with four albums from a real library: each cover gives two accents and a tint for the background.

The player switching between four albums, its accent going orange, blue, green and pink with each cover
Synced lyrics on Now Playing: three dots fill up during the intro, then each line tints with the album's color as it is sung, the lines around it fading toward the edges
Lyrics

Sing along

Synced lyrics tint word by word as they're sung, with dots counting down the instrumental parts. They come from a .lrc next to the song, from its tags, or from LRCLIB online.

Pick another version from the list, nudge the timing by half a second, or keep it offline. The lyrics in this animation are made up.

Sound

Tune it the way you like

ReplayGain

Every song at the same loudness, or every album, or automatic: album in order, song on shuffle. It never pushes a song past its peak.

Graphic or parametric equalizer

Ten bands with presets for rock, metal, vocals, bass and more, or a parametric one with up to ten bands (peak, shelves, pass filters) and its curve on screen. Flat, it costs nothing.

AutoEQ and crossfeed

Search for your headphone model and its AutoEq correction goes into the parametric equalizer. Crossfeed makes hard-panned stereo easier on the ears with headphones.

Crossfade, DSD and CUE sheets

Up to 12 seconds of crossfade that leaves albums gapless. DSD files play, albums ripped to one file with a CUE sheet show up as their tracks, and the output runs at 44.1, 48, 96 or 192 kHz, with a high-quality resampler on the desktop (a light one on handhelds, to save battery).

The equalizer: ten vertical sliders from 31 Hz to 16 kHz with the Rock preset
Stats: total plays and hours, last month, and the most played artists

Stats from everything you've played, counted by the service even with the player closed.

Now Playing with a heart on a liked song and a moon with 26 minutes left on the sleep timer

A heart for liked songs, a moon with the minutes left on the sleep timer.

Your listening

It remembers what you play

Liked songs and ratings

Like a song or rate it from one to five. On a Subsonic, Navidrome or Jellyfin server, the hearts and stars sync both ways.

Recent, most played and stats

Lists that build themselves, plus your hours, top artists, albums and songs.

Scrobbling

Sign in to Last.fm with a QR code, or paste your ListenBrainz token. Listens wait while you're offline and go out when you're back, and plays count on your own server too.

Sleep timer

Stop the music after 15 to 90 minutes or at the end of the song, even with the player closed.

Alarm

Wake up to a playlist or a station, with the volume rising little by little, even with the player closed.

Sources

Your files, your server, the radio

Everything shows up in the same library and the same player. Remote songs are cached on the SD card so the next listen is free.

Local

Your library

Folders, tags, embedded and folder covers, M3U playlists and your own playlists. Scanned once, then only new files are read. Synced lyrics light up line by line, from a .lrc, the tags or LRCLIB. Console soundtracks too: NES, SNES, Game Boy, Genesis and more, one track per song. Fix tags and missing covers from MusicBrainz, compute ReplayGain, and let smart playlists fill themselves.

Server

Subsonic

Navidrome and other Subsonic or OpenSubsonic servers. Songs stream, stay cached for the next listen, and can be downloaded. Edit their playlists from the app.

Server

Jellyfin

Sign in with your Jellyfin user and browse its music library and playlists like your own files.

Live

Internet radio

Thousands of stations from radio-browser.info, by country or genre, with the current song title from the stream. Bring your own .m3u or .pls station lists, or add a station by its address. HLS streams play too.

Episodes

Podcasts

Top shows for your country, search, or any RSS feed by address. Episodes download for offline listening and remember where you stopped.

Long listens

Audiobooks

.m4b files and books in folders: it remembers where you were in each one, with chapters, 30-second skips and speed without changing the pitch.

Bring your own

YouTube Music

Copy your own yt-dlp next to the app and search appears: listen without downloading, or save songs into your library with cover and tags.

Scene

Module archives

The Mod Archive, Modland, VGMRips and AMP in one screen: browse what's popular, new or random, search, listen, save to your library or open a module in the tracker. They show up in Search too.

Send what's playing to a speaker or TV on your network (DLNA/UPnP or Chromecast), share your library with DLNA, or let your phone send music to the handheld. How it works.

Search with All, Library and YouTube filters; songs you already have are checked
One search for the library and YouTube. A check marks songs you already have.
The player with a STREAMING badge while a song loads
Streaming songs get a badge, and you can keep them.
The player showing a live radio station with its current song
Radio plays live, with the song title from the station.
Screens

Made for a D-pad

SELECT opens a dock with every screen; press it twice to jump back to the last one. A QWERTY on-screen keyboard handles search and playlist names. Interface sounds are optional, in two separate switches for menus and for music actions.

Any screen

From square to ultrawide

The layout adapts to the screen's real width instead of picking from a few fixed shapes, so it fills a 1:1 RGB30, a 3:2 clamshell and a 21:9 monitor.

Player on a 1:1 screen
1:1
Player on a 4:3 screen
4:3
Player on a 3:2 screen
3:2
Player on a 16:9 screen
16:9
Player on a 21:9 screen
21:9
Install

Through PortMaster

KnullimuOSROCKNIXArkOSdArkOSEmuELEC
  1. Open PortMaster on your handheld, find Audiofilus in the list and install it (its page).
  2. Or download audiofilus-portmaster.zip from the latest release and unzip it into your ports folder.
  3. Open Audiofilus from Ports and pick your music folder.
  4. Optional: put a yt-dlp binary in the app's yt-dlp/ folder to enable YouTube Music.

On muOS you can skip PortMaster: copy audiofilus.muxapp to the ARCHIVE folder of your SD card and install it from the Archive Manager; it shows up under Applications.

On a Linux or Windows PC, see Desktop.

Each system is detected at startup. Lid, power button, battery saver and volume use that system's own tools; on a desktop all of that is skipped.

Build from source

One command

Written in Go without cgo for the handhelds. Codec libraries are loaded at runtime when the system has them.

# with Docker, nothing else to install
git clone https://github.com/juanvillacortac/audiofilus
cd audiofilus
docker build --target dist --output dist .

# or with Go installed
./build.sh

Both leave the desktop and arm64 binaries plus the PortMaster zip in dist/.

Desktop

At home on your PC

The same player runs on Linux and Windows, one small binary. On Linux it fits in like a native app on GNOME, KDE, Hyprland and Omarchy.

In your app launcher

Audiofilus shows up with its icon, and right-clicking it offers play/pause, next and previous. Window rules and docks recognize its window. Files and folders open with it from your file manager, on Linux and Windows.

Media keys and your bar

It speaks MPRIS, so your keyboard's media keys, headphones and the desktop's media widget control it, with the cover and the song title. On Omarchy that works with nothing to set up.

Still plays in the background

Close the window and the music keeps going (a setting, on by default on the desktop); open it again and it picks up where it is, no splash. Quit stops everything.

In your system tray

The Audiofilus CD sits in the tray, on Linux and Windows: click it to open the player, middle-click to pause, or open its menu for what's playing, play/pause, next, previous, shuffle and quit.

Any window shape

Stretch it wide or make it tall and narrow: in portrait it switches to a phone-style player with a big cover, still in crisp pixels.

Linux

One line to install

curl -fsSL https://juanvillacortac.github.io/audiofilus/install.sh | sh
  1. Downloads the latest release for x86_64 or aarch64 into ~/.local/share/audiofilus.
  2. Links audiofilus into ~/.local/bin.
  3. Adds Audiofilus to your app launcher. Run it again any time to update; your settings stay.

Or set it up by hand

  1. Download audiofilus-linux-amd64.tar.gz (or -arm64) from the latest release and unpack it anywhere.
  2. In that folder, run ./audiofilus desktop install. It adds the launcher entry and the icon to ~/.local/share.
  3. Open Audiofilus from your app launcher. If you move the folder, run step 2 again.

Uninstall: audiofilus quit; audiofilus desktop uninstall; rm -rf ~/.local/share/audiofilus ~/.local/bin/audiofilus*

Windows 10 or later: download audiofilus-windows-amd64.zip, unzip it anywhere and run audiofilus.exe.

iPhone and iPad

In your pocket, for real

The same pixel player on iOS, made for your fingers: everything is tappable, lists scroll under your thumb with momentum, and the music keeps playing with the screen locked.

Now Playing on an iPhone: a big album cover with the vinyl peeking out, the song, the controls and the spectrum, with large touch buttons at the bottom
The library on an iPhone: a tabs button at the top, the song list, and a mini player with previous, back 10 seconds, pause, forward 10 seconds and next
The library tabs drop down from the top bar when tapped, Albums is picked and the menu slides back up

Touch first

Tap rows, covers, tabs and buttons; drag lists with your thumb; the button bar has real buttons, and the games have touch controls of their own. In portrait, tabs open from a button.

Lock screen and Control Center

The cover, the song and the controls on the lock screen, in Control Center, on your headphones and in CarPlay. AAC from iTunes and AAC radio play through Apple's own decoder.

Your music, your way

Copy songs into On My iPhone → Audiofilus in the Files app, pick any folder from iCloud Drive, or skip local music and stream from Subsonic, Navidrome or Jellyfin, radio, podcasts and YouTube Music. Songs also open in Audiofilus from Files and other apps.

An unsigned audiofilus-ios-unsigned.ipa comes with every release: install it with Sideloadly or AltStore, which sign it with your own Apple ID. Or add the source https://juanvillacortac.github.io/audiofilus/altstore.json to AltStore, SideStore or LiveContainer: new releases show up there as updates.

Roadmap

Beyond handhelds

The same player on every screen you have.

Runs today

Desktop

Linux and Windows, with launcher, tray, media keys, mouse and touch, and crisp pixel scaling at any window shape. Next: layouts made for big windows.

Runs today

iOS

iPhone and iPad as an unsigned app: touch-first interface, background playback, lock screen and Control Center. Next: a signed build.

Planned

Android

The same mobile app on Android, with background playback through the system's media session.