Skip to content

Mufify 1.4.3

Choose a tag to compare

@Yefee8 Yefee8 released this 12 Sep 09:25
· 13 commits to main since this release

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 .lrc beside 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 nothing

ACCESS_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.
  • minSdkVersion 26 (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 .lrc beside 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.