github clangen/musikcube 0.31.0
musikcube 0.31.0
on GitHub

windows users: do not unzip the new build over an existing install – please use a new directory. data is not stored in the installation directory, so your libraries will remain intact.

android users: you also need to upgrade your musikcube installation to 0.31.0, otherwise new features will not work (and some old features may not function properly).

api users: documentation has been updated here.

0.31.0 is a big release, focusing on the following:

  • first-class playlist editing support in the server layer, and and on the Android client
  • the introduction of audio encoders into main app and SDK
  • gapless playback on Android (experimental)
  • a massive overhaul of the Android code
  • a cleaned up C++ SDK

a more detailed list of changes as follows…


  • added support for Ubuntu Artsy
  • added preliminary support for audio encoder plugins.
  • added stockencoders plugin with support for encoding MP3 (lame) and OGG/Vorbis audio.
  • fixed and exposed album-level artwork. previously it was track-only.


  • gapless playback (for supported media)! enable in settings > playback engine > “ExoPlayer Gapless (experimental)”
  • playlist create / rename / update / delete support
  • album art is now displayed in album rows when browsing content (e.g. albums by this artist, artists in this genre, etc)
  • fixed a really bad bug that could cause locally cached media to become corrupted in a very specific scenario (unreliable connectivity while the server is performing on-demand transcoding)
  • added a simple “spotlight” tutorial for new users that explains switching between remote and streaming playback modes.
  • major refactor to the entire code base, including the following:
    • a brand new data layer interface based on RxJava. this should position the app for lots of new, fun stuff in the future.
    • a new dependency injection implementation
    • a view component layer for sharing functionality across screens
  • updated Glide from v3 -> v4
  • updated to Android Studio 3.0.1 and related tooling
  • fixed notification icon color


  • removed all Destroy() methods, standardized on Release() across the board
  • added the following to ISimpleDataProvider:
    • QueryCategoryWithPredicate()
    • SavePlaylistWithIds()
    • SavePlaylistWithExternalIds()
    • SavePlaylistWithTrackList()
    • AppendToPlaylistWithIds()
    • AppendToPlaylistWithExternalIds()
    • AppendToPlaylistWithTrackList()
    • RemoveTracksFromPlaylist()
    • RenamePlaylist()
    • DeletePlaylist()
  • added new interfaces:
    • IValue
    • IEncoder
    • IEncoderFactory
  • removed interfaces:
    • IRetainedTrack
    • IRetainedTrackWriter
  • renamed interfaces
    • IMetadataMap -> IMap
    • IMetadataMapList -> IMapList
    • IMetadataReader -> ITagReader
    • ITrackWriter -> ITagStore
    • IMetadataValue -> IValue
    • IMetadataValueList -> IValueList


  • renamed project from websocket_remote to server, and promoted to a top-level component in the workspace
  • added correct LAME headers after transcoding to fix gapless playback of encoded files.
  • added the following messages to the websocket server:
    • save_playlist
    • rename_playlist
    • delete_playlist
    • append_to_playlist
    • remove_tracks_from_playlist
    • query_tracks_by_external_ids
  • renamed the following track fields:
    • visual_genre_id -> genre_id
    • visual_artist_id -> artist_id
  • added the ability to query album art by id
  • fixed HttpServer to ignore non-GET verbs
  • added “predicated category queries”, e.g. “all the albums for this artist” or “all the artists in this genre”, etc.
  • added artist and artistId to album response (previously it was only return albumArtist and albumArtistId)
  • fixed bugs related to HTTP “Range” header parsing and generation
  • fixed a bug in the websocket functionality that was returning invalid invalid_request responses… yeah.
2 years ago