8000 Added individual parameters listener and value string · steeltrack/AbletonOSC@a432a5e · GitHub
[go: up one dir, main page]

Skip to content

Commit

Permalink
Added individual parameters listener and value string
Browse files Browse the repository at this point in the history
  • Loading branch information
steeltrack committed Jan 14, 2024
1 parent 3f45fca commit a432a5e
Showing 1 changed file with 43 additions and 2 deletions.
45 changes: 43 additions & 2 deletions abletonosc/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ def __init__(self, manager):
self.class_identifier = "device"

def init_api(self):
def create_device_callback(func, *args):
def create_device_callback(func, *args, include_ids: bool = False):
def device_callback(params: Tuple[Any]):
track_index, device_index = int(params[0]), int(params[1])
device = self.song.tracks[track_index].devices[device_index]
rv = func(device, *args, params[2:])
if (include_ids):
rv = func(device, *args, params[0:])
else:
rv = func(device, *args, params[2:])

if rv is not None:
return (track_index, device_index, *rv)

Expand Down Expand Up @@ -85,6 +89,41 @@ def device_get_parameter_value(device, params: Tuple[Any] = ()):
# https://github.com/ideoforms/AbletonOSC/issues/33
param_index = int(params[0])
return param_index, device.parameters[param_index].value

def device_get_parameter_value_string(device, params: Tuple[Any] = ()):
param_index = int(params[0])
return param_index, device.parameters[param_index].str_for_value(device.parameters[param_index].value)

def device_get_parameter_value_listener(device, params: Tuple[Any] = ()):

def property_changed_callback():
value = device.parameters[params[2]].value
self.logger.info("Property %s changed of %s %s: %s" % ('value', 'device parameter', str(params), value))
self.osc_server.send("/live/device/get/parameter/value", (*params, value,))

value_string = device.parameters[params[2]].str_for_value(device.parameters[params[2]].value)
self.logger.info("Property %s changed of %s %s: %s" % ('value_string', 'device parameter', str(params), value_string))
self.osc_server.send("/live/device/get/parameter/value_string", (*params, value_string,))

listener_key = ('device_parameter_value', tuple(params))
if listener_key in self.listener_functions:
device_get_parameter_remove_value_listener(device, params)

self.logger.info("Adding listener for %s %s, property: %s" % ('device parameter', str(params), 'value'))
device.parameters[params[2]].add_value_listener(property_changed_callback)
self.listener_functions[listener_key] = property_changed_callback

property_changed_callback()

def device_get_parameter_remove_value_listener(device, params: Tuple[Any] = ()):
listener_key = ('device_parameter_value', tuple(params))
if listener_key in self.listener_functions:
self.logger.info("Removing listener for %s %s, property %s" % (self.class_identifier, str(params), 'value'))
listener_function = self.listener_functions[listener_key]
device.parameters[params[2]].remove_value_listener(listener_function)
del self.listener_functions[listener_key]
else:
self.logger.warning("No listener function found for property: %s (%s)" % (prop, str(params)))

def device_set_parameter_value(device, params: Tuple[Any] = ()):
param_index, param_value = params[:2]
Expand All @@ -96,5 +135,7 @@ def device_get_parameter_name(device, params: Tuple[Any] = ()):
return param_index, device.parameters[param_index].name

self.osc_server.add_handler("/live/device/get/parameter/value", create_device_callback(device_get_parameter_value))
self.osc_server.add_handler("/live/device/get/parameter/value_string", create_device_callback(device_get_parameter_value_string))
self.osc_server.add_handler("/live/device/set/parameter/value", create_device_callback(device_set_parameter_value))
self.osc_server.add_handler("/live/device/get/parameter/name", create_device_callback(device_get_parameter_name))
self.osc_server.add_handler("/live/device/start_listen/parameter/value", create_device_callback(device_get_parameter_value_listener, include_ids = True))

0 comments on commit a432a5e

Please sign in to comment.
0