Skip to content

Mufify 1.0.0

Choose a tag to compare

@Yefee8 Yefee8 released this 03 Aug 18:29

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.0.0.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.

Upgrading from 0.1.0 works in place — this build's version code is higher, so
nothing needs uninstalling.

What it does

  • Playback of local files, lossless first-class, with background playback,
    lock-screen and notification controls, and a persistent queue.
  • Five shuffle algorithms, each explained where you pick it.
  • Local playlists with drag-reorder and cover mosaics, plus liked songs.
  • On-device listening statistics by week, month and year — top tracks,
    artists, albums and playlists, with a Wrapped summary.
  • The technical truth of a file on a monospaced spec strip: container,
    sample rate, bit depth, bitrate, channels, size.
  • Turkish and English, dark and light.
  • A statistics switch, if you would rather it kept no history. Turning it
    off stops new writes and leaves what is already recorded alone.
  • An animation speed setting — Normal, Fast, or Instant.

Since 0.1.0

  • The app has its own icon and splash screen.
  • Importing a folder indexes that folder, instead of adding it and then
    sweeping the entire device.
  • Pull-to-refresh is gone from the library. It ran a full rescan — a minute
    of work started by the gesture people make to get back to the top of a list.
    Scanning is the button that says what it costs.
  • Now Playing no longer draws through the queue. Two stacked full-screen
    sheets were compositing in the wrong order, which put the spec strip and the
    track duration in front of the queue's rows and turned the rows behind them
    black.
  • Bottom sheets clear the navigation bar. The long-press actions and the
    track-info sheet had their last row behind the system buttons.
  • Played entries in the queue are dimmed once, rather than three different
    ways that read as a shadow.
  • The queue opens with the same tuned spring as Now Playing, and its rows are
    ready before the sheet finishes arriving.
  • The media notification carries artist and album, and the app's own artwork
    placeholder when a track has no cover.
  • A listen is counted against the duration the player reports, not the one the
    scanner stored. A track MediaStore had not finished reading counted as no
    plays at all.

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 permissionplugins/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.0.0.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

  • Signed with a debug key. Fine for sideloading, not fine for the Play
    Store. It also means a future Play-signed build cannot replace this one
    without uninstalling first.
  • The APK is universal — every ABI in one file, which is why it is ~128 MB. What
    gets installed is a fraction of that.
  • minSdkVersion 26 (Android 8.0), targets 36.
  • No favourite button in the media notification: expo-audio does not expose
    MediaSession custom actions. The reasoning and the options are in
    docs/adr/015.