-
Notifications
You must be signed in to change notification settings - Fork 1
/
craft.py
126 lines (114 loc) · 4.32 KB
/
craft.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import websocket
import psutil
import json
import uuid
import time
from json import JSONEncoder
from uuid import UUID
from museScore_handler import *
JSONEncoder_olddefault = JSONEncoder.default
# special encoding for supporting UUID in json payload
def JSONEncoder_newdefault(self, o):
if isinstance(o, UUID): return str(o)
return JSONEncoder_olddefault(self, o)
JSONEncoder.default = JSONEncoder_newdefault
last_msg = []
duration = 5
eps = 0
sessionId = 0
tool = 0
def on_message(ws, message):
global last_msg, duration, tool
message = json.loads(message)
print(message)
if message['message_type'] == 'crown_turn_event' :
if message['task_options']['current_tool'] == 'NoInput':
if message['task_options']['current_tool_option'] == 'Pitch' :
# set_edit_mode(1)
if int(message['ratchet_delta']) > eps :
press_key(38) # up arrow
elif int(message['ratchet_delta']) < -eps :
press_key(40) # down arrow
elif message['task_options']['current_tool_option'] == 'Rewind' :
if int(message['ratchet_delta']) > eps :
press_key(39) # right arrow
elif int(message['ratchet_delta']) < -eps :
press_key(37) # left arrow
else :
# set_edit_mode(0)
if int(message['ratchet_delta']) > eps and duration < 7:
duration += 1
elif int(message['ratchet_delta']) < -eps and duration > 1:
duration -= 1
print(duration)
press_key(48 + duration)
else :
set_edit_mode(0)
if message['task_options']['current_tool_option'] == 'Trans' :
if int(message['ratchet_delta']) > eps :
press_key([[107]])
elif int(message['ratchet_delta']) < -eps :
press_key([[109]])
elif message['task_options']['current_tool_option'] == 'Tone' :
press_key(121)
press_key([9 for i in range(17)])
if int(message['ratchet_delta']) > eps :
press_key([38]) # right arrow 2 : 50
elif int(message['ratchet_delta']) < -eps :
press_key([40]) # left arrow 1 : 49
press_key(121)
last_msg.append(message)
message = []
elif message['message_type'] == 'crown_touch_event':
message['time_stamp'] = time.time()
print('touch', message['touch_state'])
if message['touch_state'] == 0 and len(last_msg) > 0 and last_msg[-1]['message_type'] == 'crown_touch_event' and last_msg[-1]['touch_state'] == 1:
if message['time_stamp'] - last_msg[-1]['time_stamp'] >= 0.5:
tool = 1 - tool
if tool == 1 :
change_tool(ws, "Input")
print("CHANGEMODE Input")
else :
change_tool(ws, "NoInput")
print("CHANGEMODE NoInput")
last_msg.append(message)
message = []
elif message['message_type'] == "register_ack" :
global sessionId
sessionId = message['session_id']
change_tool(ws, "NoInput")
def change_tool(ws, name) :
global sessionId
connectMessage = {
"message_type": "tool_change",
"session_id": sessionId,
"tool_id": name
}
regMsg = json.dumps(connectMessage)
ws.send(regMsg.encode('utf8'))
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
uid = "6202f2fb-834c-4393-a95f-f5051171e3ec"
pid = -1
pids = psutil.pids()
for pid_element in pids:
if psutil.Process(pid_element).name() == 'MuseScore3.exe':
pid = pid_element
break
connectMessage = {
"message_type": "register",
"plugin_guid": uid,
"PID": pid,
"execName": "MuseScore3.exe",
"application_version": "1.0"
}
regMsg = json.dumps(connectMessage)
ws.send(regMsg.encode('utf8'))
if __name__ == "__main__":
set_edit_mode(1)
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:10134", on_open = on_open, on_message = on_message, on_error = on_error, on_close = on_close)
ws.run_forever()