diff --git a/client.py b/client.py index 1afca86..6b051af 100644 --- a/client.py +++ b/client.py @@ -315,7 +315,8 @@ def on_message(ws, message): #cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, Confs[wscommand[1]][0]["mididevice"]) crtvalueMMO3[ccvr]=ccvl - cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, mididevice) ''' # CC : /device/cc/2 127 @@ -347,12 +348,14 @@ def on_message(ws, message): # NOTEON : /device/noteon note velocity elif wscommand[2] == "noteon": - midi3.NoteOn(int(oscpath[1]), int(oscpath[2]), Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + midi3.NoteOn(int(oscpath[1]), int(oscpath[2]), mididevice) # NOTEOFF /device/noteoff note elif wscommand[2] == "noteoff": - midi3.NoteOff(int(oscpath[1]), Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + midi3.NoteOff(int(oscpath[1]), mididevice) # if needed a loop back : WS Client -> server -> WS Client diff --git a/jamidi.json b/jamidi.json index dae3d52..e899477 100644 --- a/jamidi.json +++ b/jamidi.json @@ -32,6 +32,17 @@ } ], +"tmlsr" : +[ + { + "_comment": "Server is laser.teamlaser.fr", + "type": "serverconf", + "name": "tmlsr", + "IP": "laser.teamlaser.fr", + "port": 8081 + } +], + "ocs2": [ { "_comment": "OCS-2 device parameters", @@ -50,7 +61,7 @@ } ], -"ocs2": [ +"ocs2b": [ { "_comment": "OCS-2 control with BCR2000", "type": "mididevice", @@ -59,7 +70,7 @@ } ], -"mmo3": [ +"mmo3b": [ { "_comment": "MMO-3 control with BCR2000", "type": "mididevice", diff --git a/libs/midi3.py b/libs/midi3.py index 424778d..7816542 100644 --- a/libs/midi3.py +++ b/libs/midi3.py @@ -150,8 +150,8 @@ def MidinProcess(inqueue, portname): MidiVel = msg[2] print("NOTE ON :", MidiNote, 'velocity :', MidiVel, "Channel", MidiChannel) #NoteOn(msg[1],msg[2],mididest) - print("Midi in process send /"+findJamDevice(portname, MidiChannel)+"/noteon "+str(msg[1])+" "+str(msg[2])) - wssend("/"+findJamDevice(portname, MidiChannel)+"/noteon "+str(msg[1])+" "+str(msg[2])) + print("Midi in process send /"+findJamName(portname, MidiChannel)+"/noteon "+str(msg[1])+" "+str(msg[2])) + wssend("/"+findJamName(portname, MidiChannel)+"/noteon "+str(msg[1])+" "+str(msg[2])) ''' # Sampler mode : note <63 launch snare.wav / note > 62 kick.wav @@ -182,18 +182,18 @@ def MidinProcess(inqueue, portname): print("NOTE OFF :", MidiNote, 'velocity :', MidiVel, "Channel", MidiChannel) #NoteOff(msg[1],msg[2], mididest) - print("Midi in process send /"+findJamDevice(portname, MidiChannel)+"/noteoff "+str(msg[1])) - wssend("/"+findJamDevice(portname, MidiChannel)+"/noteoff "+str(msg[1])) + print("Midi in process send /"+findJamName(portname, MidiChannel)+"/noteoff "+str(msg[1])) + wssend("/"+findJamName(portname, MidiChannel)+"/noteoff "+str(msg[1])) # # CC on all Midi Channels if CONTROLLER_CHANGE -1 < msg[0] < 192: MidiChannel = msg[0]-175 - #findJamDevice(portname, MidiChannel) - print("channel", MidiChannel, " ",findJamDevice(portname, MidiChannel), " CC :", msg[1], msg[2]) - print("Midi in process send /"+findJamDevice(portname, MidiChannel)+"/cc/"+str(msg[1])+" "+str(msg[2])+" to WS") - wssend("/"+findJamDevice(portname, MidiChannel)+"/cc/"+str(msg[1])+" "+str(msg[2])) + #findJamName(portname, MidiChannel) + print("channel", MidiChannel, " ",findJamName(portname, MidiChannel), " CC :", msg[1], msg[2]) + print("Midi in process send /"+findJamName(portname, MidiChannel)+"/cc/"+str(msg[1])+" "+str(msg[2])+" to WS") + wssend("/"+findJamName(portname, MidiChannel)+"/cc/"+str(msg[1])+" "+str(msg[2])) ''' @@ -233,20 +233,10 @@ def NoteOn(note,color, mididest): midiport[port].send_message([NOTE_ON, note, color]) # To All - elif mididest == "all" and midiname[port].find(mididest) != 0 and midiname[port].find(BhorealMidiName) != 0 and midiname[port].find(LaunchMidiName) != 0: + elif mididest == "all" and midiname[port].find(mididest) != 0: midiport[port].send_message([NOTE_ON, note, color]) - ''' - # To Launchpad, if present. - elif mididest == "launchpad" and midiname[port].find(LaunchMidiName) == 0: - launchpad.PadNoteOn(note%64,color) - # To Bhoreal, if present. - elif mididest == "bhoreal" and midiname[port].find(BhorealMidiName) == 0: - gstt.BhorLeds[note%64]=color - midiport[port].send_message([NOTE_ON, note%64, color]) - #bhorosc.sendosc("/bhoreal", [note%64 , 0]) - ''' def NoteOff(note, mididest): @@ -260,21 +250,9 @@ def NoteOff(note, mididest): midiport[port].send_message([NOTE_OFF, note, 0]) # To All - elif mididest == "all" and midiname[port].find(mididest) == -1 and midiname[port].find(BhorealMidiName) == -1 and midiname[port].find(LaunchMidiName) == -1: + elif mididest == "all" and midiname[port].find(mididest) == -1: midiport[port].send_message([NOTE_OFF, note, 0]) - ''' - # To Launchpad, if present. - elif mididest == "launchpad" and midiname[port].find(LaunchMidiName) == 0: - launchpad.PadNoteOff(note%64) - - # To Bhoreal, if present. - elif mididest == "bhoreal" and midiname[port].find(BhorealMidiName) == 0: - midiport[port].send_message([NOTE_OFF, note%64, 0]) - gstt.BhorLeds[note%64] = 0 - #bhorosc.sendosc("/bhoreal", [note%64 , 0]) - ''' - # Generic call back : new msg forwarded to queue @@ -576,8 +554,8 @@ def listdevice(number): -# return device name number for given mididevice and midichannel -def findJamDevice(mididevice, midichan): +# return device name for given mididevice and midichannel +def findJamName(mididevice, midichan): #print("searching", mididevice, "channel", midichan,'...') @@ -593,6 +571,22 @@ def findJamDevice(mididevice, midichan): return "None" +# return all midi devices for given name +def findJamDevices(name): + + devices = [] + print ("searching", name) + for (k, v) in Confs.items(): + + if v[0]["type"] == "mididevice": + #print(k, name,k.find(name)) + if k.find(name) != -1: + #print(v[0]["mididevice"]) + devices.append(v[0]["mididevice"]) + #print(devices) + return devices + + def check(): diff --git a/main.py b/main.py index 92ce80d..c487a43 100755 --- a/main.py +++ b/main.py @@ -256,7 +256,8 @@ def message_received(client, wserver, message): #cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, Confs[wscommand[1]][0]["mididevice"]) crtvalueMMO3[ccvr]=ccvl - cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + cc(Confs[wscommand[1]][0]["midichan"], ccvr, ccvl, mididevice) # RESET : /device/reset 1 @@ -269,12 +270,16 @@ def message_received(client, wserver, message): # NOTEON : /device/noteon note velocity elif wscommand[2] == "noteon": - midi3.NoteOn(int(oscpath[1]), int(oscpath[2]), Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + midi3.NoteOn(int(oscpath[1]), int(oscpath[2]), mididevice) + #midi3.NoteOn(int(oscpath[1]), int(oscpath[2]), Confs[wscommand[1]][0]["mididevice"]) # NOTEOFF /device/noteoff note elif wscommand[2] == "noteoff": - midi3.NoteOff(int(oscpath[1]), Confs[wscommand[1]][0]["mididevice"]) + for mididevice in midi3.findJamDevices(wscommand[1]): + midi3.NoteOff(int(oscpath[1]), mididevice) + #midi3.NoteOff(int(oscpath[1]), Confs[wscommand[1]][0]["mididevice"]) # Loop back : WS Client -> server -> WS Client @@ -299,6 +304,7 @@ LoadConfs() serverIP = Confs[servername][0]["IP"] wsPORT = Confs[servername][0]["port"] +print(Confs["ocs2"][0]["mididevice"]) print("Running....") @@ -310,7 +316,7 @@ try: wserver = WebsocketServer(wsPORT,host=serverIP) midi3.ws = wserver midi3.Confs = Confs - midi3.findJamDevice("UM-ONE:UM-ONE MIDI 1 20:0", 1) + #midi3.findJamDevices("ocs2") print("") print(GetTime(),"Launching Jamidi Websocket server...")