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
SinGlow: Generative Flow for SVS tasks in Tensorflow 2

SinGlow is a part of my Singing voice synthesis system. It can extract features of sound, particularly songs and musics. Then we can use these features (or perfect encoding) for feature migrating tas

Haobo Yang 8 Aug 22, 2022
live coding in python + supercollider

live coding in python + supercollider

Zack 6 Feb 06, 2022
digital audio workstation, instrument and effect plugins, wave editor

digital audio workstation, instrument and effect plugins, wave editor

306 Jan 05, 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
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
A music player designed for a University Project.

A music player designed for a University Project. Very flexibe and easy to use, a real life working application with user friendly controls. Hope u enjoy!!

Aditya Johorey 1 Nov 19, 2021
Library for Python 3 to communicate with the Google Chromecast.

pychromecast Library for Python 3.6+ to communicate with the Google Chromecast. It currently supports: Auto discovering connected Chromecasts on the n

Home Assistant Libraries 2.4k Jan 02, 2023
❤️ This Is The EzilaXMusicPlayer Advaced Repo 🎵

Telegram EzilaXMusicPlayer Bot 🎵 A bot that can play music on telegram group's voice Chat ❤️ Requirements 📝 FFmpeg NodeJS nodesource.com Python 3.7+

Sadew Jayasekara 11 Nov 12, 2022
Port Hitsuboku Kumi Chinese CVVC voicebank to deepvocal. / 筆墨クミDeepvocal中文音源

Hitsuboku Kumi (筆墨クミ) is a UTAU virtual singer developed by Cubialpha. This project ports Hitsuboku Kumi Chinese CVVC voicebank to deepvocal. This is the first open-source deepvocal voicebank on Gith

8 Apr 26, 2022
Gateware for the Terasic/Arrow DECA board, to become a USB2 high speed audio interface

DECA USB Audio Interface DECA based USB 2.0 High Speed audio interface Status / current limitations enumerates as class compliant audio device on Linu

Hans Baier 16 Mar 21, 2022
A bot that can play music on Telegram Group and Channel Voice Chats

DaisyXmusic ❤ is the best and only Telegram VC player with playlists, Multi Playback, Channel play and more

TeamOfDaisyX 20 Jun 11, 2021
BART aids transcribe tasks by taking a source audio file and creating automatic repeated loops, allowing transcribers to listen to fragments multiple times

BART (Beyond Audio Replay Technology) aids transcribe tasks by taking a source audio file and creating automatic repeated loops, allowing transcribers to listen to fragments multiple times (with poss

2 Feb 04, 2022
AudioDVP:Photorealistic Audio-driven Video Portraits

AudioDVP This is the official implementation of Photorealistic Audio-driven Video Portraits. Major Requirements Ubuntu = 18.04 PyTorch = 1.2 GCC =

232 Jan 03, 2023
TwitterMusicBot - A Twitter bot with Spotify integration.

A Twitter Music Bot 🤖 🎵 🎶 I created this project to learn more about APIs, so it only works for student purposes. Initially, delving into the Spoti

Gustavo Oliveira 2 Jan 02, 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
Carnatic Notes Predictor for audio files

Carnatic Notes Predictor for audio files Link for live application: https://share.streamlit.io/pradeepak1/carnatic-notes-predictor-for-audio-files/mai

1 Nov 06, 2021
🎵 A music bot for discord servers!

music bot A music bot for Discord Servers Features Play songs in your discord server Get the lyrics without going on a web explorer Commands Command P

1 Jul 25, 2022
Algorithmic and AI MIDI Drums Generator Implementation

Algorithmic and AI MIDI Drums Generator Implementation

Tegridy Code 8 Dec 30, 2022
Klangbecken: The RaBe Endless Music Player

Klangbecken Klangbecken is the minimalistic endless music player for Radio Bern RaBe based on liquidsoap. It supports configurable and editable playli

Radio Bern RaBe 8 Oct 09, 2021
A voice based calculator by using termux api in Android

termux_voice_calculator This is. A voice based calculator by using termux api in Android Instagram account 👉 👈 Requirements and installation Downloa

ʕ´•ᴥ•`ʔ╠ŞĦỮβĦa̷m̷╣ʕ´•ᴥ•`ʔ 2 Apr 29, 2022