diff --git a/LJ.conf b/LJ.conf index 610f3c9..e5cf99e 100644 --- a/LJ.conf +++ b/LJ.conf @@ -1,13 +1,13 @@ [General] lasernumber = 4 -debug = 2 +debug = 0 ljayserverip = 127.0.0.1 nozoscip = 127.0.0.1 bhoroscip = 127.0.0.1 [laser0] color = -1 -ip = 192.168.1.4 +ip = 127.0.0.1 kpps = 25000 centerx = -1610 centery = 0 diff --git a/commands.py b/commands.py index b423e7b..d1cba90 100644 --- a/commands.py +++ b/commands.py @@ -87,7 +87,7 @@ import plugins r = redis.StrictRedis(host=gstt.LjayServerIP , port=6379, db=0) -GenericCommands = ["start","ljclient","clientnumber","noteon","ljpong","ljwars","mouse","emergency","simu","status","run","nozoid","planet","live","words","ai","bank0","pose","lj","cycl","glyph"] +GenericCommands = ["start","ljclient","clientnumber","noteon","ljpong","ljwars","mouse","emergency","simu","status","run","nozoid","planet","live","words","ai","bank0","pose","lj","cycl","glyph","pong"] @@ -180,22 +180,28 @@ def handler(oscpath, args): if oscpath[1] in GenericCommands: + print "GenericCommand :",oscpath[1],"with args",args + if oscpath[1] == "ljclient": LasClientChange(int(args[0])) + elif oscpath[1] == "noteon": NoteOn(int(args[0])) + elif oscpath[1] == "pong": print "LJ commands got pong from", args plugins.sendWSall("/" + args[0] + "start 1") plugins.sendWSall("/status got pong from "+ args[0] +".") + elif oscpath[1] == "mouse": Mouse(int(args[0]),int(args[1]),int(args[2]),int(args[3])) + # /emergency value (0 or 1) - if oscpath[1] == "emergency": + elif oscpath[1] == "emergency": if args[0] == "1": @@ -208,6 +214,8 @@ def handler(oscpath, args): for laser in range(gstt.lasernumber): print "Back to normal for laser ", laser UserOn(laser) + + # Commands with a laser number else: diff --git a/main.py b/main.py index 1310df7..13875a1 100755 --- a/main.py +++ b/main.py @@ -92,8 +92,8 @@ print "Laser client number :",gstt.LasClientNumber serverIP = gstt.LjayServerIP print "Redis IP :", serverIP -extoscIP = gstt.oscIPin -print "extosc IP :", extoscIP +oscserverIP = gstt.oscIPin +print "OSCserver IP :", oscserverIP nozoscIP = gstt.nozoscip print "Nozosc IP :", nozoscIP @@ -108,36 +108,34 @@ print "Lasers requested :", gstt.LaserNumber # Websocket listening port wsPORT = 9001 -# With extosc +# oscserver # OSC Server : accept OSC message on port 8002 #oscIPin = "192.168.1.10"s -extoscIPin = serverIP +oscserverIPin = serverIP -print "extoscIPin", extoscIPin -extoscPORTin = 8002 +print "oscserverIPin", oscserverIPin +oscserverPORTin = 8002 # OSC Client : to send OSC message to an IP port 8001 -extoscIPout = extoscIP -extoscPORTout = 8001 +oscserverIPout = oscserverIP +oscserverPORTout = 8001 -# With Nozoid -# OSC Client : to send OSC message to Nozoid inport 8003 +# Nozoid OSC Client : to send OSC message to Nozoid inport 8003 NozoscIPout = nozoscIP NozoscPORTout = plugins.Port("nozoid") -# With Planetarium -# OSC Client : to send OSC message to planetarium inport 8005 +# Planetarium OSC Client : to send OSC message to planetarium inport 8005 planetIPout = nozoscIP planetPORTout = plugins.Port("planet") -# With Bank0 -# OSC Client : to send OSC message to bank0 inport 8010 +# Bank0 OSC Client : to send OSC message to bank0 inport 8010 bank0IPout = nozoscIP bank0PORTout = plugins.Port("bank0") -oscserver = OSCServer( (extoscIPin, extoscPORTin) ) + +oscserver = OSCServer( (oscserverIPin, oscserverPORTin) ) oscserver.timeout = 0 OSCRunning = True @@ -150,23 +148,23 @@ oscserver.handle_timeout = types.MethodType(handle_timeout, oscserver) ''' osclientext = OSCClient() oscmsg = OSCMessage() -osclientext.connect((extoscIPout, extoscPORTout)) +osclientext.connect((oscserverIPout, oscserverPORTout)) -# send UI string as OSC message to extosc 8001 -# sendextosc(oscaddress, [arg1, arg2,...]) +# send UI string as OSC message to oscserver 8001 +# sendoscserver(oscaddress, [arg1, arg2,...]) -def sendextosc(oscaddress,oscargs=''): +def sendoscserver(oscaddress,oscargs=''): oscmsg = OSCMessage() oscmsg.setAddress(oscaddress) oscmsg.append(oscargs) - #print ("sending to extosc : ",oscmsg) + #print ("sending to oscserver : ",oscmsg) try: - osclientext.sendto(oscmsg, (extoscIPout, extoscPORTout)) + osclientext.sendto(oscmsg, (oscserverIPout, oscserverPORTout)) oscmsg.clearData() except: - print ('Connection to extosc IP', extoscIPout, 'port', extoscPORTout,'refused : died ?') + print ('Connection to oscserver IP', oscserverIPout, 'port', oscserverPORTout,'refused : died ?') sendWSall("/on 0") sendWSall("/status NoLJay") @@ -268,6 +266,22 @@ def osc_frame(): while not oscserver.timed_out: oscserver.handle_request() +def PingAll(): + + for plugin in gstt.plugins.keys(): + + # Plugin Online + if plugins.Ping(plugin): + + sendWSall("/"+ plugin + "/start 1") + if gstt.debug >0: + print "plugin", plugin, "answered." + + # Plugin Offline + else: + sendWSall("/"+ plugin + "/start 0") + if gstt.debug >0: + print "plugin", plugin, "didn't answered." # OSC server Thread : handler, dacs reports and simulator points sender to UI. @@ -367,27 +381,23 @@ def message_received(client, wserver, message): print("") oscpath = message.split(" ") - print "WS Client", client['id'], "said :", message, "splitted in an oscpath :", oscpath + if gstt.debug > 0: + print "WS Client", client['id'], "said :", message, "splitted in an oscpath :", oscpath + PingAll() + message4plugin = False + + # WS received Message is for a plugin ? - # Ping all plugins connexion and send message if right plugin is online. for plugin in gstt.plugins.keys(): - - # Plugin Online - if plugins.Ping(plugin): - - sendWSall("/"+ plugin + "/start 1") - if gstt.debug >0: - print "plugin", plugin, "answered." - - if oscpath[0].find(plugin) != -1 and plugins.Send(plugin,oscpath): - print "message sent correctly to", plugin - - # Plugin Offline - else: - sendWSall("/"+ plugin + "/start 0") - if gstt.debug >0: - print "plugin", plugin, "didn't answered." - plugins.sendWSall("/status Running...") + + if oscpath[0].find(plugin) != -1: + + message4plugin = True + if plugins.Send(plugin,oscpath): + print "message sent correctly to", plugin + + + #plugins.sendWSall("/status Running...") ''' if plugins.Send("planet",oscpath): @@ -416,21 +426,27 @@ def message_received(client, wserver, message): if oscpath[0] == "/on": if oscpath[1] == "1": - sendextosc("/on") + sendoscserver("/on") else: - sendextosc("/off") + sendoscserver("/off") ''' - if len(oscpath) == 1: - args[0] = "noargs" - #print "noargs command" + # WS received message is an LJ command + if message4plugin == False: - elif len(oscpath) > 1: - args[0] = str(oscpath[1]) - #print "arg",oscpath[1] + if len(oscpath) == 1: + args[0] = "noargs" + #print "noargs command" - commands.handler(oscpath[0].split("/"),args) + + elif len(oscpath) > 1: + args[0] = str(oscpath[1]) + #print "arg",oscpath[1] + + commands.handler(oscpath[0].split("/"),args) + + print "" ''' @@ -540,10 +556,10 @@ try: wserver = WebsocketServer(wsPORT,host=serverIP) plugins.Init(wserver) - # Launch OSC thread listening to extosc + # Launch OSC thread listening to oscserver print "" print "Launching OSC server..." - print "at", extoscIPin, "port",str(extoscPORTin) + print "at", oscserverIPin, "port",str(oscserverPORTin) print "Will update webUI dac status every second" oscserver.addMsgHandler( "/noteon", commands.NoteOn ) # Default OSC handler for all OSC incoming message diff --git a/plugins.py b/plugins.py index ddff9dc..d3841f5 100644 --- a/plugins.py +++ b/plugins.py @@ -83,14 +83,10 @@ def Start(name): def OSCsend(name, oscaddress, oscargs =''): + #print "OSCsend in plugins got for", name, ": oscaddress", oscaddress, "oscargs :", oscargs PluginPort = Port(name) - sendWSall("/status Checking "+ name + "...") - if gstt.debug >1: - print "" - print "OSCSend is checking plugin", name, "..." - print "Plugin", name, "is at", gstt.LjayServerIP, ":" + str(PluginPort) - print "Sending", oscaddress, oscargs,"to plugin", name - + #sendWSall("/status Checking "+ name + "...") + osclientplugin = OSCClient() osclientplugin.connect((gstt.LjayServerIP, PluginPort)) oscmsg = OSCMessage() @@ -98,6 +94,9 @@ def OSCsend(name, oscaddress, oscargs =''): oscmsg.append(oscargs) try: + if gstt.debug > 0: + print "OSCSend : sending", oscmsg,"to plugin", name, "at", gstt.LjayServerIP, ":", PluginPort + osclientplugin.sendto(oscmsg, (gstt.LjayServerIP, PluginPort)) oscmsg.clearData() #if gstt.debug >0: @@ -108,15 +107,17 @@ def OSCsend(name, oscaddress, oscargs =''): if gstt.debug > 0: print 'OSCSend : Connection to plugin IP', gstt.LjayServerIP ,':', PluginPort,'refused : died ?' #sendWSall("/status No plugin.") - sendWSall("/status " + name + " is offline") - sendWSall("/" + name + "/start 0") + #sendWSall("/status " + name + " is offline") + #sendWSall("/" + name + "/start 0") #PluginStart(name) return False def Ping(name): - return OSCsend(name,"/ping") + + sendWSall("/"+ name + "/start 0") + return OSCsend(name,"/ping",1) #return True @@ -138,7 +139,7 @@ def Kill(name): # Send a command to given plugin. Will also start it if command contain /start 1 -def Send(name,oscpath): +def Send(name, oscpath): if oscpath[0].find(name) != -1: @@ -147,11 +148,10 @@ def Send(name,oscpath): if Ping(name): # Light up the plugin button - sendWSall("/" + name + "/start 1") - sendWSall("/status " + name + " online") - if gstt.debug >0: - print "Plugin " + name + " online." - print "Command", oscpath + #sendWSall("/" + name + "/start 1") + #sendWSall("/status " + name + " online") + if gstt.debug > 0: + print "Send got", oscpath, "for plugin", name, "currently online." # If start 0, try to kill plugin @@ -163,9 +163,9 @@ def Send(name,oscpath): # Send osc command elif len(oscpath) == 1: - OSCsend(name,oscpath[0], oscargs='noargs') + OSCsend(name, oscpath[0], oscargs='noargs') else: - OSCsend(name,oscpath[0], oscargs=oscpath[1]) + OSCsend(name, oscpath[0], oscargs=oscpath[1]) return True # Plugin not online.. diff --git a/plugins/VJing/bank0.py b/plugins/VJing/bank0.py index 08f729c..c76709a 100644 --- a/plugins/VJing/bank0.py +++ b/plugins/VJing/bank0.py @@ -719,6 +719,13 @@ def OSCquit(): def WebStatus(message): lj3.SendLJ("/status",message) +# /pose/ping value +def OSCping(value): + print("bank0 got /pose/ping with value", value) + lj3.OSCping("bank0") + +''' + print('Loading Bank0...') @@ -731,7 +738,7 @@ osc_startup() osc_udp_server("127.0.0.1", OSCinPort, "InPort") osc_method("/bank0/run*", OSCrun) -osc_method("/bank0/ping*", lj3.OSCping) +osc_method("/bank0/ping*", OSCping) osc_method("/bank0/ljclient", OSCljclient) osc_method("/bank0/ljpl", OSCpl) osc_method("/quit", OSCquit) diff --git a/plugins/VJing/idiotia.py b/plugins/VJing/idiotia.py index d3cbafb..4a55c00 100644 --- a/plugins/VJing/idiotia.py +++ b/plugins/VJing/idiotia.py @@ -25,7 +25,7 @@ from datetime import datetime from random import randrange import redis import lj3 -import sys,time +import sys,time,traceback import os from osc4py3.as_eventloop import * @@ -34,7 +34,8 @@ from osc4py3 import oscbuildparse from osc4py3.oscmethod import * import argparse - +# 0.25 : each frame will be repeated 4 times. +animspeed = 0.25 screen_size = [700,700] xy_center = [screen_size[0]/2,screen_size[1]/2] @@ -44,9 +45,12 @@ OSCinPort = 8011 ljclient = 0 -idiotiaDisplay = [True,True,True,True] +idiotiaDisplay = [True,True,False,False] +#idiotiaDisplay = [False,False,False,False] liveDisplay = [False,False,False,False] -fieldsDisplay = [False,False,False,False] + +fieldsDisplay = [False,False,True,True] +#fieldsDisplay = [True,True,True,True] currentIdiotia = 0 print ("") @@ -99,6 +103,7 @@ else: lj3.Config(redisIP,ljclient) + def hex2rgb(hexcode): return tuple(map(ord,hexcode[1:].decode('hex'))) @@ -109,7 +114,7 @@ def rgb2hex(rgb): # IdiotIA import json -CurrentPose = 1 +#CurrentPose = 1 # Get frame number for pose path describe in PoseDir def lengthPOSE(pose_dir): @@ -125,6 +130,47 @@ def lengthPOSE(pose_dir): return 0 +def prepareIdiotIA(currentAnim): + + WebStatus("Checking anims...") + print() + print("Reading available IdiotIA anims...") + # anim format (name, xpos, ypos, resize, currentframe, totalframe, count, speed) + # 0 1 2 3 4 5 6 7 + # total frames is fetched from directory by lengthPOSE() + + anims[0] = ['boredhh' , xy_center[0] - 100, xy_center[1] + 30, 550, 0, 0, 0, animspeed] + anims[1] = ['belka4' , xy_center[0] - 70, xy_center[1] + 380, 680, 0, 0, 0, animspeed] + anims[2] = ['belka3' , xy_center[0] - 100, xy_center[1] + 360, 700, 0, 0, 0, animspeed] + anims[3] = ['hhhead' , xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[4] = ['hhhead2', xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[5] = ['hhhead4', xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[6] = ['hhred' , xy_center[0] - 250, xy_center[1] + 220, 550, 0, 0, 0, animspeed] + anims[7] = ['hhred2' , xy_center[0] - 200, xy_center[1] + 200, 550, 0, 0, 0, animspeed] + anims[8] = ['lady1' , xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[9] = ['lady1' , xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[10] = ['lady2' , xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[11] = ['lady3' , xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[12] = ['lady4' , xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[13] = ['mila6' , xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[14] = ['mila5' , xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[15] = ['idiotia1', xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[16] = ['idiotia1', xy_center[0] - 100, xy_center[1] + 300, 600, 0, 0, 0, animspeed] + anims[17] = ['belka4', xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + anims[18] = ['belka3', xy_center[0] - 100, xy_center[1] + 280, 600, 0, 0, 0, animspeed] + + #for laseranims in anims: + + for anim in anims: + #print(anim) + anim[5] = lengthPOSE(anim[0]) + WebStatus("Checking "+ anim[0] +"...") + if debug > 0: + print('poses/' + anim[0], "length :", anim[5], "frames") + + print("Current IdiotIA anim is",anims[currentIdiotia][0],"("+str(currentIdiotia)+")") + + # get absolute face position points def getFACE(pose_json,pose_points, people): @@ -180,50 +226,6 @@ def mouth(pose_json, people): -def prepareIdiotIA(currentAnim): - - - WebStatus("Checking anims...") - - print() - print("Reading available IdiotIA anims...") - # anim format (name, xpos, ypos, resize, currentframe, totalframe, count, speed) - # 0 1 2 3 4 5 6 7 - # total frames is fetched from directory by lengthPOSE() - - anims[0] = [['boredhh', xy_center[0], xy_center[1] + 130, 550,0,0,0,5]] - anims[1] = [['belka4', xy_center[0], xy_center[1] + 280, 600,0,0,0,5]] - anims[2] = [['belka3', xy_center[0], xy_center[1] + 280, 600,0,0,0,5]] - anims[3] = [['hhbored2', xy_center[0], xy_center[1]+ 300, 600,0,0,0,5]] - anims[4] = [['hhhead', xy_center[0], xy_center[1]+ 300, 600,0,0,0,5]] - anims[5] = [['hhhead2', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[6] = [['hhhead4', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[7] = [['hhred', xy_center[0], xy_center[1]+ 300, 600,0,0,0,25]] - anims[8] = [['hhred2', xy_center[0], xy_center[1]+ 300, 600,0,0,0,5]] - anims[9] = [['lady1', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[10] = [['lady2', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[11] = [['lady3', xy_center[0], xy_center[1]+ 300, 600,0,0,0,25]] - anims[12] = [['lady4', xy_center[0], xy_center[1]+ 300, 600,0,0,0,5]] - anims[13] = [['mila6', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[14] = [['mila5', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[15] = [['idiotia1', xy_center[0], xy_center[1]+ 300, 600,0,0,0,25]] - anims[16] = [['idiotia1', xy_center[0], xy_center[1]+ 300, 600,0,0,0,5]] - anims[17] = [['belka4', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - anims[18] = [['belka3', xy_center[0], xy_center[1] + 280, 600,0,0,0,30]] - - - for laseranims in anims: - - for anim in laseranims: - anim[5] = lengthPOSE(anim[0]) - WebStatus("Checking "+ anim[0] +"...") - if debug > 0: - print('poses/' + anim[0], "length :", anim[5], "frames") - - print("Current IdiotIA anim is",anims[currentIdiotia][0],"("+str(currentIdiotia)+")") - - - # display the currentIdiotia animation on all lasers according to display flag def IdiotIA(): @@ -235,7 +237,7 @@ def IdiotIA(): # if display flag is True, send the face points. if idiotiaDisplay[laser]: - anim = anims[currentIdiotia][0] + anim = anims[currentIdiotia] #print(anim) PL = laser @@ -244,16 +246,19 @@ def IdiotIA(): dots = [] # increase current frame [4] of speed [7] frames - anim[4] += 1 + #print(anim[4],anim[7],anim[4]+anim[7]) + + anim[4] = anim[4]+anim[7] # compare to total frame [5] if anim[4] >= anim[5]: anim[4] = 0 - posename = 'poses/' + anim[0] + '/' + anim[0] +'-'+str("%05d"%anim[4])+'.json' + posename = 'poses/' + anim[0] + '/' + anim[0] +'-'+str("%05d"%int(anim[4]))+'.json' posefile = open(posename , 'r') posedatas = posefile.read() pose_json = json.loads(posedatas) + #WebStatus("Frame : "+str("%05d"%int(anim[4]))) # Draw Face @@ -270,7 +275,6 @@ def IdiotIA(): lj3.rPolyLineOneColor(mouth(pose_json, people), c = white, PL = laser, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3]) lj3.DrawPL(PL) - time.sleep(0.02) # Init Starfields @@ -313,8 +317,8 @@ def Starfield(hori=0,verti=0): if displayedstars < num_stars and starfieldcount % 15 == 0: displayedstars += 1 - if displayedstars == num_stars and starfieldcount % 10 == 0: - starspeed += 0.005 + #if displayedstars == num_stars and starfieldcount % 10 == 0: + # starspeed += 0.005 #print starspeed @@ -433,12 +437,11 @@ def LiveFace(): # /pose/idiotia/lasernumber 1 def OSCidiotia(address, value): - print("idiotia",address,value) - + print("pose idiotia got ",address,value) laser = int(address[14:]) print("laser", laser, value) - if value == 1: + if value == "1" or value == 1: idiotiaDisplay[laser] = True liveDisplay[laser] = False @@ -450,41 +453,48 @@ def OSCidiotia(address, value): idiotiaDisplay[laser] = False print(idiotiaDisplay,liveDisplay,fieldsDisplay) + UpdatePoseUI() -# /pose/anim -def OSCanim(address,state): +# /pose/anim/animnumber 1 +def OSCanim(address, value): + global currentIdiotia - print("/pose/anim",address, state) - anim = int(address[12:]) - print(anim, state) + print("pose anim got :", address, type(value), value) + anim = int(address[11:]) + print("anim", anim) - if state == 1: + if value == "1" or value == 1: currentIdiotia = anim + UpdatePoseUI() + WebStatus("Running "+ anims[currentIdiotia][0]+"...") # /pose/live/lasernumber value -def OSClive(address,value): +def OSClive(address, value): print("live",address,value) laser = int(address[11:]) - print("laser", laser, value) + #print("laser", laser, value) - if value == "1": - idiotiaDisplay[value] = False - liveDisplay[value] = True - fieldsDisplay[value] = False + if value == "1" or value == 1: + idiotiaDisplay[laser] = False + liveDisplay[laser] = True + fieldsDisplay[laser] = False + UpdatePoseUI() # /pose/field/lasernumber value def OSCfield(address, value): - print("Pose bank field got", address, "with value", value) + print("Pose field got", address, "with value", type(value), value) laser = int(address[12:]) - print("laser", laser, value) + #print("laser", laser, value) - if value == "1": - idiotiaDisplay[value] = False - liveDisplay[value] = False - fieldsDisplay[value] = True + if value == "1" or value == 1: + print("field",laser,"true") + idiotiaDisplay[laser] = False + liveDisplay[laser] = False + fieldsDisplay[laser] = True + UpdatePoseUI() # /pose/ljclient @@ -494,6 +504,9 @@ def OSCljclient(value): lj3.LjClient(ljclient) +# /pose/ping value +def OSCping(value): + lj3.OSCping("pose") ''' # Starfield, idiotia @@ -522,26 +535,26 @@ def UpdatePoseUI(): for laser in range(LaserNumber): if idiotiaDisplay[laser]: - lj3.SendLJ("pose/idiotia/" + str(laser) + " 1") + lj3.SendLJ("/pose/idiotia/" + str(laser) + " 1") else: - lj3.SendLJ("pose/idiotia/" + str(laser) + " 0") + lj3.SendLJ("/pose/idiotia/" + str(laser) + " 0") if liveDisplay[laser]: - lj3.SendLJ("pose/live/" + str(laser) + " 1") + lj3.SendLJ("/pose/live/" + str(laser) + " 1") else: - lj3.SendLJ("pose/live/" + str(laser) + " 0") + lj3.SendLJ("/pose/live/" + str(laser) + " 0") if fieldsDisplay[laser]: - lj3.SendLJ("pose/field/" + str(laser) + " 1") + lj3.SendLJ("/pose/field/" + str(laser) + " 1") else: - lj3.SendLJ("pose/field/" + str(laser) + " 0") + lj3.SendLJ("/pose/field/" + str(laser) + " 0") for anim in range(19): if anim == currentIdiotia: - lj3.SendLJ("pose/anim/" + str(anim) + " 1") + lj3.SendLJ("/pose/anim/" + str(anim) + " 1") else: - lj3.SendLJ("pose/anim/" + str(anim) + " 0") + lj3.SendLJ("/pose/anim/" + str(anim) + " 0") @@ -549,12 +562,12 @@ print('Loading Pose bank...') WebStatus("Loading Pose bank...") # OSC Server callbacks -print("Starting OSC server at",myIP,":",OSCinPort,"...") +print("Starting OSC server at", myIP, ":", OSCinPort, "...") osc_startup() osc_udp_server(myIP, OSCinPort, "InPort") #osc_method("/pose/run*", OSCrun) -osc_method("/ping*", lj3.OSCping) +osc_method("/ping*", OSCping) osc_method("/pose/ljclient", OSCljclient) osc_method("/quit", OSCquit) osc_method("/pose/idiotia/*", OSCidiotia, argscheme=OSCARG_ADDRESS + OSCARG_DATAUNPACK) @@ -562,8 +575,9 @@ osc_method("/pose/field/*", OSCfield,argscheme=OSCARG_ADDRESS + OSCARG_DATAUNPAC osc_method("/pose/live/*", OSClive, argscheme=OSCARG_ADDRESS + OSCARG_DATAUNPACK) osc_method("/pose/anim/*", OSCanim, argscheme=OSCARG_ADDRESS + OSCARG_DATAUNPACK) -anims =[[]]*20 -#color = lj3.rgb2int(255,255,255) + +anims =[[]]*19 + prepareIdiotIA(0) prepareSTARFIELD() @@ -579,24 +593,39 @@ green = lj3.rgb2int(0,255,0) print("Updating Pose UI...") UpdatePoseUI() -WebStatus("Pose bank running.") -print("Pose bank running") - - - - +WebStatus("Running "+ anims[currentIdiotia][0]+"...") +#WebStatus("Pose bank running.") +#print("Pose bank running") +print("Running "+ anims[currentIdiotia][0]+" on " + str(LaserNumber) +" lasers.") def Run(): try: while 1: + lj3.OSCframe() + # If you want an idea + # t0 = time.time() Starfield(hori=0,verti=0) IdiotIA() - LiveFace() + #LiveFace() + time.sleep(0.002) + #t1 = time.time() + # looptime = t1 - t0 + # 25 frames/sec -> 1 frame is 0.04 sec long + # if looptime is 0.01 sec + # 0.04/0.01 = 4 loops with the same anim + # so speedanim is 1 / 4 = 0.25 + # speedanim = 1 / (0.04 / looptime) - except KeyboardInterrupt: - pass + + #print("Took %f" % (t1 - t0, )) + + #except KeyboardInterrupt: + # pass + + except Exception: + traceback.print_exc() # Gently stop on CTRL C diff --git a/plugins/VJing/lj3.py b/plugins/VJing/lj3.py index e9159fe..44e016a 100644 --- a/plugins/VJing/lj3.py +++ b/plugins/VJing/lj3.py @@ -82,6 +82,7 @@ def SendLJ(oscaddress,oscargs=''): try: msg = oscbuildparse.OSCMessage(oscaddress, None, [oscargs]) + # print(msg) osc_send(msg, "LJ 8002") OSCframe() diff --git a/plugins/laserglyph.py b/plugins/laserglyph.py index 9d2378f..97efd56 100644 --- a/plugins/laserglyph.py +++ b/plugins/laserglyph.py @@ -133,7 +133,11 @@ def OSCpl(value): lj3.WebStatus("Glyph to pl "+ str(value)) lj3.LjPl(value) +# /pose/ping value +def OSCping(value): + lj3.OSCping("glyph") +''' def Proj(x,y,z,angleX,angleY,angleZ): rad = angleX * math.pi / 180 @@ -176,7 +180,7 @@ def Run(): print("Starting OSC at",myIP," port",OSCinPort,"...") osc_startup() osc_udp_server(myIP, OSCinPort, "InPort") - osc_method("/ping*", lj3.OSCping) + osc_method("/ping*", OSCping) osc_method("/glyph/ljclient", OSCljclient) try: diff --git a/plugins/lj3.py b/plugins/lj3.py index e9159fe..a5b8ef4 100644 --- a/plugins/lj3.py +++ b/plugins/lj3.py @@ -82,6 +82,7 @@ def SendLJ(oscaddress,oscargs=''): try: msg = oscbuildparse.OSCMessage(oscaddress, None, [oscargs]) + # print(msg) osc_send(msg, "LJ 8002") OSCframe() @@ -93,10 +94,8 @@ def WebStatus(message): SendLJ("/status", message) -# Answer to LJ pings +# Answer to LJ pings with /pong pluginame def OSCping(value): - # Will receive message address, and message data flattened in s, x, y - print("Got /ping with value", value) SendLJ("/pong",value) diff --git a/plugins/pysimu.py b/plugins/pysimu.py index e65adc0..08ca8a7 100755 --- a/plugins/pysimu.py +++ b/plugins/pysimu.py @@ -31,7 +31,7 @@ import pdb import types, ast, argparse from OSC import OSCServer, OSCClient, OSCMessage - +screen_size = [750,750] pl = [[],[],[],[]] @@ -206,7 +206,7 @@ def RenderScreen(surface): if c: pygame.draw.line(surface,c,xyc_prev[:2],xyc[:2],3) xyc_prev = xyc -screen_size = [700,700] + pygame.init() screen = pygame.display.set_mode(screen_size) pygame.display.set_caption("LJ Simulator")