import mpv class Player: def __init__(self): self._player = mpv.MPV() self._player.loop = "inf" self._playingStateCallback = self._dummyCallback self._volumeCallback = self._dummyCallback self._player.observe_property("pause", lambda name, value: self._playingStateCallback()) self._player.observe_property("volume", lambda name, value: self._volumeCallback()) def _dummyCallback(self): 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(str(path)) def setPlayingStateChangedCallback(self, callback): self._playingStateCallback = callback def setPlaybackVolumeChangedCallback(self, callback): self._volumeCallback = callback