Repository navigation
Mufify 1.4.3
An offline-only music player for Android. Plays the files a streaming service
will not — FLAC, ALAC, and whatever else is already on the phone — and shows you
what they actually are.
Install
Download mufify-1.4.3.apk below and open it on the phone. Android will ask
you to allow installing from this source; that is expected for an APK that did
not come from a store.
Upgrades in place from 1.3.0 onwards. Anything older than 1.3.0 was signed
with the debug key and has to be uninstalled first.
Since 1.4.2
One name written two ways is one thing
A library tagged by a dozen different tools holds "Linkin Park", "LINKIN PARK"
and "linkin park" as three artists. The statistics ranked them as three, which
split a year of listening three ways and showed you two strangers next to a band
you know.
Spellings of one artist's name are now always counted together. That one is
not a setting: there is no reading of the data under which three spellings of
one band are three bands, so a switch would only ever be turned on.
Duplicate songs can be listed once, and that one is a setting — on by
default, in Settings → Duplicates. It hides a file you own, and two copies can
legitimately be a CD rip and a vinyl rip you want side by side.
Three things have to agree before anything is hidden: the titles, the artists —
compared separately, so a long band name cannot swamp a one-character difference
between "Song Pt. 1" and "Song Pt. 2" — and the lengths, so a live take is never
hidden behind the studio version.
Case, accents and punctuation are folded away before any of that, so "LINKIN
PARK" and "Linkin Park" match exactly rather than approximately. Turkish dotted
capitals fold correctly, and the folding does not depend on your phone's
language.
A preset picker instead of two rows of chips
The equaliser had eight built-in presets in one sideways-scrolling row and your
saved ones in another. A row you scroll hides its own contents — the selected
chip was regularly off-screen — and two rows of identical chips made your own
presets look like more built-ins.
There is now one row that says what is selected, opening a sheet with
everything in it under two headings, "Built in" and "Yours". Nothing is hidden
and nothing needs scrolling back into view.
Presets you made are drawn in the accent colour, in the sheet and in the
row. It is the one piece of colour in the control and it means exactly one
thing: this is yours, you named it, you can delete it. Long press one for share
and delete.
Two fixes came with it. Saving a preset used to leave the picker showing the
list it had before — it was saved, it just did not appear. And choosing one of
your own with nothing playing did nothing at all, silently, where a built-in
would have been remembered and applied when you pressed play. Both behave the
same now.
What it does
- Playback of local files, lossless first-class, with background playback,
lock-screen and notification controls, and a persistent queue. - Bluetooth transport, including next and previous from a remote.
- Lyrics from the file or from a
.lrcbeside it, following the music when
they carry timestamps. - A ten-band equaliser with seven presets, every band adjustable, and
presets you can save and share as a line of text. - Five shuffle algorithms, each explained where you pick it.
- Local playlists with drag-reorder, a cover mosaic or a picture you framed
yourself, a library picker, and liking. - Liking for tracks, albums and playlists, with a filter for each.
- Deleting tracks and albums, through Android's own confirmation, with a
multi-select mode for doing several at once. - On-device listening statistics by week, month and year, with a Wrapped
summary. - Turkish and English, dark and light.
No network, and it is enforced
There is no network layer. Not a disabled one, not one behind a setting.
This release ships without the INTERNET permission —
plugins/withOfflineOnly.js strips it from the release manifest, so a change
that introduces a network call does not fail review, it fails to work. Check it
yourself:
aapt2 dump permissions mufify-1.4.3.apk | grep INTERNET # prints nothingACCESS_NETWORK_STATE does survive, pulled in by a dependency. It cannot open a
connection — that needs INTERNET, which is absent — but Android renders it as
"view network connections", so it is worth naming rather than leaving you to
find it.
Worth knowing
- The APK is universal — every ABI in one file, which is why it is large. What
gets installed is a fraction of that. minSdkVersion26 (Android 8.0), targets 36.- Ten equaliser bands need Android 9; below that the device's own bands are
used, usually five. - Deleting files needs Android 10. On Android 10 the system asks once per file.
- There is no crossfade, and no fade at the track seam — see
ADR 023. - A
.lrcbeside a track is readable where the platform still allows a raw file
path: up to Android 12. From Android 13 the media permissions cover audio and
not a text file next to it, and the embedded lyrics are used instead.