Package Details: exaile 4.2.2-1

Git Clone URL: https://aur.archlinux.org/exaile.git (read-only, click to copy)
Package Base: exaile
Description: A full-featured Amarok-style media player for GTK+
Upstream URL: https://exaile.org
Licenses: GPL-2.0-only
Submitter: xyproto
Maintainer: UnicornDarkness
Last Packager: UnicornDarkness
Votes: 149
Popularity: 0.042533
First Submitted: 2011-12-14 17:02 (UTC)
Last Updated: 2026-03-30 19:01 (UTC)

Latest Comments

1 2 3 4 5 6 .. 8 Next › Last »

unknown commented on 2026-09-02 19:00 (UTC)

This patch fixes (for me) the volume slider with pulseaudio.

diff --git a/tests/xl/player/gst/test_engine.py b/tests/xl/player/gst/test_engine.py
new file mode 100644
index 00000000..1bddd3b0
--- /dev/null
+++ b/tests/xl/player/gst/test_engine.py
@@ -0,0 +1,23 @@
+from types import SimpleNamespace
+
+import pytest
+
+from xl.player.gst.engine import AudioStream
+
+
+@pytest.mark.parametrize(
+    ('cubic', 'linear'),
+    [
+        (0.07, 0.07**3),
+        (0.14, 0.14**3),
+        (0.22, 0.22**3),
+    ],
+)
+def test_volume_uses_cubic_scale(cubic, linear):
+    stream = AudioStream.__new__(AudioStream)
+    stream.playbin = SimpleNamespace(props=SimpleNamespace(volume=0))
+
+    stream.set_volume(cubic)
+
+    assert stream.playbin.props.volume == pytest.approx(linear)
+    assert stream.get_volume() == pytest.approx(cubic)
diff --git a/xl/player/gst/__init__.py b/xl/player/gst/__init__.py
index ff11f3f4..d1bbf4dd 100644
--- a/xl/player/gst/__init__.py
+++ b/xl/player/gst/__init__.py
@@ -12,6 +12,7 @@
 import gi

 gi.require_version('Gst', '1.0')
+gi.require_version('GstAudio', '1.0')
 from gi.repository import Gst

 Gst.init(None)
diff --git a/xl/player/gst/engine.py b/xl/player/gst/engine.py
index 0159f1d0..0515d009 100644
--- a/xl/player/gst/engine.py
+++ b/xl/player/gst/engine.py
@@ -27,6 +27,7 @@

 from gi.repository import GLib
 from gi.repository import Gst
+from gi.repository import GstAudio

 import logging
 import os
@@ -443,7 +444,11 @@ class AudioStream:
         return self.last_position

     def get_volume(self):
-        return self.playbin.props.volume
+        return GstAudio.StreamVolume.convert_volume(
+            GstAudio.StreamVolumeFormat.LINEAR,
+            GstAudio.StreamVolumeFormat.CUBIC,
+            self.playbin.props.volume,
+        )

     def get_user_volume(self):
         return self.fader.get_user_volume()
@@ -551,7 +556,11 @@ class AudioStream:
         # self.logger.debug("Set playbin volume: %.2f", volume)
         # TODO: strange issue where pulse sets the system audio volume
         #       when exaile starts up...
-        self.playbin.props.volume = volume
+        self.playbin.props.volume = GstAudio.StreamVolume.convert_volume(
+            GstAudio.StreamVolumeFormat.CUBIC,
+            GstAudio.StreamVolumeFormat.LINEAR,
+            volume,
+        )

     def set_user_volume(self, volume):
         self.logger.debug("Set user volume: %.2f", volume)
@@ -741,7 +750,7 @@ class AudioStream:
         playbin.disconnect(self.notify_id)

     def on_volume_change(self, e, p):
-        real = self.playbin.props.volume
+        real = self.get_volume()
         vol, is_same = self.fader.calculate_user_volume(real)
         if not is_same:
             GLib.idle_add(self.engine.player.engine_notify_user_volume_change, vol)

