所以我把这个脚本放在一起了,这使我每当按下“ w”键时都可以发送一个osc(打开声音控制)消息。 (我需要在我的计算机的后台运行它,因此,任何有关如何使其更高效的建议都将受到欢迎!:D)
我遇到的问题是,当我第二次按下“ w”时,我希望它发送不同的消息。 (这是client.send_message
出现的地方。)您将看到我开始写此内容,无济于事。
简而言之,当我第一次按下“ w”时,它可以完美运行。 (执行client.send_message("/TABS", "Mixer")
)。现在,当我第二次点击它时,我希望它执行client.send_message("/TABS", "Instruments")
我该如何去做?
代码:
import argparse
import pynput
from pythonosc import udp_client
from pynput.keyboard import Key, Listener
from pynput import keyboard
import keyboard
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="192.168.1.140",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=8420,
help="The port the OSC server is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)
def on_press(key):
if keyboard.is_pressed('w'):
client.send_message("/TABS", "Mixer")
else:
client.send_message("/TABS", "Instruments")
with Listener(on_press=on_press) as listener:
listener.join()
您将需要保存某种状态(无论是否按下该键)。我假设在您第二次按w
之后,程序应切换回第一个调用。
我无法启动您的示例,但是类似以下内容的方法应该起作用:
import argparse
import pynput
from pythonosc import udp_client
from pynput.keyboard import Key, Listener
from pynput import keyboard
import keyboard
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="192.168.1.140",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=8420,
help="The port the OSC server is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)
w_already_pressed = False # State variable
def on_press(key):
if keyboard.is_pressed('w'):
if not w_already_pressed:
client.send_message("/TABS", "Mixer")
w_already_pressed = True
else:
client.send_message("/TABS", "Instruments")
w_already_pressed = False
with Listener(on_press=on_press) as listener:
listener.join()