From eaaef5460a95d2de1dddc847f6c3bbcb2aef8047 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 25 Jan 2011 00:33:46 -0500 Subject: Adding an OSC input. --- behaviors/DebugBehavior.py | 2 +- behaviors/MrmrSetColor.py | 21 +++++++++++++++++++++ behaviors/Square.py | 15 ++++++++------- 3 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 behaviors/MrmrSetColor.py (limited to 'behaviors') diff --git a/behaviors/DebugBehavior.py b/behaviors/DebugBehavior.py index 34f4106..17383db 100644 --- a/behaviors/DebugBehavior.py +++ b/behaviors/DebugBehavior.py @@ -4,5 +4,5 @@ import pdb class DebugBehavior(Behavior): def processResponse(self, sensorInputs, recursiveInputs): if sensorInputs != []: - main_log.debug('Sensor Inputs: ' + str(sensorInputs)) + main_log.error('Sensor Inputs: ' + str(sensorInputs)) return ([], []) diff --git a/behaviors/MrmrSetColor.py b/behaviors/MrmrSetColor.py new file mode 100644 index 0000000..97b9fb7 --- /dev/null +++ b/behaviors/MrmrSetColor.py @@ -0,0 +1,21 @@ +from operationscore.Behavior import * +from logger import main_log +#import util.ColorOps as color +import colorsys +import pdb +class MrmrSetColor(Behavior): + def behaviorInit(self): + self.h=0 + self.s=0 + self.v=0 + def processResponse(self, sensorInputs, recursiveInputs): + ret = [] + for data in sensorInputs: + if data['Path'].find('horizontal') != -1: + self.h = data['Value'] / 2.78 + elif data['Path'].find('vertical') != -1: + self.s = data['Value'] / 1000.0 + else: + main_log.error('Sensor Inputs: ' + str(sensorInputs)) + ret.append({'Color':[i*255 for i in colorsys.hsv_to_rgb(self.h,self.s,self.v)]}) + return (ret, []) diff --git a/behaviors/Square.py b/behaviors/Square.py index aef3622..ecd000c 100644 --- a/behaviors/Square.py +++ b/behaviors/Square.py @@ -2,11 +2,12 @@ from operationscore.Behavior import * class Square(Behavior): def processResponse(self, sensorInputs, recursiveInputs): for sensory in sensorInputs:#TODO: consider replicating the dict - xLoc = sensory['Location'][0] - yLoc = sensory['Location'][1] - width = self['Width'] - #sensory['Location'] = 'True' - sensory['Location'] =\ - '{x}<'+str(xLoc+width)+',{x}>'+str(xLoc-width)+\ - ',{y}<'+str(yLoc+width)+',{y}>'+str(yLoc-width) + if 'Location' in sensory: + xLoc = sensory['Location'][0] + yLoc = sensory['Location'][1] + width = self['Width'] + #sensory['Location'] = 'True' + sensory['Location'] =\ + '{x}<'+str(xLoc+width)+',{x}>'+str(xLoc-width)+\ + ',{y}<'+str(yLoc+width)+',{y}>'+str(yLoc-width) return (sensorInputs, recursiveInputs) -- cgit v1.2.3 From ad8ad25072f55413ecfd696eff1e07c1cd08984e Mon Sep 17 00:00:00 2001 From: rcoh Date: Tue, 25 Jan 2011 14:07:05 -0500 Subject: Fancy param modification --- behaviors/ModifyParam.py | 4 ++++ behaviors/XYMove.py | 1 + config/6thFloor.xml | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'behaviors') diff --git a/behaviors/ModifyParam.py b/behaviors/ModifyParam.py index f589e05..6e76d05 100644 --- a/behaviors/ModifyParam.py +++ b/behaviors/ModifyParam.py @@ -1,4 +1,5 @@ from operationscore.Behavior import * +import math import pdb #Class to perform a given operation on some element of an argDict. Designed to be used a recursive hook, but can serve sensor-based functions as well. Specify ParamType (Sensor or Recurse), ParamName, and ParamOp, (a valid python statement with the old value represented as {val}) class ModifyParam(Behavior): @@ -16,6 +17,9 @@ class ModifyParam(Behavior): if paramName in behaviorInput: #TODO: copy -> modify instead of just #copying paramOp = paramOp.replace('{val}', 'behaviorInput[paramName]') #convert the {val} marker to something we can execute + #TODO: move elsewhere + paramOp = paramOp.replace('{y}', "behaviorInput['Location'][1]") + paramOp = paramOp.replace('{x}', "behaviorInput['Location'][0]") behaviorInput[paramName] = eval(paramOp) if paramType == 'Sensor': #return accordingly return (searchSet, recursiveInputs) diff --git a/behaviors/XYMove.py b/behaviors/XYMove.py index 8acbba8..1b99ee1 100644 --- a/behaviors/XYMove.py +++ b/behaviors/XYMove.py @@ -6,6 +6,7 @@ class XYMove(Behavior): for loc in sensor: oploc = dict(loc) self.insertStepIfMissing(oploc) + print oploc['YStep'] oploc['Location'] = Geo.addLocations((oploc['XStep'], oploc['YStep']), oploc['Location']) ret.append(oploc) return (ret, []) diff --git a/config/6thFloor.xml b/config/6thFloor.xml index 3f734d9..9f3904a 100644 --- a/config/6thFloor.xml +++ b/config/6thFloor.xml @@ -121,11 +121,21 @@ movebounce xymove - ybounce + xbounce + ysin + + behaviors.ModifyParam + + ysin + YStep + Sensor + 4*math.sin({x}/float(40)) + + behaviors.BehaviorChain @@ -182,9 +192,9 @@ behaviors.BehaviorChain runcolordecay - + colorchange running -- cgit v1.2.3 From 51d58d511d474cb01339d504624b9418c75869e3 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 25 Jan 2011 15:28:25 -0500 Subject: TouchOSC-specific behavior --- behaviors/TouchOSC.py | 33 +++++++++++++++++++++++++++++++++ config/6thFloorOSC.xml | 11 ++++++----- inputs/OSCInput.py | 2 +- testosc.py | 2 +- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 behaviors/TouchOSC.py (limited to 'behaviors') diff --git a/behaviors/TouchOSC.py b/behaviors/TouchOSC.py new file mode 100644 index 0000000..1c41b5e --- /dev/null +++ b/behaviors/TouchOSC.py @@ -0,0 +1,33 @@ +from operationscore.Behavior import * +from logger import main_log +#import util.ColorOps as color +import colorsys +import pdb +import util.ComponentRegistry as compReg +class TouchOSC(Behavior): + def behaviorInit(self): + self.h=0 + self.s=0 + self.v=0 + self.xy = (-1,-1) + def processResponse(self, sensorInputs, recursiveInputs): + ret = [] + for data in sensorInputs: + if data['Path'] == '/1/fader1': + try: + self.h = data['Value'][0]*360.0 + except: + pdb.set_trace() + elif data['Path'] == '/1/fader2': + self.s = data['Value'][0] + elif data['Path'] == '/1/fader3': + self.v = data['Value'][0] + elif data['Path'] == '/1/xy': + val=data['Value'] + ssize = compReg.getComponent('Screen').getSize()[-2:] #896 x 310 + self.xy = (val[1]*ssize[0], (1.0-val[0])*ssize[1]) + else: + main_log.error('Sensor Inputs: ' + str(sensorInputs)) + ret.append({'Color':[i*255 for i in colorsys.hsv_to_rgb(self.h,self.s,self.v)],'Location':self.xy}) + + return (ret, []) diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml index 0a27fda..792fd0c 100644 --- a/config/6thFloorOSC.xml +++ b/config/6thFloorOSC.xml @@ -41,7 +41,8 @@ inputs.OSCInput osc - 1234 + 12345 + 10 @@ -80,9 +81,9 @@ - mrmrcolor + touchosc - behaviors.MrmrSetColor + behaviors.TouchOSC behaviors/RedShift.xml @@ -266,12 +267,12 @@ mousechaser - followmouse + tcp osc - mrmrcolor + touchosc square singleframe diff --git a/inputs/OSCInput.py b/inputs/OSCInput.py index a998490..f867fb5 100644 --- a/inputs/OSCInput.py +++ b/inputs/OSCInput.py @@ -13,7 +13,7 @@ class OSCInput(Input): # main_log.error(str(err)) def fallback(self,path,args,types, src): - self.respond({'Path':path,'Type':types[0],'Value':args[0]}) + self.respond({'Path':path,'Type':types,'Value':args}) def sensingLoop(self): self.server.recv(100) pass#(data,address) = self.sock.recvfrom(1024) diff --git a/testosc.py b/testosc.py index 6763f41..cea03f4 100755 --- a/testosc.py +++ b/testosc.py @@ -4,7 +4,7 @@ import liblo, sys # create server, listening on port 1234 try: - server = liblo.Server(1234) + server = liblo.Server(12345) except liblo.ServerError, err: print str(err) sys.exit() -- cgit v1.2.3 From f103e47da5d563d1b8448bc021676ed7db0f529d Mon Sep 17 00:00:00 2001 From: rcoh Date: Thu, 27 Jan 2011 17:25:15 -0500 Subject: Doc change. Merge experimental. --- behaviors/ModifyParam.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'behaviors') diff --git a/behaviors/ModifyParam.py b/behaviors/ModifyParam.py index 2c8f12d..0ef3a60 100644 --- a/behaviors/ModifyParam.py +++ b/behaviors/ModifyParam.py @@ -8,7 +8,8 @@ class ModifyParam(Behavior): -- Sensor or Recurse -- The name of the parameter you wish to modify -- The modification you wish to do. Use {val} to specify the current value of the - parameter in question. Special hooks for {x} and {y} exist in some versions""" + parameter in question. Special hooks for {x} and {y} also exist to access the x and y + locations.""" def processResponse(self, sensorInputs, recursiveInputs): paramType = self['ParamType'] -- cgit v1.2.3