Changeset - 4a5b37acd1f0
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 8 months ago 2024-05-23 18:25:58
drewp@bigasterisk.com
private attrs
1 file changed with 19 insertions and 19 deletions:
0 comments (0 inline, 0 general)
src/light9/ascoltami/player.py
Show inline comments
 
@@ -23,11 +23,11 @@ class Player:
 
        self.autoStopOffset = autoStopOffset
 
        self.playbin = self.pipeline = Gst.ElementFactory.make('playbin', None)
 

	
 
        self.playStartTime = 0
 
        self.lastWatchTime = 0
 
        self.autoStopTime = 0
 
        self.lastSetSongUri = None
 
        self.onEOS = onEOS
 
        self._playStartTime = 0
 
        self._lastWatchTime = 0
 
        self._autoStopTime = 0
 
        self._lastSetSongUri = None
 
        self._onEOS = onEOS
 

	
 
        task.LoopingCall(self.watchTime).start(.050)
 

	
 
@@ -40,13 +40,13 @@ class Player:
 
            self.pollForMessages()
 

	
 
            t = self.currentTime()
 
            log.debug("watch %s < %s < %s", self.lastWatchTime,
 
                      self.autoStopTime, t)
 
            if self.lastWatchTime < self.autoStopTime < t:
 
            log.debug("watch %s < %s < %s", self._lastWatchTime,
 
                      self._autoStopTime, t)
 
            if self._lastWatchTime < self._autoStopTime < t:
 
                log.info("autostop")
 
                self.pause()
 

	
 
            self.lastWatchTime = t
 
            self._lastWatchTime = t
 
        except Exception:
 
            traceback.print_exc()
 

	
 
@@ -57,8 +57,8 @@ class Player:
 

	
 
        def onEos(*args):
 
            print("onEos", args)
 
            if self.onEOS is not None:
 
                self.onEOS(self.getSong())
 
            if self._onEOS is not None:
 
                self._onEOS(self.getSong())
 

	
 
        bus.connect('message::eos', onEos)
 

	
 
@@ -86,8 +86,8 @@ class Player:
 
            if msg.type == mt.ERROR:
 
                log.error(repr(msg.parse_error()))
 
            if msg.type == mt.EOS:
 
                if self.onEOS is not None:
 
                    self.onEOS(self.getSong())
 
                if self._onEOS is not None:
 
                    self._onEOS(self.getSong())
 
            if msg.type == mt.STREAM_STATUS:
 
                (statusType, _elem) = msg.parse_stream_status()
 
                if statusType == Gst.StreamStatusType.ENTER:
 
@@ -100,7 +100,7 @@ class Player:
 
            t * Gst.SECOND)
 
        if not isSeekable:
 
            raise ValueError('seek_simple failed')
 
        self.playStartTime = time.time()
 
        self._playStartTime = time.time()
 

	
 
    def setSong(self, songLoc, play=True):
 
        """
 
@@ -110,16 +110,16 @@ class Player:
 
        self.pipeline.set_state(Gst.State.READY)
 
        self.preload(songLoc)
 
        self.pipeline.set_property("uri", songLoc)
 
        self.lastSetSongUri = songLoc
 
        self._lastSetSongUri = songLoc
 
        # todo: don't have any error report yet if the uri can't be read
 
        if play:
 
            self.pipeline.set_state(Gst.State.PLAYING)
 
            self.playStartTime = time.time()
 
            self._playStartTime = time.time()
 

	
 
    def getSong(self):
 
        """Returns the URI of the current song."""
 
        # even the 'uri' that I just set isn't readable yet
 
        return self.playbin.get_property("uri") or self.lastSetSongUri
 
        return self.playbin.get_property("uri") or self._lastSetSongUri
 

	
 
    def preload(self, songPath):
 
        """
 
@@ -184,8 +184,8 @@ class Player:
 
        dur = self.duration()
 
        if dur == 0:
 
            raise ValueError("duration=0, can't set autostop")
 
        self.autoStopTime = (dur - self.autoStopOffset)
 
        log.info("autostop will be at %s", self.autoStopTime)
 
        self._autoStopTime = (dur - self.autoStopOffset)
 
        log.info("autostop will be at %s", self._autoStopTime)
 
        # pipeline.seek can take a stop time, but using that wasn't
 
        # working out well. I'd get pauses at other times that were
 
        # hard to remove.
0 comments (0 inline, 0 general)