Music player and music library manager for Linux, Windows, and macOS

Overview

Ex Falso / Quod Libet - A Music Library / Editor / Player

Quod Libet is a music management program. It provides several different ways to view your audio library, as well as support for Internet radio and audio feeds. It has extremely flexible metadata tag editing and searching capabilities.

Ex Falso is a tag editor with the same tag editing interface as Quod Libet.

https://quodlibet.readthedocs.io

https://github.com/quodlibet/quodlibet/raw/master/docs/images/paned.png

For information on how to build/install/test Quod Libet check out

https://quodlibet.readthedocs.org/en/latest/development/overview.html

Comments
  • Display a long size timescolling-bar on the window

    Display a long size timescolling-bar on the window

    Original issue 204 created by nanocmoi on 2009-05-22T09:02:53.000Z:

    It's quite tying to have to click on the time button to display the time bar. I think there is a lot of place to display such a bar all the time in the window. If the bar could be bigger than now it would be easier to navigate into long songs.

    enhancement patch UI 
    opened by lazka 47
  • Official Python 3 support

    Official Python 3 support

    With Debian's recent announcement, it seems as good a time as ever to bring up the spectre of Python 3 again.

    Things have come on a bit but I can't remember whatever happened to the notes we had for dependencies and blockers for a Py3K version of QL (PyGTK is long done now at least), and there don't seem to be any open issues to track this.

    Whilst the QL Python 3 FAQ entry states there are no plans (though that was written some time ago), if there was a plan, it should probably be maintained here now...

    opened by declension 46
  • Incorrect MPRIS volume scaling

    Incorrect MPRIS volume scaling

    The volume widget uses cubic volume scaling not linear so you can't map MPRIS's volume 1 to 1. If you do your volume will be out of sync as it is now.

    opened by JasonLG1979 41
  • Working on translation, how to apply a translation

    Working on translation, how to apply a translation

    Dear all,

    First I would like to congratulate you for the hard work over the years. I finally migrated to Quod Libet and would like to help. I wrote the French translation team to join the translation effort.

    I checked out from github and can run Quod Libet without problem.

    One question: when translatinge the French .po file, I don't see translations applied in Quod Libet interface. Examples include "File", "Add a Folder...", "Add a Location...".

    What shall I do to see and review my translations?

    Kind regards, Kellogs

    opened by ffries 41
  • Cover grid scroll performance

    Cover grid scroll performance

    I experience severe performance issues in the cover grid browser when I'm scrolling through the albums.

    This only happens when I'm not using gnome-shell and it happens with or without a desktop session, with several different window managers (tried Mate's marco, awesomewm, xmonad).

    Applying this changeset proposed in a pull request fixes the scroll performance issue.

    openSUSE Leap 42.3 QuodLibet 4.0.2

    Audio device: GStreamer (pulsesink) Python: 3.5.4 Mutagen: 1.40.0 GTK+: 3.20.10 (X11) PyGObject: 3.27.1 GStreamer: 1.8.3.0

    with proprietary nvidia driver v390.48

    bug browsers performance 
    opened by slosd 34
  • Fetch cover from last.fm

    Fetch cover from last.fm

    Original issue 780 created by [email protected] on 2011-07-21T13:24:21.000Z:

    I were trying to write plugin, that actually queries to last.fm on each song change and downloads cover for that specific album and shows it instead of image named cover.png.

    I stumbled upon problem when trying to find out how those covers are displayed. I actually looked at http://code.google.com/p/quodlibet/source/browse/quodlibet/quodlibet/qltk/cover.py but as I read code everything I found was „Pop-up image“. Wiki didn't provided any good info as well(have to admit, that I just peeked into Dev section of it). So there are some requests:

    Please point me to actual file, which takes care of displaying cover. Or Create plugin instead of me. What I've already done: http://pastebin.com/8V9huMWY

    enhancement 
    opened by lazka 33
  • Lyrics no longer available via LyricWiki API

    Lyrics no longer available via LyricWiki API

    Original issue 273 created by jrittenh on 2009-08-08T18:02:27.000Z:

    Noticed as of today, attempting to download lyrics gives the following response:

    Unfortunately, due to licensing restrictions from some of the major music publishers we can no longer return lyrics through the LyricWiki API (where this application gets some or all of its lyrics).

    The lyrics for this song can be found at the following URL: <url here>

    (Please note: this is not the fault of the developer who created this application, but is a restriction imposed by the music publishers themselves.)

    bug 
    opened by lazka 33
  • Quod Libet doesn't match FreeDesktop directories specs

    Quod Libet doesn't match FreeDesktop directories specs

    Original issue 138 created by thibaut.bethune on 2009-02-24T23:52:29.000Z:

    I've tried Quod Libet 2.0 on Ubuntu 9.04 alpha 4 and it seems that Quod Libet places its configuration files in /home/.quodlibet directory which doesn't match FreeDesktop directories specs :

    The default for $XDG_CONFIG_HOME is $HOME/.config, the default for $XDG_DATA_HOME is $HOME/.local/share. So all applications should look for those environment variables and use those default values if the variables are not set.

    This is quite important since it's not possible to easily backup config & data files if these files are not stored at the right place

    See http://www.freedesktop.org/wiki/Specifications/basedir-spec See also http://ploum.frimouvy.org/?184-cleaning-user-preferences-keeping-user-data (main post and comment#8)

    enhancement 
    opened by lazka 31
  • right click on headers causes error

    right click on headers causes error

    Original issue 14 created by tobiassaunders on 2008-09-15T13:33:52.000Z:

    right clicking on the headers causes an error: === SYSTEM INFORMATION: Quod Libet 2.0 Mutagen 1.14 Python 2.5.2 (r252:60911, Mar 1 2008, 13:52:45) [GCC 4.2.3] linux2

    === STACK TRACE Traceback (most recent call last):

    File "/usr/lib/python2.5/site-packages/quodlibet/qltk/songlist.py", line 856, in __showmenu self.__getmenu(column).popup(None, None, None, event.button, time)

    File "/usr/lib/python2.5/site-packages/quodlibet/qltk/songlist.py", line 818, in __getmenu for header in sorted(zip(map(tag, group), group)):

    NameError: global name 'tag' is not defined

    I was in the process of creating my library

    bug 
    opened by lazka 31
  • QL aborts on session logout and shutdown because X server is not available anymore

    QL aborts on session logout and shutdown because X server is not available anymore

    I run QL master ( 56b68e50c) on Xubuntu 18.04 and it has been nagging me for a very long time that when I logout from my current session or shutdown, QL doesn't retain its current state (currently playing song, filter string, ...). Investigating issue #1562, I discovered that QL abruptly aborts without saving its state on session logout (and shutdown).

    I ran quodlibet --debug capturing the output in 3 situations, and here are the shutdown messages:

    1. Quit QL (full log)

      D: 24.437: qltk.window.__restore_state: Restore state
      D: 24.438: qltk.window.__restore_position: Restore position
      D: 24.438: qltk.window.__restore_size: Restore size
      D: 24.440: main.before_quit: Saving active browser state
      D: 24.441: main.before_quit: Shutting down player device 'GStreamer: 1.14.1.0'.
      D: 24.452: PluginManager.save: Saving plugins: 8 active
      D: 24.452: PluginManager.enable: Disable 'Theme Switcher'
      D: 24.510: PluginManager.enable: Disable 'ToggleMenuBar'
      D: 24.511: PluginManager.enable: Disable 'mpris'
      D: 24.654: PluginManager.enable: Disable 'queue'
      D: 24.655: PluginManager.enable: Disable 'Website Search'
      D: 24.655: PluginManager.enable: Disable 'editplaycount'
      D: 24.655: PluginManager.enable: Disable 'CustomCommands'
      D: 24.655: PluginManager.enable: Disable 'include_saved'
      D: 24.656: _main.quit_gtk: Quit GTK: done.
      D: 25.340: _main.run: Gtk.main() done.
      D: 25.340: library.save: Saving all libraries...
      D: 25.341: SongFileLibrary.save(<libraries.SongFileLibrary object at 0x7feb4abdccf0 (quodlibet+library+libraries+SongFileLibrary at 0x29cf6c0)>): Saving contents to '/home/paulo/.config/quodlibet/songs'.
      D: 34.721: config.save: Writing config...
      D: 34.763: main.main: Finished shutdown.
      
    2. Logout (full log)

      Gdk-Message: 13:37:09.077: quodlibet: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
      
    3. Shutdown (full log)

      Gdk-Message: 13:38:22.261: quodlibet: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
      

    All processes receive SIGHUP on logout (and shutdown), so the X server also shuts down on logout (and shutdown, obviously). When QL receives SIGHUP, I get the impression that it attempts some operation that access the X server, most likely calling some GTK function, but without catching errors, so it simply aborts, not saving its state.

    So, somehow once QL starts to shutdown, it should catch errors when calling any GTK functions (or any other functions that access the X server). If that's not feasible, then it should save its state before running any such X-accessing commands.

    enhancement 
    opened by marcelpaulo 28
  • Waveform seekbar plugin

    Waveform seekbar plugin

    Original issue 1530 created by reiter.christoph on 2015-01-27T17:28:58.000Z:

    [18:06:22] <wander> hi, are there plans to allow visualization plugins - e.g. a waveform http://i.imgur.com/w8PIXFb.png? I already did some of those plugins for a different player and would really like to have them on quodlibet too [18:07:19] <wander> (or is this possible already and I missed something?) [18:10:41] <lazka> wander, played around a bit some years ago: https://bpaste.net/show/7e451bf11028 [18:11:31] <lazka> but that's not the right approach [18:11:56] <lazka> since there is buffering going on between the pipeline and the soundcard [18:12:02] <lazka> also the window can't be closed [18:13:23] <lazka> so I'm wondering if it isn't better to use an external app for that [18:13:36] <lazka> projectM for example [18:14:31] <wander> well, I care mostly about the waveform plugin, since I consider this to be a major usability improvement [18:14:34] <lazka> wander, ah you mean waveform only? [18:14:59] <lazka> oops, I didn't look at the image [18:16:03] <wander> yeah, having this right in the player would really be nice and would make seeking much more efficient [18:16:21] <lazka> wander, do you know of any gstreamer based player providing this? [18:16:52] <wander> I think clementine is gstreamer based and has something they call moodbar [18:17:12] <lazka> ok [18:17:13] <wander> that's basically a waveform with additional color highlighting [18:18:29] <wander> the main issue I saw was that there's currently no way to extend the user interface of quodlibet with such a plugin [18:21:35] <lazka> should be easy.. it can just be a one time hack to inject a widget somewhere [18:24:11] <wander> ok, then I'll do some experimenting with that [18:24:26] <wander> and btw. thx for the great player [18:24:43] <wander> in case you are the dev ;) [18:24:49] <lazka> found this: https://stackoverflow.com/questions/19454832/gstreamer-audiosink-to-output-stream-of-integers-representing-volume-levels [18:25:42] <lazka> so what we need is when a song starts, decode in the background, record the levels, then inject a widget which draws it using cairo [18:25:52] <wander> yep [18:26:20] <wander> I already developed such a plugin, but I'm not familiar with gstreamer [18:26:47] <wander> and caching is recommended [18:26:48] <lazka> and we could name it "extended seekbar" and make the waveform part optional so these guys are happy: https://code.google.com/p/quodlibet/issues/detail?id=204

    enhancement 
    opened by lazka 28
  • Re-enable Python scripts to access Quodlibet library

    Re-enable Python scripts to access Quodlibet library

    The proposed change

    Allow stand-alone Python script access to the Quodlibet library as @lazka described in #1939 for Quodlibet 3.6

    import os, sys
    sys.path.insert(0, '/home/david/quodlibet')
    import quodlibet
    from quodlibet import library
    
    quodlibet.init()
    lib = library.init(os.path.join(quodlibet.get_user_dir(), "songs"))
    

    With Quodlibet 4.6.1 this script fails with the following:

    /home/david/quodlibet/quodlibet/qltk/__init__.py:21: PyGIWarning: PangoCairo was imported without specifying a version first. Use gi.require_version('PangoCairo', '1.0') before import to ensure that the right version gets loaded.
      from gi.repository import GLib, GObject, PangoCairo
    Traceback (most recent call last):
      File "/home/david/PycharmProjects/qlbridge/access.py", line 8, in <module>
        quodlibet.init()
      File "/home/david/quodlibet/quodlibet/_init.py", line 55, in init
        init_cli(no_translations=no_translations, config_file=config_file)
      File "/home/david/quodlibet/quodlibet/_init.py", line 136, in init_cli
        _init_gettext(no_translations)
      File "/home/david/quodlibet/quodlibet/_init.py", line 76, in _init_gettext
        i18n.init(language)
      File "/home/david/quodlibet/quodlibet/util/i18n.py", line 282, in init
        assert "gi.repository.Gtk" not in sys.modules
    AssertionError
    

    Benefits of this change

    I'll continue to use a script in newer Quodlibet versions to obtain & work with the song tag values extracted from the Quodlibet library, to support remote Quodlibet operation with simplified query creation from a mobile phone or tablet.

    Any issues this might cause

    I'm not sure if this is a documentation request for the Development Guide or FAQ, or a code change would be required.

    enhancement 
    opened by davidSchlosser 0
  • ALAC files wont play with Flatpak version on Manjaro

    ALAC files wont play with Flatpak version on Manjaro

    Steps to reproduce

    1. Clean install Manjaro Linux x86_64
    2. Install flatpak via pamac flatpak
    3. Install QuodLibet via flatpak install io.github.quodlibet.QuodLibet
    4. Run QuodLibet via flatpak run io.github.quodlibet.QuodLibet
    5. Add a directory with music with various codecs (FLAC, WAV, ALAC etc.). to QuodLibet via File > Preferences > Library
    6. Start random playback of music by hitting space

    Expected Output

    All songs would be played back at random, one after another.

    Actual Output

    When hitting any ALAC encoded song along the cue QuodLibet would stop the playback and display an error: No GStreamer element found to handle media format. Media format: Apple Lossless Audio (ALAC) decoder.

    Test System

    Which version of Quod Libet?

    4.5.0, stable

    Which operating system

    • OS: Manjaro Linux x86_64
    • Host: 21D4CTO1WW ThinkPad Z16 Gen 1
    • Kernel: 6.1.1-1-MANJARO
    • Shell: zsh 5.9
    • DE: GNOME 43.2
    • WM: Mutter
    • WM Theme: Adwaita
    • Terminal: kgx
    • CPU: AMD Ryzen 5 PRO 6650H with Radeon Graphics (12) @ 3.300GHz
    • GPU: AMD ATI Radeon 680M
    • Memory: 11349MiB / 15255MiB
    • Compositor: Wayland
    • Audio server: PipeWire 1:0.3.63-1
    • Audio session manager: WirePlumber 0.4.13-1

    If it's audio-related, what back-end?

    gstreamer 1.20.5-1 extra

    Additional Information

    I tried to install manjaro-gstreamer and gst-libav packages but neither of them fixed the issue. Also, due to lack of experience (I guess), I wasn't able to get any meaningful log output. I tried journalctl _PID= and to run the app from the command line via flatpak run io.github.quodlibet.QuodLibet.

    bug 
    opened by amadeusp 0
  • Allow sorting not to use sort tags if configured

    Allow sorting not to use sort tags if configured

    The proposed change

    When sorting by artist or album, it should be possible to disable using the artistsort and albumsort tags.

    Benefits of this change

    It will be up to the user to define which tags to use. Using the *sort tags can have quite surprising results

    image

    When scrolling through songs or views to visually find stuff, this kind of sorting feels very unintuitive.

    Any issues this might cause

    It might require refactoring in multiple places.

    enhancement browsers songlist 
    opened by LoveIsGrief 0
  • Dequeue after song ended

    Dequeue after song ended

    The proposed change

    Lately I have been using quodlibet a little more intensively. I had to get back to using the queue list, since I wanted to clean up my tags meanwhile. And finally I'm still facing the "problem" of the track disappearing as soon it starts playing. I had tried to solve this in #3907.

    I would prefer that the track being played remains displayed (and selected by default) at the top of the queue. It could allow for example to change its rating, see its tags, etc. I know it's possible to get that on the player itself with right-click, but I forget it each time I need to do that. Most of the time I access the contextual menu on the track lists.

    I don't know if others see a problem here? I'd like to reopen the debate on this...

    Benefits of this change

    See above

    Any issues this might cause

    It may change habits, but I guess in that sense it wouldn't bother.

    enhancement 
    opened by jej 1
  • Disable search clearing button when there is no search text

    Disable search clearing button when there is no search text

    Discussed in https://github.com/quodlibet/quodlibet/discussions/4229

    Originally posted by stabilergriller December 25, 2022 Just a small suggestion. How about greying out the arrow pointing left in the search field, when there's no term entered?

    This is how it looks like in the moment:

    Screenshot_2022-12-25_16-52-24

    Mock up for my idea:

    Screenshot_2022-12-25_16-56-00

    (This is not something I did myself, but rather a bug that occurs when switching between light / dark version of a theme in the plugins section - I think)

    So after entering one / several characters in empty field => turn icon from grey to black When deleting character(s) => turn icon from black to grey, if no chars left

    Of course, one must also account for dark themes.

    Tested on Pop!_OS 22.04 LTS (Live CD) with QL installed from Repository (not Flatpak)

    enhancement browsers 
    opened by declension 3
