Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Exaile 4.0 release notes
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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 FOO=1instead of
FOO=1 make). Please let us know if this is inconvenient to use in your packaging system.
- There is a new
MANPREFIXvariable 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.
/usr, the Makefile will by default install config files to
$PREFIX/etcinstead of to
/etc(#62). For example, if
/usr/local(e.g. on FreeBSD), config files will be installed to
- 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).