1 import Actions, OSC, Events
3 class Controller(object):
5 def __init__(self, context, oscserver, remote):
6 self._context = context
7 self._server = oscserver
9 self._server.registerHandler(self._remote, self._oscEvent)
11 def hit(self, command, index=0):
12 self._server.command(self._remote,"/sl/%d/hit" % index, str(command))
14 def get(self, parameter, index=0):
15 if parameter.startswith('global_'):
17 parameter = parameter[7:]
19 path = "/sl/%d/get" % index
20 self._server.command(self._remote, path, parameter, self._server.localUrl(), "")
22 def set(self, parameter, value, index=0):
23 if parameter.startswith('global_'):
25 parameter = parameter[7:]
27 path = "/sl/%d/set" % index
28 self._server.command(self._remote, path, parameter, float(value))
30 def _oscEvent(self, path, data):
31 # data = (loop-number, parameter-name, value)
32 if len(data) != 3: return
34 param = "global_%s" % data[1]
36 param = "%s/%d" % (data[1], data[0])
37 return [ Events.ControlEvent(self._context, param, data[2]) ]
39 class ParamGetter(object):
41 def __init__(self, controller, parameter, index=0):
42 self._parameter = parameter
43 self._controller = controller
47 self._controller.get(self._parameter, self._index)
49 class ParamSetter(object):
51 def __init__(self, controller, parameter, index=0):
52 self._parameter = parameter
53 self._controller = controller
56 def __call__(self, value):
57 self._controller.set(self._parameter, value, self._index)
59 def assignController( self, controller, title, parameter, min, max, stops=[], index=0 ):
60 if parameter.startswith('global_'):
63 event = "%s/%d" % (parameter, index)
64 controller.assign(title,
65 self.ParamSetter(self, parameter, index),
66 self.ParamGetter(self, parameter, index),
67 Events.Event(self._context, event),
70 class Command(Actions.Action):
72 def __init__(self, name, controller, command):
73 Actions.Action.__init__(self, name)
74 self._controller = controller
75 self._command = command
77 def __call__(self, binding):
78 self._controller.hit(self._command)
80 class AssignController(Actions.Action):
82 def __init__(self, name, loopController, pedalController, title, parameter, min, max,
84 Actions.Action.__init__(self, name)
85 self._loopController = loopController
86 self._pedalController = pedalController
88 self._parameter = parameter
94 def __call__(self, binding):
95 self._loopController.assignController(self._pedalController,
103 def register( oscserver,
106 return Controller(context, oscserver, remote)