diff options
| author | Eddy Pedroni <epedroni@pm.me> | 2025-02-25 17:49:15 +0100 | 
|---|---|---|
| committer | Eddy Pedroni <epedroni@pm.me> | 2025-02-25 17:49:15 +0100 | 
| commit | b3a6f857a218004641c94bed4d233f11fa5f07c7 (patch) | |
| tree | 75171ddd3db3d4b0e24750f736396320d1b3fd57 | |
| parent | b93717904ce75c6fc202528d9cf87eaaf3e449e6 (diff) | |
Change backend to mpv
| -rw-r--r-- | pacman.txt | 7 | ||||
| -rw-r--r-- | solo-tool-project/pyproject.toml | 2 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/player_mpv.py | 51 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/player_vlc.py | 51 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/solo_tool.py | 2 | 
5 files changed, 54 insertions, 59 deletions
| @@ -1,8 +1,3 @@  pkgconf  gst-plugins-good - -For VLC backend: -vlc - -For mplayer backend: -mplayer +mpv diff --git a/solo-tool-project/pyproject.toml b/solo-tool-project/pyproject.toml index 7921be9..841ee46 100644 --- a/solo-tool-project/pyproject.toml +++ b/solo-tool-project/pyproject.toml @@ -14,7 +14,7 @@ dependencies = [      "python-rtmidi",      "sip",      "mido", -    "python-vlc" +    "python-mpv"  ]  [project.optional-dependencies] diff --git a/solo-tool-project/src/solo_tool/player_mpv.py b/solo-tool-project/src/solo_tool/player_mpv.py new file mode 100644 index 0000000..28b78f3 --- /dev/null +++ b/solo-tool-project/src/solo_tool/player_mpv.py @@ -0,0 +1,51 @@ +import mpv + +class Player: +    def __init__(self): +        self._player = mpv.MPV() +        self._player.loop = "inf" +        self._player.observe_property("pause", lambda name, value: self._playingStateCallback()) +        self._player.observe_property("volume", lambda name, value: self._volumeCallback()) + +        self._playingStateCallback = self._dummyCallback +        self._volumeCallback = self._dummyCallback + +    def _dummyCallback(): +        pass + +    def play(self): +        self._player.pause = False + +    def pause(self): +        self._player.pause = True + +    def isPlaying(self): +        return not self._player.pause + +    def setPlaybackRate(self, rate): +        self._player.speed = rate + +    def getPlaybackRate(self): +        return self._player.speed + +    def setPlaybackPosition(self, position): +        self._player.percent_pos = int(position * 100) + +    def getPlaybackPosition(self): +        return float(self._player.percent_pos or 0.0) / 100.0 + +    def setPlaybackVolume(self, volume): +        self._player.volume = int(volume * 100) + +    def getPlaybackVolume(self): +        return float(self._player.volume) / 100.0 + +    def setCurrentSong(self, path): +        self.pause() +        self._player.play(path) + +    def setPlayingStateChangedCallback(self, callback): +        self._playingStateCallback = callback + +    def setPlaybackVolumeChangedCallback(self, callback): +        self._volumeCallback = callback diff --git a/solo-tool-project/src/solo_tool/player_vlc.py b/solo-tool-project/src/solo_tool/player_vlc.py deleted file mode 100644 index dade61f..0000000 --- a/solo-tool-project/src/solo_tool/player_vlc.py +++ /dev/null @@ -1,51 +0,0 @@ -import vlc - -class Player: -    def __init__(self): -        self._player = vlc.MediaPlayer() - -    def play(self): -        self._player.play() - -    def pause(self): -        self._player.pause() - -    def isPlaying(self): -        playing = self._player.is_playing() == 1 -        return playing - -    def setPlaybackRate(self, rate): -        self._player.set_rate(rate) - -    def getPlaybackRate(self): -        return self._player.get_rate() - -    def setPlaybackPosition(self, position): -        self._player.set_position(position) - -    def getPlaybackPosition(self): -        return self._player.get_position() - -    def setPlaybackVolume(self, volume): -        self._player.audio_set_volume(int(volume * 100)) - -    def getPlaybackVolume(self): -        return self._player.audio_get_volume() / 100.0 - -    def setCurrentSong(self, path): -        media = vlc.Media(path) -        self._player.set_media(media) - -    def setPlayingStateChangedCallback(self, callback): -        events = [ -            vlc.EventType.MediaPlayerStopped, -            vlc.EventType.MediaPlayerPlaying, -            vlc.EventType.MediaPlayerPaused -        ] -        manager = self._player.event_manager() -        for e in events: -            manager.event_attach(e, callback) - -    def setPlaybackVolumeChangedCallback(self, callback): -        manager = self._player.event_manager() -        manager.event_attach(vlc.EventType.MediaPlayerAudioVolume, callback) diff --git a/solo-tool-project/src/solo_tool/solo_tool.py b/solo-tool-project/src/solo_tool/solo_tool.py index ec4caa1..a55184e 100644 --- a/solo-tool-project/src/solo_tool/solo_tool.py +++ b/solo-tool-project/src/solo_tool/solo_tool.py @@ -1,7 +1,7 @@  import os  from .notifier import Notifier -from .player_vlc import Player +from .player_mpv import Player  class SoloTool:      def __init__(self, player=None): | 
