From fb9999c8287370feaefe137bf1f5be0a9a357545 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 9 Oct 2020 14:57:03 +0200 Subject: [PATCH] Redis events --- README.md | 39 +++++++++++++++++------- libs/__pycache__/midix.cpython-38.pyc | Bin 14352 -> 14547 bytes libs/midix.py | 41 ++++++++++++++++++++------ miredis.py | 36 +++++++++++++++++++++- 4 files changed, 95 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 299b390..0e6039f 100644 --- a/README.md +++ b/README.md @@ -16,18 +16,10 @@ To enable Link : python3 miredis.py -link +## New Features -## Redis keys - -"/midi/noteon/midichannel" value : "note/velocity" - -"/midi/noteoff/midichannel" value : "note" - -"/midi/cc/midichannel/ccnumber" value : "ccvalue" - -"/beat" value : "beatnumber" - -"/bpm" value : "currentbpm" +- Added verbose mode -v +- Added redis subscribe events ## OSC @@ -47,3 +39,28 @@ python3 miredis.py -link /beat beatnumber /bpm bpm + + +## Redis keys + +"/midi/noteon/midichannel" value : "note/velocity" + +"/midi/noteoff/midichannel" value : "note" + +"/midi/cc/midichannel/ccnumber" value : "ccvalue" + +"/beat" value : "beatnumber" + +"/bpm" value : "currentbpm" + +"/midi/last_event" midi events key + + +## Redis midi events : key "/midi/last_event" + +"/midi/noteon/midichannel/note/velocity" + +"/midi/noteoff/midichannel/note + +"/midi/cc/midichannel/ccnumber/ccvalue" + diff --git a/libs/__pycache__/midix.cpython-38.pyc b/libs/__pycache__/midix.cpython-38.pyc index 9e714f77217296e51876bff4c4dc6b6e27eb5a45..ebdb656abaf315dc30a298e08a3fa5e21766c88d 100644 GIT binary patch delta 3720 zcmZuzdvH|M8NcV=ePweuyCj=;ve_ggWQpXR5P1kBAPJ8o7$~?@mSoS(gWc>V=iY#1 zHj}o&cBUwxN6}(iLlJGNGZs>%3bsI%KWK|Z2gMaz$8o0CPN(e*ozAq**zY?xBuLqr z{p~s5`Ofz`zw@0vGW_01+BTQVDZxhzek+u@u5b~ppCStU*(2eGC^0-)u7g)Eu55sodUZk32vd@-~(C# z$hxT<+)CHb7SP&8`)Mm(3m(2f*U|eyvVFZo*VDEG5^d9VOe(<#Vct$Rz66{C<;m(k}RYh;E?|!0)d0sS@p`TS0y6q|E)wa#xsASm>v6w-gwd*{w{= zse$Tky2kWsy=Q2~XFFq=Aej5?2gerpw!&A>127~?64InhB!f)JR8C08VN4~kr*w>E zF^vxD{-HrS=-2jYF~c9x_WPHOd8$!V9qrMLkdOzIq;;4L#tha3Mw9m8(cb8wJ`flxBmKCGEgj9N}3zERsRmVW|s9RrhOCt>&TtIkJUFQQCF8DT9voce;5t$+#l zs99tK|8|*|FIQ9CFQJyXvz)N5nQpaCDZ=#FT7-27_am%FXhUe{&$}Ncn|Pt;K@#Ho zJPqU&f7w$^`ev?p8VM{|(py|NK-2W@VtZz~)9)qjeh}doKdadQe>S7p^;a0*Qj73U zG7h@8gCt-{TB+7M+Rs+-F>hu45Xh1atQpmG-W3oJDMQFbM90_IPcr4$EqtDI(b1{@36`LQ8S$;YK}XTnOQND4^W5|$}< z0_Hi=aVUPmIc_yP3Ckp*MNlh+^}_ms;}XPYO05wqNFO!Qso%&zJyV`9<-_4kj4RYN zo@%JHxZk|RR$78*Iva%7$n29NHZX7r^i0%^o`&zXbs1samE<>9^qMq z{@gR@H4WyH;vilynojbRJi?yjorRCB*@24Kd)cD^0XusP$A=IOBOF0^9N`HB%qgHS zbY=SBoD^m78lNNcGWrp(nFW1hp^vAaT|zUgNa1^YvA`tm;s~OW&d|P|Xfzy+ha=FW zExH!%W2Oq&EFd?yuP8yD=Fb-8x^Poc86GtPR`v|PP_&YK%D*bwZ2JKkdyXG!$o8_M zF#ZT*z?SPE4jVf<>%E1)=bs?kd3SMf23iU@lNQnSpU3T-f3LW7|Oidhp{iR?S!A<_>;-_<7z||K4rY%V&9Myvss`XGd&5xFpk+1l}RM+ARDNk(;f;@EgA|rW!_opZ<<1d;|TcrnB)@Xag%VFObx>mrw?hyK%BBy zP<$H8P#}!|9m}AC&>`E1MRugh#OY)wX0DeOkQ@<&hfTn8GNp6WSgY+F3~TTlsAbJ7 z#hK%A2UFt1S}ZgiX9lZ8^CD>EML-F0l(QN)6wx6ggAe7Nk!%BFbuk3UuZA}H#>wkQfKEunsnj+5ftj;njYbfs%DQ! z0b-KaL4;$xtIC@z3W!w-sybK-LqqB92}j`Sk5@I>1ZPh2*Q-{OIR8&oE4c=&EaW?@ z>obM5+n9+a&*EM5shb9MqdjI`i&wA+*y|-ll~uyt2evkIwZ>EME06(W=k1(C6T;)K zMNiyVu=qZHXBjB@Ub}CVlH*tC%;VlH@MH#z>!}k$BK)8krMuorT+f`L28I> delta 3631 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 qe${7#w}%D(0PX6i4 diff --git a/libs/midix.py b/libs/midix.py index 066e544..8424b24 100644 --- a/libs/midix.py +++ b/libs/midix.py @@ -159,6 +159,11 @@ def toKey(keyname,keyvalue): # Store encoded data in Redis return r.set(keyname,keyvalue) +def toKeyevent(eventname): + + print("redis midi event key :", eventname) + r.publish("/midi/last_event", eventname) + def GetTime(): return time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()) @@ -291,15 +296,22 @@ def MidinProcess(inqueue, portname): MidiNote = msg[1] MidiVel = msg[2] print() + #print(debug) print("NOTE ON :", "Channel", MidiChannel, "note :", MidiNote, 'velocity :', MidiVel ) # redis key : "/midi/noteon/midichannel" value : "note/velocity" if r.set("/midi/noteon/"+str(MidiChannel), str(MidiNote)+"/"+str(MidiVel))==True: - print("redis :", "/midi/noteon/"+str(MidiChannel)+" : "+ str(MidiNote)+"/"+str(MidiVel)) + if debug == "True": + print("redis :", "/midi/noteon/"+str(MidiChannel)+" : "+ str(MidiNote)+"/"+str(MidiVel)) + # to Key redis pubsub feed + toKeyevent("/midi/noteon/"+str(MidiChannel)+"/"+str(MidiNote)+"/"+str(MidiVel)) + # OSC : /midi/noteon midichannel note velocity - SendOSC("/midi/noteon",[MidiChannel, msg[1], msg[2]]) - print("osc :","/midi/noteon/",[MidiChannel, msg[1], msg[2]]) + #SendOSC("/midi/noteon",[MidiChannel, msg[1], msg[2]]) + #print("osc :","/midi/noteon/",[MidiChannel, msg[1], msg[2]]) + + ''' # Sampler mode : note <63 launch snare.wav / note > 62 kick.wav @@ -327,16 +339,22 @@ def MidinProcess(inqueue, portname): MidiChannel = msg[0]-144 else: MidiChannel = msg[0]-128 + MidiNote = msg[1] print("NOTE_off channel :", MidiChannel, "note :", MidiNote) # redis key : "/midi/noteon/midichannel" value : "note" if r.set("/midi/noteoff/"+str(MidiChannel), str(MidiNote)) ==True: - print("redis :", "/midi/noteoff/"+str(MidiChannel)+" : "+ str(MidiNote)) + if debug == "True": + print("redis :", "/midi/noteoff/"+str(MidiChannel)+" : "+ str(MidiNote)) + + # to Key redis pubsub feed + #toKeyevent("/midi/noteoff/"+str(MidiChannel)+"/"+str(MidiNote)) # OSC : /midi/noteoff midichannel note SendOSC("/midi/noteoff",[MidiChannel, msg[1]]) - print('osc :', "/midi/noteoff",[MidiChannel, msg[1]]) + if debug == "True": + print('osc :', "/midi/noteoff",[MidiChannel, msg[1]]) # # CC on all Midi Channels @@ -349,11 +367,15 @@ def MidinProcess(inqueue, portname): # redis key : "/midi/cc/midichannel/ccnumber" value : "ccvalue" if r.set("/midi/cc/"+str(MidiChannel)+"/"+str(msg[1]),str(msg[2]))==True: - print("redis :", "/midi/cc/"+str(MidiChannel)+"/"+str(msg[1]), ":", str(msg[2])) + if debug == "True": + print("redis :", "/midi/cc/"+str(MidiChannel)+"/"+str(msg[1]), ":", str(msg[2])) + + # to Key redis pubsub feed + toKeyevent("/midi/cc/"+str(MidiChannel)+"/"+str(msg[1])+"/"+str(msg[2])) # OSC : /midi/cc midichannel ccnumber value - SendOSC("/midi/cc",[msg[0]-175-1, msg[1], msg[2]]) - print("osc :","/midi/cc",[msg[0]-175-1, msg[1], msg[2]] ) + #SendOSC("/midi/cc",[msg[0]-175-1, msg[1], msg[2]]) + #print("osc :","/midi/cc",[msg[0]-175-1, msg[1], msg[2]] ) if msg[0] == TIMING_CLOCK: @@ -399,7 +421,8 @@ def MidinProcess(inqueue, portname): # OSC : /midi/start SendOSC("/midi/stop",[]) - print("osc : /midi/stop") + if debug =="True": + print("osc : /midi/stop") print() ''' # other midi message diff --git a/miredis.py b/miredis.py index d542cce..f4af80d 100644 --- a/miredis.py +++ b/miredis.py @@ -120,12 +120,46 @@ r = redis.StrictRedis(host=redisIP , port=redisPORT, db=0) midix.r = r + + +def Osc(): + + p = r.pubsub() + p.subscribe('updates') + print("Artnet updates subscribed") + + while True: + + # Handle OSC based changed + OSCframe() + + # Handle Artnet change via redis key 'updates' subscription + message = p.get_message() + + if message: + messageCC = message['data'] + # print(type(messageCC)) + #print("Updates said: %s" % messageCC) + if messageCC != 1: + #if ":" in str(messageCC.decode('utf_8')): + messageCC = messageCC.decode('utf_8') + artnetCC = messageCC.split(":") + if len(artnetCC) > 1: + cc(int(artnetCC[0]), round(int(artnetCC[1])/2)) + print() + + #time.sleep(0.0) + + + + + if __name__ == '__main__': import traceback import time - + midix.check() midix.toKey("/beats","0.0")