Releases(release-4.5.0)
Owner
Quod Libet
Music player and music library manager for Linux, Windows, and macOS
Quod Libet
Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums)

LAKH MuseNet MIDI Dataset Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums) Bonus: Choir on Channel 10 Please CC

Alex 6 Nov 20, 2022
Real-Time Spherical Microphone Renderer for binaural reproduction in Python

ReTiSAR Implementation of the Real-Time Spherical Microphone Renderer for binaural reproduction in Python [1][2]. Contents: | Requirements | Setup | Q

Division of Applied Acoustics at Chalmers University of Technology 51 Dec 17, 2022
Telegram Bot to play music in VoiceChat with Channel Support and autostarts Radio.

VCPlayerBot Telegram bot to stream videos in telegram voicechat for both groups and channels. Supports live streams, YouTube videos and telegram media

Abdisamad Omar Mohamed 1 Oct 15, 2021
A voice control utility for Spotify

Spotify Voice Control A voice control utility for Spotify · Report Bug · Request

Shoubhit Dash 27 Jan 01, 2023
OpenClubhouse - A third-part web application based on flask to play Clubhouse audio.

OpenClubhouse - A third-part web application based on flask to play Clubhouse audio.

1.1k Jan 05, 2023
Spotifyd - An open source Spotify client running as a UNIX daemon.

