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
GNOME powered sound conversion

SoundConverter A simple sound converter application for the GNOME environment. It reads anything the GStreamer library can read, and writes Ogg Vorbis

Gautier Portet 188 Dec 17, 2022
This library provides common speech features for ASR including MFCCs and filterbank energies.

python_speech_features This library provides common speech features for ASR including MFCCs and filterbank energies. If you are not sure what MFCCs ar

James Lyons 2.2k Jan 04, 2023
Algorithmic Multi-Instrumental MIDI Continuation Implementation

Matchmaker Algorithmic Multi-Instrumental MIDI Continuation Implementation Taming large-scale MIDI datasets with algorithms This is a WIP so please ch

Alex 2 Mar 11, 2022
F.R.I.D.A.Y. ----- Female Replacement Intelligent Digital Assistant Youth

F.R.I.D.A.Y. Female Replacement Intelligent Digital Assistant Youth--Jarvis-- the virtual assistant made by python Overview This is a virtual assistan

JIB - Just Innovative Bro 4 Feb 26, 2022
Music generation using ml / dl

Data analysis Document here the project: deep_music Description: Project Description Data Source: Type of analysis: Please document the project the be

0 Jul 03, 2022
This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

OneBit 1 Nov 05, 2021
Powerful, simple, audio tag editor for GNU/Linux

puddletag puddletag is an audio tag editor (primarily created) for GNU/Linux similar to the Windows program, Mp3tag. Unlike most taggers for GNU/Linux

341 Dec 26, 2022
A Youtube audio player for your terminal

AudioLine A lightweight Youtube audio player for your terminal Explore the docs » View Demo · Report Bug · Request Feature · Send a Pull Request About

Haseeb Khalid 26 Jan 04, 2023
A rofi-blocks script that searches youtube and plays the selected audio on mpv.

rofi-ytm A rofi-blocks script that searches youtube and plays the selected audio on mpv. To use the script, run the following command rofi -modi block

Cliford 26 Dec 21, 2022
Music bot of # Owner

Pokimane-Music Music bot of # Owner How To Host The easiest way to deploy this Bot Support Channel :- TeamDlt Support Group :- TeamDlt Please fork thi

5 Dec 23, 2022
𝙰 𝙼𝚞𝚜𝚒𝚌 𝙱𝚘𝚝 𝙲𝚛𝚎𝚊𝚝𝚎𝚍 𝙱𝚢 𝚃𝚎𝚊𝚖𝙳𝚕𝚝 💖

TeamDltmusic 𝙰 𝙼𝚞𝚜𝚒𝚌 𝙱𝚘𝚝 𝙲𝚛𝚎𝚊𝚝𝚎𝚍 𝙱𝚢 𝚃𝚎𝚊𝚖𝙳𝚕𝚝 💖 Deploy String Session String Click hear you can find string session OR join He

TeamDlt 5 Jan 18, 2022
Music Streaming Platform based on full implementation of DBSM

Symphony Music Streaming Platform based on full implementation of DBSM List of Commands Insert User (INSERT) Function to implement input in USER Get a

Parth Maradia 1 Nov 12, 2021
Graphical interface to control granular sound synthesis.

Granular sound synthesis interface SoundGrain is a graphical interface where users can draw and edit trajectories to control granular sound synthesis

Olivier Bélanger 122 Dec 10, 2022
pyo is a Python module written in C to help digital signal processing script creation.

pyo is a Python module written in C to help digital signal processing script creation.

Olivier Bélanger 1.1k Jan 01, 2023
Xbot-Music - Bot Play Music and Video in Voice Chat Group Telegram

XBOT-MUSIC A Telegram Music+video Bot written in Python using Pyrogram and Py-Tg

Fariz 2 Jan 20, 2022
DeepSpeech is an open source embedded (offline, on-device) speech-to-text engine which can run in real time on devices ranging from a Raspberry Pi 4 to high power GPU servers.

Project DeepSpeech DeepSpeech is an open-source Speech-To-Text engine, using a model trained by machine learning techniques based on Baidu's Deep Spee

Mozilla 20.8k Jan 03, 2023
We built this fully functioning Music player in Python. The music player allows you to play/pause and switch to different songs easily.

We built this fully functioning Music player in Python. The music player allows you to play/pause and switch to different songs easily.

1 Nov 19, 2021
live coding in python + supercollider

live coding in python + supercollider

Zack 6 Feb 06, 2022
Generating a structured library of .wav samples with Python.

sample-library Scripts for generating a structured sample library with Python Requires Docker about Samples are written to wave files in lib/. Differe

Ben Mangold 1 Nov 11, 2021
Neural building blocks for speaker diarization: speech activity detection, speaker change detection, overlapped speech detection, speaker embedding

⚠️ Checkout develop branch to see what is coming in pyannote.audio 2.0: a much smaller and cleaner codebase Python-first API (the good old pyannote-au

pyannote 2.1k Dec 31, 2022