unknown commented on 2026-09-02 17:47 (UTC) (edited on 2026-09-02 17:47 (UTC) by unknown)

The following patch fixes the DB migration error (for me):

diff --git a/tests/conftest.py b/tests/conftest.py
index f434fb3f..b093b1a9 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -7,6 +7,10 @@ from gi.repository import Gio

 import pytest

+from xl import settings
+
+settings.set_option('player/engine', 'rtfd_hack', save=False)
+
 from xl.trax.track import Track

 import logging
diff --git a/xl/main.py b/xl/main.py
index afca661d..e2626391 100644
--- a/xl/main.py
+++ b/xl/main.py
@@ -617,6 +617,12 @@ class Exaile:

         self._set_locale(self.options.UseLanguage)

+        # UI and plugin imports can initialize the player, so migrate the
+        # legacy database before loading either of them.
+        collection_path = os.path.join(xdg.get_data_dir(), 'music.db')
+        with common.open_shelf(collection_path):
+            pass
+
         splash = None

         if self.options.StartGui:
@@ -675,7 +681,7 @@ class Exaile:

         try:
             self.collection = collection.Collection(
-                "Collection", location=os.path.join(xdg.get_data_dir(), 'music.db')
+                "Collection", location=collection_path
             )
         except common.VersionError:
             logger.exception("VersionError loading collection")

slot commented on 2026-03-21 19:14 (UTC) (edited on 2026-03-21 19:19 (UTC) by slot)

I get this error (I do have updated gst_plugins_good installed):


/usr/lib/python3.14/site-packages/gi/overrides/Gst.py:489: in make
raise MissingPluginError(f'No such element: {factoryname}')
E   gi.overrides.Gst.MissingPluginError: No such element: directsoundsink
---------------------------------- Captured stderr ----------------------------------
DEBUG:xl.providers:Provider m3u registered for service playlist-format-converter with target None
DEBUG:xl.providers:Provider pls registered for service playlist-format-converter with target None
DEBUG:xl.providers:Provider asx registered for service playlist-format-converter with target None
DEBUG:xl.providers:Provider xspf registered for service playlist-format-converter with target None 
INFO:xl.version:Using GStreamer 1.28.0
============================== short test summary info ===============================
ERROR tests/xl/player/gst/test_fader.py - gi.overrides.Gst.MissingPluginError: No such element: directsoundsink

UnicornDarkness commented on 2025-11-07 18:19 (UTC)

It seems related to DB migration, but I cannot help. Please report the bug upstream: https://github.com/exaile/exaile/issues/new

senorsnor commented on 2025-10-31 11:13 (UTC)

In addition to my comment below: I could build the package by adding --nocheck to makepkg. But now get the same error starting exaile, even after removing .config/exaile and .cache/exaile directories.


Fatal Python error: Segmentation fault

Current thread 0x00007f89fa5d7bc0 (most recent call first):
  File "/usr/lib/python3.13/site-packages/bsddb3/__init__.py", line 329 in hashopen
  File "/usr/lib/exaile/xl/migrations/database/to_sqlite.py", line 67 in migrate
  File "/usr/lib/exaile/xl/common.py", line 405 in open_shelf
  File "/usr/lib/exaile/xl/trax/trackdb.py", line 185 in load_from_location
  File "/usr/lib/exaile/xl/common.py", line 174 in wrapper
  File "/usr/lib/exaile/xl/trax/trackdb.py", line 114 in __init__
  File "/usr/lib/exaile/xl/collection.py", line 143 in __init__
  File "/usr/lib/exaile/xl/main.py", line 677 in __init
  File "/usr/lib/exaile/xl/main.py", line 569 in __init__
  File "/usr/lib/exaile/exaile.py", line 60 in main
  File "/usr/lib/exaile/exaile.py", line 64 in <module>

