Exaile 4.0 release notes

Johannes Sasongko edited this page Aug 7, 2018 · 52 revisions

NOTE: This is a draft.

This document details changes made to the Exaile music player between its 3.x series and the new version 4.0.0, released on xxxx-xx-xx.

The major change in Exaile 4 is that it uses GTK+ 3 and GStreamer 1. Existing users are strongly recommended to upgrade because GStreamer 0.10, used in earlier versions, is unmaintained and may contain security issues.

The move to GTK+ 3 means Exaile is now able to use dark GTK+ themes and work well with HiDPI displays. There are minor UI differences between Exaile 3 and 4 to accommodate the toolkit upgrade, but the overall layout of the app is still exactly the same.

Table of contents

Fixes and improvements

  • Exaile's playback engine has been rewritten. There is only one engine now, which supports gapless, fade in/out, and crossfade features (the latter is still experimental).
  • Massive speed improvements, can handle 50000+ song library (#457, #458, #465).
  • On RTL locales, keep playback controls in LTR order (#144).
  • Disallow mouse scrolling on numeric tags in the tag editor to prevent accidental changes (#6).
  • Ogg Opus tags can now be read correctly (#150).
  • Show loading indicator when opening large playlists (#135).
  • Fixed bug on tracklist selection when a new track plays while the tracklist is being filtered (#80).
  • New tracklist columns: Year (#127), Language (#252, tagger support in #208), Website.
  • Save the Track Properties dialog location and size (#212, #236).
  • MP3 transcoding now uses the lamemp3enc GStreamer plugin instead of lame (#214).
  • Smart playlists can now be correctly exported (#216).
  • The progress bar now seeks on mouse scroll (#230).
  • Fixed Track Properties dialog not showing up when the BPM tag is non-numeric (#209, #235).
  • Unknown tags are now shown as empty instead of "Unknown", except in the title field (#250).
  • Matroska files with no TimecodeScale are now supported.
  • Fixed showing of Matroska discnumber and tracknumber tags.
  • Exaile now includes a 128x128 icon.
  • When going up the directory hierarchy in the Files panel, the previous directory is selected.
  • Searching on the collection and tracklist can be done regardless of diacritics (#176).
  • Fixed intermittent segfault when quickly browsing through menus (#97, #283).
  • Support for .aac files.
  • Fixed reading certain wav files.
  • Improved support for reading .aif/.aiff/.aifc files (#463).
  • Fixed failure on deleting tags from certain formats (#152, #286).
  • Smart playlist now supports filtering by bitrate (#274).
  • Smart playlist now supports matching by a whole word (#486).
  • Smart playlist now supports a user-specified default sort order (#469).
  • The search language now supports the "contains word" (w=) and "does not contain word" (!w=) operators. They have also been added to the smart playlist dialog.
  • A lot of dialog windows that were previously parentless are now properly attached to an Exaile window.
  • When using PulseAudio, other PA clients such as volume controls will classify Exaile's stream as music and correctly show Exaile's application name and icon (#324).
  • Exaile now comes with Bash and Fish completion scripts (#132 for Bash).
  • When Exaile fails to play a file due to missing GStreamer plugin, it tries to give the option to install the plugin using gstpbutils (#35).
  • New dialog to list available shortcuts: Help → Shortcuts. A few new shortcuts have been added.
  • New menu entry: Help → Open error logs.
  • Pressing Spacebar on the tracklist now triggers the play/pause action (#441).
  • Covers are now associated with album+artist+date instead of just album; if the musicbrainz_albumid tag is available then it is used instead (#306, #501). This may require covers to be re-fetched.
  • Playlist widget: implement sorting across multiple columns (#510).
  • Fixed track and disc number parsing on remote tracks (#520).
  • There is an option to tell GTK to use a dark theme if available.
  • On Windows and OSX, we now use pyinstaller to produce frozen executables, and our installer will no longer require installation of external dependencies.


  • New plugins:

    • mpris2 implements most of the MPRIS 2.2 spec for external control of Exaile from compatible clients (e.g. GNOME Shell, KDE Plasma, and Playerctl). A few minor functionalities are still missing, and there is no plan to implement the optional TrackList interface.
    • keybinder replaces the xkeys plugin, providing multimedia keys support for setups where D-Bus is not available. It requires libkeybinder3, which uses Xlib directly and thus won't work on Wayland or MS Windows.
  • Fixes/improvements/changes:

    • All plugins distributed with Exaile now have version numbers identical to Exaile's (#82). This is mostly to keep things more consistent than they have been in the past. External plugins are not affected and may use any versioning scheme they consider appropriate.
    • Plugins can now specify dependencies and supported platforms in their PLUGININFOs. Plugins with missing dependencies are shown with a warning icon (#503). Plugins for the wrong platform are hidden by default.
    • bpm can detect track BPMs using GStreamer's bpmdetect element.
    • equalizer presets have been normalized so they are of somewhat similar loudness (#104). Existing configs may not be affected.
    • grouptagger can export group tags to JSON. It can't import them yet.
    • ipconsole has been updated for IPython 5, although some features are still buggy.
    • minimode's Playlist window now acts more like a normal window than a popup (it doesn't hide automatically) (#222).
    • moodbar has been rewritten for GTK+ 3. However, some visualization options have not been reimplemented.
    • When previewdevice is enabled, moodbar also replaces the secondary (preview) player with a moodbar (#81).
    • screensaverpause also supports MATE and Cinnamon Screensaver.
    • winmmkeys now has experimental support for the keyboard Python module.
  • Need love:

    • abrepeat, lastfmcovers, lastfmdynamic, librivox, minimode, and podcasts are in various levels of disrepair.
    • amazoncovers, awn, bookmarks, currentsong, lastfmlove, massstorage, multialarmclock, musicbrainzcovers, shutdown, and streamripper need testing. If you use any of these plugins, please let us know whether they work.
  • Removed plugins:

    • contextinfo, droptrayicon, and ipod depend on APIs or libraries that are not compatible with the new PyGObject API.
    • exfalso has not worked with up-to-date versions of Ex Falso for a while now.
    • gnomemmkeys and mpris are superseded by mpris2.
    • lyricsviewer has been merged into core Exaile (#421). To download lyrics from online services you will still need a lyrics provider plugin.
    • notifyosd has been merged into notify (#404).
    • xkeys is superseded by keybinder.

Any help in porting forward some of the missing functionalities will be appreciated.

Dependency changes

  • Exaile now depends on GTK+ >=3.10 and GStreamer >=1.6.
  • Exaile now requires the bsddb or bsddb3 python module.
  • The Python version requirement has been bumped up to 2.7.
  • Plugins:
    • daapclient and daapserver now depend on system spydaap instead of bundling its own (#445).
    • jamendo now uses the built-in json module from Python instead of bundling simplejson (#205).
    • lastfmlove now depends on system pylast instead of bundling its own (#183).
    • musicbrainzcovers now depends on system musicbrainzngs instead of bundling its own (#206).
    • podcasts now depends on system feedparser instead of bundling its own (#242).
    • wikipedia now uses WebKit2 instead of WebKit.

The full dependency list can be viewed in the DEPS file.

For packagers

  • Please note the dependency changes above.
  • Some of the Makefile variables have changed. Some are now not configurable through environment variables, but rather have to be passed in to the make command (e.g. make FOO=1 instead of FOO=1 make). Please let us know if this is inconvenient to use in your packaging system.
  • There is a new MANPREFIX variable to set where manpages are installed (#70).
  • The Bash and Fish completion scripts are new. Please check that they end up in the right locations.
  • When PREFIX is not /usr, the Makefile will by default install config files to $PREFIX/etc instead of to /etc (#62). For example, if PREFIX is /usr/local (e.g. on FreeBSD), config files will be installed to /usr/local/etc.

Known issues

  • If the Collection panel doesn't render correctly (overlapping rows), it's because your GTK+ theme is missing support for GtkTreeView separators (#362, #527). Known upstream bug reports: Ambiance/Radiance, Box, Breeze.
  • If you are running Exaile on MSYS2 and it crashes often or outputs garbled audio, this may be due to various bugs in GStreamer's WASAPI sink (#532, #534). To avoid this issue, go to Edit → Preferences → Playback and set Audio Sink to DirectSound (or set it to Automatic and choose an Audio Device marked "[directsound]").
  • After upgrading to Exaile 4, you may need to rescan the library (Tools → Rescan Collection) if Exaile can't find files which are present on disk (#188).
  • The splash screen doesn't show on most platforms (#342).
  • The mainmenubutton plugin may crash due to a GTK+ 3.20 bug which has been fixed in GTK+ 3.22 (#257).
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.