X-Git-Url: http://dolda2000.com/gitweb/?p=utils.git;a=blobdiff_plain;f=mpsync;h=cd8b08c75fa4f79f68069806eeca256bceec1171;hp=8783e2821fc2e5d9689c7a4db6901f40845adca1;hb=f7bd9b51138dbccb7cc2fd27f07ef66d5d2d79cf;hpb=c0897f292783f95e30c95784d9e265f29e0279ff diff --git a/mpsync b/mpsync index 8783e28..cd8b08c 100755 --- a/mpsync +++ b/mpsync @@ -98,6 +98,7 @@ class target(object): self.sk.connect(path) self.obuf = bytearray() self.ibuf = bytearray() + self.fps = self.getprop("container-fps") def write(self, data): self.obuf.extend(data) @@ -135,8 +136,8 @@ class target(object): continue return resp - def runcmd(self, cmd): - self.send(json.dumps(cmd).encode("utf-8") + b"\n") + def runcmd(self, *cmd): + self.send(json.dumps({"command": cmd}).encode("utf-8") + b"\n") resp = self.getresp() if "error" not in resp: sys.stderr.write("mpsync: strange response from %s: %r\n" % (self.path, resp)) @@ -145,10 +146,10 @@ class target(object): return resp def getprop(self, pname): - return self.runcmd({"command": ["get_property", pname]})["data"] + return self.runcmd("get_property", pname)["data"] def setprop(self, pname, val): - self.runcmd({"command": ["set_property", pname, val]}) + self.runcmd("set_property", pname, val) def usage(out): out.write("usage: mpsync [-h] SOCKET...\n") @@ -172,9 +173,8 @@ for path in args: targets.append(target(path)) def runcmd(*cmd): - cmd = {"command": cmd} for tgt in targets: - tgt.runcmd(cmd) + tgt.runcmd(*cmd) def simulcmd(*cmd): cmd = json.dumps({"command": cmd}).encode("utf-8") + b"\n" @@ -200,8 +200,9 @@ def getoffsets(): return ret def main(tty): - paused = targets[0].getprop("pause") runcmd("set_property", "hr-seek", "yes") + paused = targets[0].getprop("pause") + mutemode = 0 offsets = [0.0] * len(targets) while True: c, mods = tty.readkey() @@ -229,9 +230,24 @@ def main(tty): relseek(5, offsets) elif c == rawtty.K_DOWN and mods == {rawtty.MOD_SHIFT}: relseek(-5, offsets) + elif c == 's': + relseek(0, offsets) + elif c == 'm': + mutemode = (mutemode + 1) % 3 + if mutemode == 0: + for tgt in targets: + tgt.setprop("mute", False) + elif mutemode == 1: + for i, tgt in enumerate(targets): + tgt.setprop("mute", i != 0) + elif mutemode == 2: + for tgt in targets: + tgt.setprop("mute", True) + targets[0].runcmd("show_text", "Audio mode: %s" % ["All", "One", "None"][mutemode]) elif c == 'S': offsets = getoffsets() - print(offsets) + for tgt, off in zip(targets, offsets): + tgt.runcmd("show_text", "Offset: %i" % round(off * tgt.fps)) elif c == '.': runcmd("frame_step") paused = True