--- /usr/bin/cplay 2012-05-20 19:32:55.000000000 +0200 +++ bin/cplay 2015-11-25 18:42:13.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- python -*- -__version__ = "cplay 1.49" +__version__ = "cplay 1.49-meillo" """ cplay - A curses front-end for various audio players @@ -1206,6 +1206,7 @@ self.stopped = 0 self.paused = 0 self.step = 0 + self.setlength() self.update_status() def stop(self, quiet=0): @@ -1277,6 +1278,9 @@ else: app.set_default_status(_("Playing: %s") % self.entry.vp()) + def setlength(self): + return + # ------------------------------------------ class FrameOffsetPlayer(Player): re_progress = re.compile("Time.*\s(\d+):(\d+).*\[(\d+):(\d+)") @@ -1301,6 +1305,26 @@ self.set_position(head, head+tail, [head, tail]) # ------------------------------------------ +class TimeOffsetMplayer(Player): + re_progress = re.compile("A: *(\d+)") + + def parse_buf(self): + match = self.re_progress.search(self.buf) + if match: + head = string.atoi(match.groups()[0]) + tail = max(self.length, head) - head + self.set_position(head, head+tail, [head, tail]) + + def setlength(self): + while 1: + self.buf = os.read(self.stdout_r, 512) + re_length = re.compile("ID_LENGTH=(\d+)") + match = re_length.search(self.buf) + if match: + self.length = string.atoi(match.groups()[0]) + break + +# ------------------------------------------ class NoOffsetPlayer(Player): def parse_buf(self): @@ -1631,6 +1655,7 @@ FrameOffsetPlayer("splay -f -k %d %s", "(^http://|\.mp[123]$)", 38.28), FrameOffsetPlayer("mpg123 -q -v -k %d %s", "(^http://|\.mp[123]$)", 38.28), FrameOffsetPlayer("mpg321 -q -v -k %d %s", "(^http://|\.mp[123]$)", 38.28), + TimeOffsetMplayer("mplayer -vo null -identify -ss %d %s", "(^http://|\.(mp4|flv|mkv)$)"), TimeOffsetPlayer("madplay -v --display-time=remaining -s %d %s", "\.mp[123]$"), NoOffsetPlayer("mikmod -q -p0 %s", "\.(mod|xm|fm|s3m|med|col|669|it|mtm)$"), NoOffsetPlayer("xmp -q %s", "\.(mod|xm|fm|s3m|med|col|669|it|mtm|stm)$"),