From 8205534a4006f605fe75e6b8e585382e17c5f429 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 8 May 2020 18:29:51 +0200 Subject: [PATCH] Client bugfixs --- client.py | 76 +++++++++++++++++++------------------------------- libs/OSCom.py | 5 ++++ libs/UDPcom.py | 13 +++++++-- libs/WScom.py | 19 ++++++++++++- libs/midi3.py | 1 - main.py | 4 +-- 6 files changed, 64 insertions(+), 54 deletions(-) diff --git a/client.py b/client.py index 1711a55..ba0468c 100755 --- a/client.py +++ b/client.py @@ -44,6 +44,8 @@ sys.path.append('libs/') import midi3 import types import websocket +import gstt +#import WScom try: import _thread @@ -52,8 +54,6 @@ except ImportError: import argparse -debug = 1 - print ("") print ("Arguments parsing if needed...") @@ -146,7 +146,7 @@ def LoadConfs(): f=open("jamidi.json","r") s = f.read() - Confs = json.loads(s) + gstt.Confs = json.loads(s) # return midi confname number for given type @@ -154,14 +154,16 @@ def findConfs(confname,conftype): #print("searching", midiconfname,'...') position = -1 - for counter in range(len(Confs[conftype])): - if confname == Confs[conftype][counter]['name']: + for counter in range(len(gstt.Confs[conftype])): + if confname == gstt.Confs[conftype][counter]['name']: #print(confname, "is ", counter) position = counter return position + + def curved(value): return round(np.sqrt(value)*11.27) @@ -191,34 +193,6 @@ def cc(midichannel, ccnumber, value, mididest): midi3.MidiMsg([CONTROLLER_CHANGE+midichannel-1, ccnumber, value], mididest) - ''' - # Specials features ? - if len(MidiRules['Specials']) > 0: - - for counter in range(len(MidiRules["Specials"])): - - # print() - # print("Name", MidiRules["Specials"][counter]["name"]) - # print("Song", MidiRules["Specials"][counter]["songname"], songs[song]) # name, "all" - # print("Channel", MidiRules["Specials"][ counter]["chanIN"], MidiChannel) # number, "all" - # print("Note", MidiRules["Specials"][counter]["notes"], MidiNote) # number, "all" - # print("Notetype", MidiRules["Specials"][counter]["notetype"], "on") # "on", "off", "all" - - if (MidiRules["Specials"][counter]["songname"] == songs[song] or MidiRules["Specials"][counter]["songname"] == "all") and (MidiRules["Specials"][counter]["chanIN"] == MidiChannel or MidiRules["Specials"][counter]["chanIN"] == "all") and (MidiRules["Specials"][counter]["notes"] == MidiNote or MidiRules["Specials"][counter]["notes"] == "all") and (MidiRules["Specials"][counter]["notetype"] == "off" or MidiRules["Specials"][counter]["notetype"] == "all") : - midirulecode = MidiRules["Specials"][counter]["code"] - print("Specials function :",MidiRules["Specials"][counter]["songname"], ":", MidiRules["Specials"][counter]["name"], midirulecode) - - # python function - if midirulecode.count('.') > 0: - #print(midirulecode+"("+str(MidiNote)+')') - eval(midirulecode+"("+str(MidiNote)+')') - - # Maxwell function - elif midirulecode.count('/') > 0: - #print("Specials NoteON got :", MidiRules["Specials"][counter]["songname"]," IN Channel :", MidiRules["Specials"][counter]["chanIN"]," Code :", midirulecode, " CC", maxwellccs.FindCC(MidiRules["Specials"][counter]["code"]), " value :",MidiRules["Specials"][counter]["valuetype"], " laser :", MidiRules["ZccLcc"][counter]["laser"] ) - midi3.MidiMsg((CONTROLLER_CHANGE, maxwellccs.FindCC(MidiRules["Specials"][counter]["code"]), MidiRules["Specials"][counter]["valuetype"]), mididest, laser = MidiRules["Specials"][counter]["laser"]) - - ''' # /reset nozoids with "default" values def reset(nozoid): @@ -228,12 +202,12 @@ def reset(nozoid): if nozoid == "mmo3": for ccnumber in range(0,32): - midi3.MidiMsg([CONTROLLER_CHANGE+Confs["mmo3"][0]["midichan"]-1, ccnumber, resetMMO3[ccnumber]], Confs["mmo3"][0]["mididevice"]) + midi3.MidiMsg([CONTROLLER_CHANGE+gstt.Confs["mmo3"][0]["midichan"]-1, ccnumber, resetMMO3[ccnumber]], gstt.Confs["mmo3"][0]["mididevice"]) sendWSall("/mmo3/cc/"+str(ccnumber)+" "+str(resetMMO3[ccnumber])) crtvalueMMO3[ccnumber]=resetMMO3[ccnumber] else: for ccnumber in range(0,32): - midi3.MidiMsg([CONTROLLER_CHANGE+Confs["ocs2"][0]["midichan"]-1, ccnumber, resetOCS2[ccnumber]], Confs["ocs2"][0]["mididevice"]) + midi3.MidiMsg([CONTROLLER_CHANGE+gstt.Confs["ocs2"][0]["midichan"]-1, ccnumber, resetOCS2[ccnumber]], gstt.Confs["ocs2"][0]["mididevice"]) sendWSall("/ocs2/cc/"+str(ccnumber)+" "+str(resetOCS2[ccnumber])) crtvalueOCS2[ccnumber]=resetOCS2[ccnumber] print("End of reset for", nozoid) @@ -282,14 +256,19 @@ def on_message(ws, message): if len(message) > 200: message = message[:200]+'..' - oscpath = message.split(" ") - wscommand = oscpath[0].split("/") + oscpath = message.split(" ") # ['/ocs2/cc/31', '0'] or ['/players', '(player:1)'] + # print("oscpath", oscpath) + wscommand = oscpath[0].split("/") # ['', 'ocs2', 'cc', '31'] or ['', 'players'] + # print("wscommand", wscommand) device = wscommand[1] - command = wscommand[2] + if len(wscommand) == 2: + command = wscommand[1] + else: + command = wscommand[2] # debug - if debug > 0: - print("for device", device,"command :", command) + if gstt.debug > 0 and command != "status" and command != "players": + print("for device", device, "command :", command) # noarg if len(oscpath) == 1: @@ -301,18 +280,18 @@ def on_message(ws, message): ccvr=int(wscommand[3]) #cc variable ccvl=int(oscpath[1]) #cc value - if debug > 0: + if gstt.debug > 0: print("device", device,"ccvr=%d/ccvl=%d"%(ccvr,ccvl)) for mididevice in midi3.findJamDevices(device): - cc(Confs[device][0]["midichan"], ccvr, ccvl, mididevice) + cc(gstt.Confs[device][0]["midichan"], ccvr, ccvl, mididevice) ''' # CC : /device/cc/2 127 elif wscommand[1] == "ocs2": if wscommand[2] == "cc": print("Incoming OCS-2 WS CC", wscommand[3], ":", int(oscpath[1])) - cc(Confs["ocs2"][0]["midichan"], int(wscommand[3]), int(oscpath[1]), Confs["default"][0]["mididevice"]) + cc(gstt.Confs["ocs2"][0]["midichan"], int(wscommand[3]), int(oscpath[1]), gstt.Confs["default"][0]["mididevice"]) if wscommand[2] == "OSC1": print("Incoming OCS-2 WS OSC1", wscommand[3], ":", int(oscpath[1])) @@ -321,7 +300,7 @@ def on_message(ws, message): elif wscommand[1] == "mmo3": if wscommand[2] == "cc": print("Incoming MMO-3 WS CC", wscommand[3], ":", int(oscpath[1])) - cc(Confs["mmo3"][0]["midichan"], int(wscommand[3]), int(oscpath[1]), Confs["default"][0]["mididevice"]) + cc(gstt.Confs["mmo3"][0]["midichan"], int(wscommand[3]), int(oscpath[1]), gstt.Confs["default"][0]["mididevice"]) if wscommand[2] == "OSC1": print("Incoming MMO-3 WS OSC1", wscommand[3], ":", int(oscpath[1])) @@ -346,6 +325,7 @@ def on_message(ws, message): midi3.NoteOff(int(oscpath[1]), mididevice) + # if needed a loop back : WS Client -> server -> WS Client # sendWSall(message) @@ -358,9 +338,9 @@ def on_message(ws, message): LoadMidiRules() LoadConfs() -serverIP = Confs[servername][0]["IP"] +serverIP = gstt.Confs[servername][0]["IP"] #serverIP = "10.8.0.46" -wsPORT = Confs[servername][0]["port"] +wsPORT = gstt.Confs[servername][0]["port"] print("Running....") @@ -378,8 +358,8 @@ try: on_close = on_close) midi3.ws = ws - midi3.clientmode = True - midi3.Confs = Confs + gstt.clientmode = True + #gstt.Confs = Confs print("Midi Configuration...") midi3.check() diff --git a/libs/OSCom.py b/libs/OSCom.py index 93041ab..9dcd005 100644 --- a/libs/OSCom.py +++ b/libs/OSCom.py @@ -9,6 +9,11 @@ OSCom.Start(serverIP, OSCPORT) default handler : handler(path, tags, args, source) register particular OSC command in Start(): i.e oscserver.addMsgHandler( "/n", Note) +Launch + +print("Launching OSC Server", serverIP,':', OSCPORT) +OSCom.Start(serverIP, OSCPORT) + ''' import midi3 diff --git a/libs/UDPcom.py b/libs/UDPcom.py index 37d6a12..89c9d84 100644 --- a/libs/UDPcom.py +++ b/libs/UDPcom.py @@ -8,6 +8,11 @@ UDPcom for jamidi v0.1b UDPcom.Start(serverIP, UDPORT) Handler : udp_thread() +Launch : + +print("Launching UDP Server", serverIP,':', wsPORT) +UDPcom.Start(serverIP, UDPORT) + Read below for : - MIDI NOTES use ;nmonv @@ -21,16 +26,20 @@ import midi3 import types, json import socket import _thread, time -import midi3 + import WScom, OSCom import gstt import time -#base36 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] def GetTime(): return time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()) + +# +# SERVER part +# + def udp_thread(): while True: diff --git a/libs/WScom.py b/libs/WScom.py index 55ac681..e4325dd 100644 --- a/libs/WScom.py +++ b/libs/WScom.py @@ -9,6 +9,19 @@ WScom.Start(serverIP, wsPORT) WScom.runforever() handler : message_received(client, wserver, message) +Launch : + +print("Launching WS Server", serverIP,':', UDPORT) +WScom.Start(serverIP, wsPORT) + +try: + + + WScom.runforever() + +except Exception: + traceback.print_exc() + ''' import midi3 @@ -21,6 +34,10 @@ from websocket_server import WebsocketServer import gstt import UDPcom, OSCom +# +# Server part +# + def Start(serverIP, wsPORT): global wserver @@ -140,7 +157,7 @@ def message_received(client, wserver, message): def send(message): if gstt.clientmode == True: - send(message) + midi3.ws.send(message) else: wserver.send_message_to_all(msg = message) diff --git a/libs/midi3.py b/libs/midi3.py index e91ce9a..1e6b9f1 100644 --- a/libs/midi3.py +++ b/libs/midi3.py @@ -1,4 +1,3 @@ - #!/usr/bin/python3 # -*- coding: utf-8 -*- diff --git a/main.py b/main.py index 90db2f9..1193b51 100755 --- a/main.py +++ b/main.py @@ -237,10 +237,10 @@ print(GetTime(),"Launching servers...") print(GetTime(),"Launching OSC Server", serverIP,':', OSCPORT) OSCom.Start(serverIP, OSCPORT) -print(GetTime(),"Launching WS Server", serverIP,':', wsPORT) +print(GetTime(),"Launching UDP Server", serverIP,':', wsPORT) UDPcom.Start(serverIP, UDPORT) -print(GetTime(),"Launching UDP Server", serverIP,':', UDPORT) +print(GetTime(),"Launching WS Server", serverIP,':', UDPORT) WScom.Start(serverIP, wsPORT)