Spotifyd An open source Spotify client running as a UNIX daemon. Spotifyd streams music just like the official client, but is more lightweight and sup

8.5k Jan 09, 2023
A python library for working with praat, textgrids, time aligned audio transcripts, and audio files.

praatIO Questions? Comments? Feedback? A library for working with praat, time aligned audio transcripts, and audio files that comes with batteries inc

Tim 224 Dec 19, 2022
Simple, hackable offline speech to text - using the VOSK-API.

Nerd Dictation Offline Speech to Text for Desktop Linux. This is a utility that provides simple access speech to text for using in Linux without being

Campbell Barton 844 Jan 07, 2023
Improved Python UI to convert Youtube URL to .mp3 file.

YT-MP3 Improved Python UI to convert Youtube URL to .mp3 file. How to use? Just run python3 main.py Enter the URL of the video Enter the PATH of where

8 Jun 19, 2022
commonfate 📦commonfate 📦 - Common Fate Model and Transform.

Common Fate Transform and Model for Python This package is a python implementation of the Common Fate Transform and Model to be used for audio source

Fabian-Robert Stöter 18 Jan 08, 2022
Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists with a Plex server.

PlexMusicSync Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists (m3u, m3u8) with a Plex server. The song file

Tom Goetz 9 Jul 07, 2022
A simple voice detection system which can be applied practically for designing a device with capability to detect a baby’s cry and automatically turning on music