Extension modules: setproctitle._setproctitle, gi._gi, cairo._cairo, gi._gi_cairo, _dbus_bindings, _dbus_glib_bindings, gi.overrides._gi_gst, bsddb3._pybsddb (total: 8)
Segmentation fault         (core dumped) exaile

Couldn't find a bug like this in their bug tracker. Could this be a packaging thing or at exaile itself?

senorsnor commented on 2025-10-29 16:48 (UTC)

i get the exact same segfault as cubethethird with makepkg -si

UnicornDarkness commented on 2025-10-29 16:23 (UTC)

@cubethethird: I did not face any issue during build with makepkg -si. You can skip tests with makepkg by using --nocheck. I cannot provide support for pikaur.

cubethethird commented on 2025-10-28 01:38 (UTC)

I'm getting a segfault when attempting to build this now:

tests/xl/trax/test_migration.py Fatal Python error: Segmentation fault

Current thread 0x00007f29c3e2cbc0 (most recent call first):
  File "/usr/lib/python3.13/site-packages/bsddb3/__init__.py", line 329 in hashopen
  File ".cache/pikaur/build/exaile/src/exaile-4.2.0/tests/xl/trax/test_migration.py", line 45 in test_migration_to_sqlite
  File "/usr/lib/python3.13/site-packages/_pytest/python.py", line 157 in pytest_pyfunc_call
  File "/usr/lib/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
  File "/usr/lib/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
  File "/usr/lib/python3.13/site-packages/pluggy/_hooks.py", line 512 in __call__
  File "/usr/lib/python3.13/site-packages/_pytest/python.py", line 1671 in runtest
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 178 in pytest_runtest_call
  File "/usr/lib/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
  File "/usr/lib/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
  File "/usr/lib/python3.13/site-packages/pluggy/_hooks.py", line 512 in __call__
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 246 in <lambda>
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 344 in from_call
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 245 in call_and_report
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 136 in runtestprotocol
  File "/usr/lib/python3.13/site-packages/_pytest/runner.py", line 117 in pytest_runtest_protocol
  File "/usr/lib/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
  File "/usr/lib/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
  File "/usr/lib/python3.13/site-packages/pluggy/_hooks.py", line 512 in __call__
  File "/usr/lib/python3.13/site-packages/_pytest/main.py", line 367 in pytest_runtestloop
  File "/usr/lib/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
  File "/usr/lib/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
  File "/usr/lib/python3.13/site-packages/pluggy/_hooks.py", line 512 in __call__
  File "/usr/lib/python3.13/site-packages/_pytest/main.py", line 343 in _main
  File "/usr/lib/python3.13/site-packages/_pytest/main.py", line 289 in wrap_session
  File "/usr/lib/python3.13/site-packages/_pytest/main.py", line 336 in pytest_cmdline_main
  File "/usr/lib/python3.13/site-packages/pluggy/_callers.py", line 121 in _multicall
  File "/usr/lib/python3.13/site-packages/pluggy/_manager.py", line 120 in _hookexec
  File "/usr/lib/python3.13/site-packages/pluggy/_hooks.py", line 512 in __call__
  File "/usr/lib/python3.13/site-packages/_pytest/config/__init__.py", line 175 in main
  File "/usr/lib/python3.13/site-packages/_pytest/config/__init__.py", line 201 in console_main
  File "/usr/bin/py.test", line 8 in <module>

Any idea if this is a build/packaging issue or upstream?

UnicornDarkness commented on 2025-03-24 20:08 (UTC)

@Mikhail: https://github.com/exaile/exaile/issues/962

UnicornDarkness commented on 2025-03-24 18:24 (UTC)

@oldherl: I see a /usr/share/gir-1.0/GIRepository-2.0.gir file in libgirepository 1.84.0-1 and I do not have this issue on my computer. Ok I am removing python-deadlib.