:notes: Cross-platform music player

Overview

Exaile

Build Status Translate with Weblate

Exaile is a music player with a simple interface and powerful music management capabilities. Features include automatic fetching of album art, lyrics fetching, streaming internet radio, tabbed playlists, smart playlists with extensive filtering/search capabilities, and much more.

Exaile is written using Python and GTK+ and is easily extensible via plugins. There are over 50 plugins distributed with Exaile that include advanced track tagging, last.fm scrobbling, support for portable media players, podcasts, internet radio such as icecast and Soma.FM, ReplayGain, output via a secondary output device (great for DJs!), and much more.

For more information see https://www.exaile.org/

Comments
  • Port to Gtk3/PyGobject/GST 1.x

    Port to Gtk3/PyGobject/GST 1.x

    Start from: https://bugs.launchpad.net/exaile/+bug/846379

    Some blockers I can think of for PyGI/GTK3:

    • [X] I don't want to not have a way to select output devices, and GST 1.x got rid of the property probe interface. See https://bugzilla.gnome.org/show_bug.cgi?id=678402 (which is marked as resolved, but it's not clear to me whether it is or not) -> FIXED in Gst 1.4
    • [ ] For Windows and OSX (both of which I use, and hope to continue to support), we currently rely on the GStreamer SDK for python bindings to GTK. As far as I can tell, it doesn't support GTK3 or GST 1, and still has the old PyGTK bindings on it. I could be wrong though.
    • [ ] Right now, I don't care enough about this to do it, and besides Johannes there isn't anyone else actively doing work on the project. Will probably want to push this off as long as we can, until more people join the project.
    Type: enhancement Help wanted GTK3/GST1.x 
    opened by thiblahute 43
  • [gapless playback] exaile mutes playback if FLAC is played after one or two MP3 files (details unclear)

    [gapless playback] exaile mutes playback if FLAC is played after one or two MP3 files (details unclear)

    Sometimes when exaile plays music from large playlists (randomly play songs, repeat everything active), it does the following:

    1. The song which was started plays until the end
    2. exaile loads the next song (and file, according to logging). This includes title information (above playlists) and cover, title length (progress bar below playlists).
    3. In some cases exaile does not start playing the song. In fact the progress bar is stuck at 0:00 seconds though it should play (and it is not paused).
    4. after some time exaile suddently starts playing the file (often just the last 1…3 seconds of the file) and then switches to step 2. again.

    When clicking somewhere after 3. happened into the progress bar makes exaile behave normal and play the file.

    I keep on running into this problem for quite a while but I am unsure how to reproduce it. The only thing I found out is that it only affects huge playlists. So it seems like exaile reacts special on some rare files (file types?). This could also be an issue with some gstreamer plugin, I don't know for sure.

    It looks like this primarily affects flac files. When they are played often the first few seconds go missing. In this case the progress bar misses some seconds (e.g. 0:01 and 0:03). It looks to me like exaile desperately tries to play a file the moment it should start without caring whether it is already loaded. I might be wrong but it looks to me like a caching (and: hard disk file access time) issue.

    This does not happen with VLC media player nor with totem (gnome's default media player using gstreamer). So it seems to be an issue with exaile only.

    opened by genodeftest 27
  • RTL control bar is reversed

    RTL control bar is reversed

    No physical DVD/Video player has its controllers set from right-to-left.

    FORCE LTR WIDGET DIRECTION.

    See: http://sourceforge.net/p/smplayer/bugs/584/ https://git.gnome.org/browse/ekiga/commit/?id=76c9b23 https://trac.gajim.org/changeset/5f8bfea2054a

    Type: enhancement 
    opened by GreenLunar 22
  • Need to split out the msys pieces from building a release

    Need to split out the msys pieces from building a release

    As discussed on IRC.... this really needs to be done. One of the things holding back release(s) is that it's difficult to build a full release unless you're on Windows, because of the msys dependency which is constantly changing.

    Ideally, the msys stuff could be packaged separately into something that could be reused and repackaged from Linux. Then, all we would need to do is push a tag, and travis would magically bundle everything together and push a release to github.

    One thought is to use pyinstaller in a more controlled way. We could bundle the source code of exaile with the installer, using the same base pyinstaller exe each time. This base could be primed with all of the builtin imports we need (somehow?), and the external stuff too. If the stub just executed the main exaile source, we wouldn't need to rebuild the pyinstaller exe each time.

    More ideas welcome. And.. I need to put together a VM with msys so we can get 4.0 out the door.

    Type: enhancement Platform: Windows Component: build system 
    opened by virtuald 20
  • [WIP] Improve build: Makefile and more tests in Travis CI

    [WIP] Improve build: Makefile and more tests in Travis CI

    Missing items:

    • [x] (optional) Run documentation and style checks only on one machine, preferably a separate one
    • [x] build all the code to check whether it compiles
    • [x] add sphinx to docker images (see exaile/exaile-testimg#2)
    • [x] build sphinx documentation during tests
    • [ ] add pychecker to docker images (see exaile/exaile-testimg#2)
    • [ ] check code style using pychecker
    • [x] put built .pyc / .pyo files where we can write them.

    Code style:

    $ pycodestyle --exclude=plugins/daapserver/spydaap/*.py --max-line-length=160 --statistics --count --ignore=E203,E241,E265,E266,E305,E402,E722,E731,E741,W293,W503 .
    

    Deferred:

    • [ ] add pytest-flakes to docker images (through pip install, see exaile/exaile-testimg#2
    opened by genodeftest 18
  • TypeError upon exit

    TypeError upon exit

    Hello,

    I'm seeing an regression between 11885d6 (20170907) and 9ba2cc8 (20171020). Every time I'm quitting exaile via File -> Quit Exaile menu item, I get this in terminal:

    Exception TypeError: "'NoneType' object is not callable" in <object repr() failed> ignored
    Exception TypeError: "'NoneType' object is not callable" in <object repr() failed> ignored
    

    Here is the full log with --debug, but it doesn't seem contain any clues about the error: https://dpaste.de/BDWQ/raw

    opened by mexicarne 18
  • Namespace Gst not available

    Namespace Gst not available

    Can't start on xubuntu 12.04 (maybe after update), version from PPA. ~$ exaile Traceback (most recent call last): File "/usr/local/lib/exaile/exaile.py", line 68, in <module> main() File "/usr/local/lib/exaile/exaile.py", line 65, in main exaile = main.Exaile() File "/usr/local/lib/exaile/xl/main.py", line 254, in __init__ _do_heavy_imports() File "/usr/local/lib/exaile/xl/main.py", line 51, in _do_heavy_imports gi.require_version('Gst', '1.0') File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 48, in require_version raise ValueError('Namespace %s not available' % namespace) ValueError: Namespace Gst not available

    ~$ exaile --version Exaile 4.0.0dev

    Git version also suddenly don't work, but don't got the output (sorry).

    opened by ghost 18
  • Add Preferences shortcuts to the player

    Add Preferences shortcuts to the player

    I was wondering if it was possible to add shortcuts from the preferences to the main player. For example, I'd like to 'Disallow playing new tracks when another track is playing' when I am actively DJing. I'd love to actively add a shortcut to the main player, on the bottom line where all it seems to do currently is display 'x songs showing, yzzx in collection' on the bottom right

    As a sidenote, is it possible to disable that line or change what is displayed on that particular line?

    This might also help with another issue I raised in the past (#708) about actively be able to change the delay between songs. If I can add a shortcut to the main player, I can easily a delay time in (milli)seconds and change it as I DJ

    Environment

    • Operating System and version: Windows 10
    • Exaile Version: 4.0.2 GStreamer: 1.16.0 GTK+: 3.24.8 GTK+ theme: Adwaita Locale: English_United States 1252 Mutagen: 1.40.0 PyGObject: 3.32.1 Python: 2.7.16
    Type: enhancement Help wanted Good first issue Component: plugin 
    opened by phalgunlolur 17
  • Exaile 4 Windows Installer flagged as Trojan

    Exaile 4 Windows Installer flagged as Trojan

    Steps to Reproduce (for bugs)

    1. Download the RC4 installer at https://github.com/exaile/exaile/releases/download/4.0.0-rc4/exaile-4.0.0-rc4.exe
    2. Run it on Windows 10
    3. Windows Defender kicks in and Quarantine the file
    4. Here's a screenshot.

    Expected Behavior

    The Installer should not be flagged :)

    Current Behavior

    Exaile cannot be installed.

    Possible Solution

    I've looked up this issue and it seems that other open source software has run into it as well. Obviously we should look into the release process to make sure that it does not contain virus/trojan, but I'm leaning towards Windows Defender flagging some unsigned binaries right now.

    Environment

    • Operating System and version: Windows 10 version 1809
    • Exaile Version: 4.0.0 RC4
    opened by dangmai 17
  • MP3 tags not read

    MP3 tags not read

    MP3 tags not read

    Steps to Reproduce (for bugs)

    Add folder to collection.

    Expected Behavior

    Tags should be properly imported for all supported media files.

    Current Behavior

    Tags for ogg and flac files work just fine, but all MP3 files show up without any tag information.

    Further information

    • Probably not a problem with mutagen per se since other programs that use it (I tested puddletag) work without problems.
    • Interestingly, if I edit the tag info within exaile, it shows up correctly afterwards.

    Environment

    • Operating System and version: Debian testing (buster), x86_64
    • Exaile Version: 4.0.0-rc2
    • mutagen-1.41.1
    Type: bug Type: regression 
    opened by ghost 17
  • Segmentation fault when adding too many files from sftp mounted dir

    Segmentation fault when adding too many files from sftp mounted dir

    Exaile crashes when adding too big files to the playlist

    Steps to Reproduce (for bugs)

    1. Mount a directory with mp3s using sftp (e.g. gigolo)
    2. Browse to the directory within the files tab in exaile
    3. Try to move them in the playlist (size of all mp3s was around 71MByte

    Expected Behavior

    Should not crash

    Current Behavior

    Segmentation fault

    Environment

    source: git exaile branch: master commit: e2543b4588e30f415766b67e55ee9235fc444593

    Type: bug 
    opened by jondoe1337 17
  • Upgrade Licensing to CC-BY-4.0 to be compatible with Debian FSG

    Upgrade Licensing to CC-BY-4.0 to be compatible with Debian FSG

    To be compatible with Debian Free Software Guidelines CC-BY-2.0 needs to be upgraded to CC-BY-4.0 See https://wiki.debian.org/DFSGLicenses#Creative_Commons_Attribution-ShareAlike_3.0_Unported_.28CC_BY-SA_3.0.29

    @mathbr Do you agree?

    opened by luzip665 0
  • winmmkeys: Use pynput; remove support for other modules

    winmmkeys: Use pynput; remove support for other modules

    pynput seems to be way to go for multimedia keys support on Windows, now that keyboard doesn't work anymore (see https://github.com/exaile/exaile/issues/830).

    I suppose pyHook might still work, but I haven't tested it in a long time. Being an extension module, pyHook is more annoying to deal with compared to pynput (which uses ctypes), so let's just settle on pynput.

    I haven't tested this with the installer; was hoping to test using a CI build, but apparently this needs a new SDK build (due to requirements.txt change), which in turn requires this to be merged to master first.

    opened by sjohannes 0
  • xl/trax: search_tracks: sleep only when running in secondary thread

    xl/trax: search_tracks: sleep only when running in secondary thread

    When processing the tracks in search_tracks generator, yield the current thread's timeslice only when running in the secondary (non-main) thread. This prevents unnecessary slow-downs in the main thread, where we want to finish the operation as fast as possible (especially under python 3.11 on linux, where time.sleep(0) introduced additional overhead).

    Fixes #832.

    opened by rokm 3
  • Upgrade Icecast plugin to use https://dir.xiph.org/yp.xml

    Upgrade Icecast plugin to use https://dir.xiph.org/yp.xml

    Upgrading Icecast plugin to use https://dir.xiph.org/yp.xml for retrieving stations. Fixes #829

    For now it is quite slow. And some optimizations and cleaning needs to be done.

    But can someone check if it works correct and as before?

    opened by luzip665 4
  • Track start/end events not triggered for not local streams on track change

    Track start/end events not triggered for not local streams on track change

    Steps to Reproduce (for bugs)

    1. Enable the OSD plugin (to better appreciate the issue)
    2. Add a radio playlist, e.g. any SomaFM playlist
    3. Play it
    4. Wait for a new track to be parsed

    Expected Behavior

    I'd expect to be notified of the track change via OSD

    Current Behavior

    OSD doesn't notify the track change

    Possible Solution

    I'm proposing this PR. I'm not sure that's the best way to "save" the current track prior to tags changing.

    Environment

    • Operating System and version: Slackware Linux 15.0
    • Exaile Version: Exaile 4.1.2-beta1+70fa4d1
    opened by eri-trabiccolo 0
Releases(4.1.2)
Owner
Exaile
A cross platform audio player
Exaile
Pythonic bindings for FFmpeg's libraries.

PyAV PyAV is a Pythonic binding for the FFmpeg libraries. We aim to provide all of the power and control of the underlying library, but manage the gri

PyAV 1.8k Jan 03, 2023
Converting UGG files from Rode Wireless Go II transmitters (unsompressed recordings) to WAV format

Rode_WirelessGoII_UGG2wav Converting UGG files from Rode Wireless Go II transmitters (uncompressed recordings) to WAV format Story I backuped the .ugg

Ján Mazanec 31 Dec 22, 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
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
Supysonic is a Python implementation of the Subsonic server API.

Supysonic Supysonic is a Python implementation of the Subsonic server API. Current supported features are: browsing (by folders or tags) streaming of

Alban 228 Nov 19, 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
Synthesia but open source, made in python and free

PyPiano Synthesia but open source, made in python and free Requirements are in requirements.txt If you struggle with installation of pyaudio, run : pi

DaCapo 11 Nov 06, 2022
A Python port and library-fication of the midicsv tool by John Walker.

A Python port and library-fication of the midicsv tool by John Walker. If you need to convert MIDI files to human-readable text files and back, this is the library for you.

Tim Wedde 52 Dec 29, 2022
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
A telegram bot for which is help to play songs in vc 🥰 give 🌟 and fork this repo before use 😏

TamilVcMusic 🌟 TamilVCMusicBot 🌟 Give your 💙 Before clicking on deploy to heroku just click on fork and star just below How to deploy Click the bel

TamilBots 150 Dec 13, 2022
kapre: Keras Audio Preprocessors

Kapre Keras Audio Preprocessors - compute STFT, ISTFT, Melspectrogram, and others on GPU real-time. Tested on Python 3.6 and 3.7 Why Kapre? vs. Pre-co

Keunwoo Choi 867 Dec 29, 2022
GNU Radio – the Free and Open Software Radio Ecosystem

GNU Radio is a free & open-source software development toolkit that provides signal processing blocks to implement software radios. It can be used wit

GNU Radio 4.1k Jan 06, 2023
A python package for calculating the PESQ.

PyPESQ (WIP) Pypesq is a python wrapper for the PESQ score calculation C routine. It only can be used in evaluation purpose. INSTALL pip install https

Jingdong Li 269 Dec 18, 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
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
Read music meta data and length of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python 2 or 3

tinytag tinytag is a library for reading music meta data of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python Install pip install tinytag

Tom Wallroth 577 Dec 26, 2022
Basically Play Pauses the song when it is safe to do so. when you die in a round

Basically Play Pauses the song when it is safe to do so. when you die in a round

AG_1436 1 Feb 13, 2022
Stevan KZ 1 Oct 27, 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
Python audio and music signal processing library

madmom Madmom is an audio signal processing library written in Python with a strong focus on music information retrieval (MIR) tasks. The library is i

Institute of Computational Perception 1k Dec 26, 2022