Auto-Baby-Cry-Detection-with-Music-Player A simple voice detection system which can be applied practically for designing a device with capability to d

2 Dec 15, 2021
Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline

upai-gst-dl-plugins Guide & Examples to create deeplearning gstreamer plugins and use them in your pipeline Introduction Thanks to the work done by @j

UPAI.IO 11 Dec 11, 2022
Automatically move or copy files based on metadata associated with the files. For example, file your photos based on EXIF metadata or use MP3 tags to file your music files.

Automatically move or copy files based on metadata associated with the files. For example, file your photos based on EXIF metadata or use MP3 tags to file your music files.

Rhet Turnbull 14 Nov 02, 2022
cross-library (GStreamer + Core Audio + MAD + FFmpeg) audio decoding for Python

audioread Decode audio files using whichever backend is available. The library currently supports: Gstreamer via PyGObject. Core Audio on Mac OS X via

beetbox 419 Dec 26, 2022
Open-Source bot to play songs in your Telegram's Group Voice Chat. Powered by @Akki_ThePro

VcPlayer Telegram Voice-Chat Bot [PyTGCalls] ⇝ Requirements ⇜ Account requirements A Telegram account to use as the music bot, You cannot use regular

Akki ThePro 2 Dec 25, 2021
DeepMusic is an easy to use Spotify like app to manage and listen to your favorites musics.

DeepMusic is an easy to use Spotify like app to manage and listen to your favorites musics. Technically, this project is an Android Client and its ent

Labrak Yanis 1 Jul 12, 2021
Muzic: Music Understanding and Generation with Artificial Intelligence

Muzic is a research project on AI music that empowers music understanding and generation with deep learning and artificial intelligence.

Microsoft 2.6k Dec 30, 2022
DCL - An easy to use diacritic library used for diacritic and accent manipulation.

Diacritics Library This library is used for adding, and removing diacritics from strings. Getting started Start by importing the module: import dcl DC

Kreus Amredes 6 Jun 03, 2022
PianoPlayer - Automatic fingering generator for piano scores

PianoPlayer - Automatic fingering generator for piano scores

Marco Musy 571 Jan 02, 2023