mirror of
https://github.com/onyx-and-iris/voicemeeter-api-python.git
synced 2024-11-22 02:50:47 +00:00
add get values to dsl example
This commit is contained in:
parent
316a5bded5
commit
56d26d6bde
@ -17,42 +17,40 @@ from pyparsing import (
|
||||
class Parser:
|
||||
def __init__(self, vm):
|
||||
self.vm = vm
|
||||
self.kls = Word(alphas)
|
||||
self.kls = Group(OneOrMore(Word(alphanums)))
|
||||
self.token = Suppress("->")
|
||||
self.index = Word(nums)
|
||||
self.action = Word(alphanums)
|
||||
self.param = Word(alphanums)
|
||||
self.value = Combine(
|
||||
Optional("-") + Word(nums) + Optional(".") + Optional(Word(nums))
|
||||
) | Group(OneOrMore(Word(alphanums)))
|
||||
|
||||
def parse(self, cmds):
|
||||
event = (
|
||||
self.kls
|
||||
+ self.token
|
||||
+ self.index
|
||||
+ self.token
|
||||
+ self.action
|
||||
+ Optional(
|
||||
Combine(
|
||||
Optional("-") + Word(nums) + Optional(".") + Optional(Word(nums))
|
||||
)
|
||||
)
|
||||
+ Optional(self.action)
|
||||
+ self.param
|
||||
+ Optional(self.token)
|
||||
+ Optional(Group(OneOrMore(Word(alphanums))))
|
||||
+ Optional(self.value)
|
||||
)
|
||||
res = list()
|
||||
|
||||
for cmd in cmds:
|
||||
kls, index, param, val = event.parseString(cmd)
|
||||
kls = "".join(kls)
|
||||
index = int(*index)
|
||||
target = getattr(self.vm, kls)[index]
|
||||
if val in ["off", "on"]:
|
||||
setattr(target, param, bool(["off", "on"].index(val)))
|
||||
if param in ["gain", "comp", "gate", "limit", "audibility"]:
|
||||
setattr(target, param, float(val))
|
||||
if param in ["label"]:
|
||||
val = " ".join(val)
|
||||
setattr(target, param, val)
|
||||
if len(event.parseString(cmd)) == 2:
|
||||
kls, param = event.parseString(cmd)
|
||||
target = getattr(self.vm, kls[0])[int(kls[-1])]
|
||||
res.append(getattr(target, param))
|
||||
elif len(event.parseString(cmd)) == 3:
|
||||
kls, param, val = event.parseString(cmd)
|
||||
target = getattr(self.vm, kls[0])[int(kls[-1])]
|
||||
if "".join(val) in ["off", "on"]:
|
||||
setattr(target, param, bool(["off", "on"].index("".join(val))))
|
||||
elif param in ["gain", "comp", "gate", "limit", "audibility"]:
|
||||
setattr(target, param, float("".join(val)))
|
||||
elif param in ["label"]:
|
||||
setattr(target, param, " ".join(val))
|
||||
|
||||
time.sleep(0.05)
|
||||
return res
|
||||
|
||||
|
||||
def main(cmds=None):
|
||||
@ -61,34 +59,43 @@ def main(cmds=None):
|
||||
with voicemeeterlib.api(kind_id) as vm:
|
||||
parser = Parser(vm)
|
||||
if cmds:
|
||||
parser.parse(cmds)
|
||||
res = parser.parse(cmds)
|
||||
if res:
|
||||
print(res)
|
||||
else:
|
||||
try:
|
||||
while True:
|
||||
cmd = input("please enter command (Return to exit)\n")
|
||||
if not cmd:
|
||||
break
|
||||
parser.parse((cmd,))
|
||||
res = parser.parse((cmd,))
|
||||
if res:
|
||||
print(res)
|
||||
except KeyboardInterrupt as e:
|
||||
SystemExit(e)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
cmds = (
|
||||
"strip -> 0 -> mute on",
|
||||
"bus -> 0 -> mute on",
|
||||
"strip -> 0 -> mute off",
|
||||
"bus -> 0 -> mute on",
|
||||
"strip -> 3 -> solo on",
|
||||
"strip -> 3 -> solo off",
|
||||
"strip -> 1 -> A1 on",
|
||||
"strip -> 1 -> A1 off",
|
||||
"bus -> 3 -> eq on",
|
||||
"bus -> 3 -> eq off",
|
||||
"strip -> 4 -> gain 1.2",
|
||||
"strip -> 0 -> gain -8.2",
|
||||
"strip -> 1 -> label -> rode podmic",
|
||||
"strip -> 2 -> limit -28",
|
||||
"strip 0 -> mute -> on",
|
||||
"strip 0 -> mute",
|
||||
"bus 0 -> mute -> on",
|
||||
"strip 0 -> mute -> off",
|
||||
"bus 0 -> mute -> on",
|
||||
"strip 3 -> solo -> on",
|
||||
"strip 3 -> solo -> off",
|
||||
"strip 1 -> A1 -> on",
|
||||
"strip 1 -> A1",
|
||||
"strip 1 -> A1 -> off",
|
||||
"strip 1 -> A1",
|
||||
"bus 3 -> eq -> on",
|
||||
"bus 3 -> eq -> off",
|
||||
"strip 4 -> gain -> 1.2",
|
||||
"strip 0 -> gain -> -8.2",
|
||||
"strip 0 -> gain",
|
||||
"strip 1 -> label -> rode podmic",
|
||||
"strip 2 -> limit -> -28",
|
||||
"strip 2 -> limit",
|
||||
)
|
||||
|
||||
# pass cmds to parse cmds, otherwise simply run main() to test stdin parsing
|
||||
|
Loading…
Reference in New Issue
Block a user