Skip to content

Commit

Permalink
Merge pull request stufisher#3 from OSCModulator/master
Browse files Browse the repository at this point in the history
Change Parameters
  • Loading branch information
stufisher committed Jul 20, 2015
2 parents 6a4d915 + a7f3b1b commit d9a797c
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 42 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.pyc
.idea
2 changes: 1 addition & 1 deletion LO2ChannelStripComponent.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ def _lo2__on_solo_changed(self):
self.send_default('/live/'+self._track_types[self._type]+'solo', self._track.solo)

def _lo2__on_arm_changed(self):
if self._type == 0 and self._type is not None:
if self._type == 0 and self._type is not None and self._track.can_be_armed:
self.send_default('/live/'+self._track_types[self._type]+'arm', self._track.arm)

def _lo2__on_track_name_changed(self):
Expand Down
49 changes: 30 additions & 19 deletions LO2DeviceComponent.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ class LO2DeviceComponent(DeviceComponent, LO2Mixin):
def __init__(self):
self._parameters = []
super(LO2DeviceComponent, self).__init__()

self.set_default('_track_id', '_device_id')

for ty in self._track_types:
self.add_callback('/live/'+ty+'device/range', self._device_range)
self.add_callback('/live/'+ty+'device/param', self._device_param)
self.add_callback('/live/'+ty+'device/select', self._view)


def _is_device(self, msg):
if 'return' in msg[0]:
Expand All @@ -28,38 +28,38 @@ def _is_device(self, msg):
ty = 2
else:
ty = 0

d = msg[2] if ty == 2 else msg[3]
check_id = msg[2] == self._track_id if self._type != 2 else True

return check_id and self._type == ty and d == self._device_id


def set_device(self, device):
self.log_message('set device')
super(LO2DeviceComponent, self).set_device(device)

self._track_id, self._type = self.track_id_type(device.canonical_parent)
self._device_id = list(device.canonical_parent.devices).index(device)

self._on_parameters_changed.subject = device
self._on_parameters_changed()


@subject_slot('parameters')
def _on_parameters_changed(self):
self.log_message('params changed')
diff = len(self._device.parameters) - len(self._parameters)

if diff > 0:
for i in range(diff):
self._parameters.append(LO2ParameterComponent())

if diff < 0:
for i in range(len(self._parameters)-1, len(self._device.parameters)-1, -1):
self._parameters[i].disconnect()
self._parameters.remove(self._parameters[i])

for i,pc in enumerate(self._parameters):
pc.set_parameter(self._device.parameters[i])

Expand All @@ -74,12 +74,13 @@ def _device_range(self, msg, src):
else:
d = msg[3] if len(msg) >= 4 else None
p = msg[4] if len(msg) >= 5 else None


if d is not None:
if p is not None:
if p < len(self._device.parameters):
prm = self._device.parameters[p]
# type 2 = master track
if self._type == 2:
self.send('/live/'+self._track_types[self._type]+'device/range', self._device_id, p, prm.min, prm.max)
else:
Expand All @@ -89,7 +90,8 @@ def _device_range(self, msg, src):
prms = []
for i,p in enumerate(self._device.parameters):
prms.extend([i,p.min,p.max])


# type 2 = master track
if self._type == 2:
self.send('/live/'+self._track_types[self._type]+'device/range', self._device_id, *prms)
else:
Expand All @@ -101,23 +103,33 @@ def _device_param(self, msg, src):
if self._is_device(msg) and self._device is not None:
if self._type == 2:
p = msg[3] if len(msg) >= 4 else None
v = msg[4] if len(msg) >= 5 else None
else:
p = msg[4] if len(msg) >= 5 else None

v = msg[5] if len(msg) >= 6 else None

if p is not None:
if p < len(self._device.parameters):
prm = self._device.parameters[p]

# If a parameter value was passed, set it.
if v is not None:
prm.value = v

