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
🎵 Python sound notifications made easy

chime Python sound notifications made easy. Table of contents Table of contents Motivation Installation Basic usage Theming IPython/Jupyter magic Exce

Max Halford 231 Jan 09, 2023
Scrap electronic music charts into CSV files

musiccharts A small python script to scrap (electronic) music charts into directories with csv files. Installation Download MusicCharts.exe Run MusicC

Dustin Scharf 1 May 11, 2022
Analyze, visualize and process sound field data recorded by spherical microphone arrays.

Sound Field Analysis toolbox for Python The sound_field_analysis toolbox (short: sfa) is a Python port of the Sound Field Analysis Toolbox (SOFiA) too

Division of Applied Acoustics at Chalmers University of Technology 69 Nov 23, 2022
convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format.

convert-to-opus-cli convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format. Installation Must have installed ffmp

4 Dec 21, 2022
Python library for audio and music analysis

librosa A python package for music and audio analysis. Documentation See https://librosa.org/doc/ for a complete reference manual and introductory tut

librosa 5.6k Jan 06, 2023
Mousai is a simple application that can identify song like Shazam

Mousai is a simple application that can identify song like Shazam. It saves the artist, album, and title of the identified song in a JSON file.

Dave Patrick 662 Jan 07, 2023
An audio guide for destroying oracles in Destiny's Vault of Glass raid

prophet An audio guide for destroying oracles in Destiny's Vault of Glass raid. This project allows you to make any encounter with oracles without hav

24 Sep 15, 2022
Gammatone-based spectrograms, using gammatone filterbanks or Fourier transform weightings.

Gammatone Filterbank Toolkit Utilities for analysing sound using perceptual models of human hearing. Jason Heeris, 2013 Summary This is a port of Malc

Jason Heeris 188 Dec 14, 2022
Bot duniya Music Player

Bot duniya Music Player Requirements 📝 FFmpeg (Latest) NodeJS nodesource.com (NodeJS 17+) Python (3.10+) PyTgCalls (Lastest) 2nd Telegram Account (ne

Aman Vishwakarma 16 Oct 21, 2022
A voice control utility for Spotify

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

Shoubhit Dash 27 Jan 01, 2023
Audio fingerprinting and recognition in Python

dejavu Audio fingerprinting and recognition algorithm implemented in Python, see the explanation here: How it works Dejavu can memorize audio by liste

Will Drevo 6k Jan 06, 2023
Pyroomacoustics is a package for audio signal processing for indoor applications. It was developed as a fast prototyping platform for beamforming algorithms in indoor scenarios.

Summary Pyroomacoustics is a software package aimed at the rapid development and testing of audio array processing algorithms. The content of the pack

Audiovisual Communications Laboratory 1k Jan 09, 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 voice assistant which can handle your everyday task and allows you to book items from your favourite store!

Voicely Table of Contents About The Project Built With Getting Started Prerequisites Installation Usage Roadmap Contributing License Contact Acknowled

Awantika Nigam 2 Nov 17, 2021
Royal Music You can play music and video at a time in vc

Royals-Music Royal Music You can play music and video at a time in vc Commands SOON String STRING_SESSION Deployment 🎖 Credits • 🇸ᴏᴍʏᴀ⃝🇯ᴇᴇᴛ • 🇴ғғɪ

2 Nov 23, 2021
This is an OverPowered Vc Music Player! Will work for you and play music in Voice Chatz

VcPlayer This is an OverPowered Vc Music Player! Will work for you and play music in Voice Chatz Telegram Voice-Chat Bot [PyTGCalls] ⇝ Requirements ⇜

1 Dec 20, 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
?️ Open Source Audio Matching and Mastering

Matching + Mastering = ❤️ Matchering 2.0 is a novel Containerized Web Application and Python Library for audio matching and mastering. It follows a si

Sergey Grishakov 781 Jan 05, 2023
Oliva music bot help to play vc music

OLIVA V2 🎵 Requirements 📝 FFmpeg NodeJS nodesource.com Python 3.7+ PyTgCalls Commands 🛠 For all in group /play - reply to youtube url or song file

SOUL々H҉A҉C҉K҉E҉R҉ 2 Oct 22, 2021
Anaphones are like anagrams, but for sounds.

Anaphones Anaphones are like anagrams but for sounds (phonemes). Examples include: salami-awesomely, atari-tiara, and beefy-phoebe. Anaphones can be a

James Murphy 18 Nov 02, 2022