# HG changeset patch # User markus schnalke # Date 1501132080 -7200 # Node ID c7d8ec7da73b5bfbe79f7286a00b00596e2deb64 # Parent 7db0dc9d32d319c067feb011f3e57a2d9ece0aec Add mplayer as a backend player Plus: exchange PCM and Master mixer. diff -r 7db0dc9d32d3 -r c7d8ec7da73b cplay --- a/cplay Wed Sep 27 09:25:24 2017 +0200 +++ b/cplay Thu Jul 27 07:08:00 2017 +0200 @@ -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): @@ -1508,15 +1532,15 @@ mixer = ossaudiodev.openmixer() get, set = mixer.get, mixer.set self.channels = self.channels or \ - [['MASTER', ossaudiodev.SOUND_MIXER_VOLUME], - ['PCM', ossaudiodev.SOUND_MIXER_PCM]] + [['PCM', ossaudiodev.SOUND_MIXER_PCM], + ['MASTER', ossaudiodev.SOUND_MIXER_VOLUME]] except ImportError: import oss mixer = oss.open_mixer() get, set = mixer.read_channel, mixer.write_channel self.channels = self.channels or \ - [['MASTER', oss.SOUND_MIXER_VOLUME], - ['PCM', oss.SOUND_MIXER_PCM]] + [['PCM', oss.SOUND_MIXER_PCM], + ['MASTER', oss.SOUND_MIXER_VOLUME]] if cmd is "toggle": self.channels.insert(0, self.channels.pop()) name, channel = self.channels[0] if cmd is "cue": arg = min(100, max(0, get(channel)[0] + arg)) @@ -1627,6 +1651,7 @@ # ------------------------------------------ PLAYERS = [ + TimeOffsetMplayer("mplayer -vo null -identify -ss %d %s", "(^http://|\.(mp[1-4]|flv|mkv|m4a)$)"), FrameOffsetPlayer("ogg123 -q -v -k %d %s", "\.ogg$"), FrameOffsetPlayer("splay -f -k %d %s", "(^http://|\.mp[123]$)", 38.28), FrameOffsetPlayer("mpg123 -q -v -k %d %s", "(^http://|\.mp[123]$)", 38.28),