MetroMusic 1.0
A music player for Android in the Windows Phone 8 idiom, built on
MangoTile. It plays what is already on the phone, and
everything that talks to the network is optional.
The library is the start screen. The panorama you land on is it — artists, albums, songs,
genres, more, history and settings, circular, so settings sit one swipe to the left of where you
start and anything is one swipe from launch. Long lists carry the WP8 jump grid over Latin and
Cyrillic; tapping a section header searches inside that section; a cover flows into the page it opens.
The full player rises out of the mini player rather than arriving as a page.
Playback is Media3 in a media session: notification, lock screen, headset and Bluetooth controls,
audio focus, and playback that outlives the activity. Sleep timer with a fade, equalizer over the
device's own bands, a volume banner in place of the system panel, and a home-screen tile.
Apple Lossless is decoded in the app. Android ships no ALAC decoder, and where there is none
Media3 raises no error: it marks the track unsupported, renders nothing, and runs the position against
the clock — a player that appears to play an album in silence. There is now a software decoder behind
a renderer added after the platform's own, at 16 and 24 bits, hi-res not cut down on the way
through. The length of a file whose duration MediaStore leaves empty is measured from the container.
The queue survives being closed. It comes back paused and at the start of the track, resolved
from the library by id. play next inserts after the last block queued rather than always next, so
several albums play in the order they were picked.
Names that real files spell badly. One credit string is split into several artists (feat., &,
,, vs.) and filed under every one of them, with the display credit left alone; genre tags that
differ only in case or punctuation fold onto the spelling most of the library uses. Album metadata is
written to the tags inside the files, which is the only level where a save sticks from Android 10 on.
Last.fm and Genius, both optional. Scrobbling is local-first: a play is written to disk with the
second it started and sent when a validated network appears, so an hour underground turns up in the
right order. Favourites can be kept the same as loved tracks, in both directions, as a three-way merge
that only ever compares music actually on the device. Covers are fetched for albums whose files have
none, and lyrics are read from Genius with no API token.
Twenty accents, light and dark, one backdrop behind every page, switchable gestures, and every string
in strings.xml with counts through <plurals>.
minSdk 26 · compileSdk 36 · GPLv3 · third-party notices are in the app, on settings → about.