# Send the current value of the parameter.
# type 2 = master track
if self._type == 2:
self.send('/live/'+self._track_types[self._type]+'device/param', p, prm.value, prm.name)
else:
self.send_default('/live/'+self._track_types[self._type]+'device/param', p, prm.value, prm.name)


# If a parameter id wasn't sent, send all the information about available parameters for this device.
else:
prms = []
for i,p in enumerate(self._device.parameters):
prms.extend([i,p.value,p.name])


# type 2 = master track
if self._type == 2:
self.send('/live/'+self._track_types[self._type]+'device/param', *prms)
else:
Expand Down Expand Up @@ -149,4 +161,3 @@ def _envelope(self, msg, src):
prm = self._device.parameters[p]



41 changes: 22 additions & 19 deletions LO2MixerComponent.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@ class LO2MixerComponent(MixerComponent, LO2Mixin):
def __init__(self, *a, **kw):
self._track_count = 0
super(LO2MixerComponent, self).__init__(12, 12, *a, **kw)

self.add_callback('/live/track/name/block', self._track_name_block)

self.add_function_callback('/live/tracks', self._lo2_on_track_list_changed)
self._selected_strip.set_track(None)
self._selected_strip.set_is_enabled(False)

self._register_timer_callback(self._update_mixer_vols)


def _update_mixer_vols(self):
pass



def _create_strip(self):
return LO2ChannelStripComponent()


def _reassign_tracks(self):
self.log_message('reassigning tracks')
diff = len(self.tracks_to_use()) - len(self._channel_strips)
Expand All @@ -40,7 +40,7 @@ def _reassign_tracks(self):
for i in range(len(self._channel_strips)-1, len(self.tracks_to_use())-1, -1):
self._channel_strips[i].disconnect()
self._channel_strips.remove(self._channel_strips[i])

for i,cs in enumerate(self._channel_strips):
cs.set_track(self.tracks_to_use()[i])

Expand All @@ -50,37 +50,40 @@ def _reassign_tracks(self):
r.set_track(self.song().return_tracks[i])
else:
r.set_track(None)


def _lo2__on_return_tracks_changed(self):
self._reassign_tracks()



# Callbacks
def _lo2_on_track_list_changed(self):
if len(self.song().tracks) != self._track_count:
self.log_message('/live/tracks:' + str(len(self.song().tracks)))
self.send('/live/tracks', len(self.song().tracks))
self._track_count = len(self.song().tracks)



def _lo2_on_selected_track_changed(self):
id, type = self.track_id_type(self.song().view.selected_track)

self.send('/live/track/select', type, id)



# Track Callbacks
def _track_name_block(self, msg, src):
""" Gets block of scene names
"""
"""
Gets block of scene names
"""
b = []
for i in range(msg[2], msg[2]+msg[3]):
if i < len(self._channel_strips):
t = self.channel_strip(i)
b.append(i, t.track_name)
else:
b.append(i, '')

self.send('/live/track/name/block', b)

2 changes: 0 additions & 2 deletions LO2Mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
# beginning _lo2_<FrameworkListener>
def _decorate(fn, child, name):
def wrap(*a, **kw):
LO2Mixin.log_message('calling LO2 wrapper: '+name)

ret = fn(*a, **kw)
child(*a, **kw)

Expand Down
7 changes: 6 additions & 1 deletion LO2ParameterComponent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ def __init__(self, send = False):
def set_parameter(self, param):
self._parameter = param
self._on_value_changed.subject = param


def set_parameter_value(self, value):
self._parameter.value = value


@subject_slot('value')
Expand All @@ -32,4 +36,5 @@ def _on_value_changed(self):

p = list(self._parameter.canonical_parent.parameters).index(self._parameter)

self.send('/live/'+self._track_types[ty]+'device/param', tid, d, p, self._parameter.value, str(self._parameter.name))
self.send('/live/'+self._track_types[ty]+'device/param', tid, d, p, self._parameter.value, str(self._parameter.name))

0 comments on commit d9a797c

Please sign in to comment.