def __init__(self, *a, **k): super(UtilityDeviceDecorator, self).__init__(*a, **k) self.__on_parameters_changed.subject = self._live_object self.mono_option = DeviceOnOffOption( name='Mono', property_host=get_parameter_by_name(self, 'Mono')) self.bass_mono_option = DeviceOnOffOption( name='Bass Mono', property_host=get_parameter_by_name(self, 'Bass Mono')) self.dc_filter_option = DeviceOnOffOption( name='DC Filter', property_host=get_parameter_by_name(self, 'DC Filter')) self.register_disconnectables(self.options)
def __init__(self, *a, **k): super(SamplerDeviceDecorator, self).__init__(*a, **k) self.__on_parameters_changed.subject = self._live_object self.filter_slope_option = DeviceSwitchOption( name='Filter Slope', parameter=get_parameter_by_name(self, 'Filter Slope')) self.register_disconnectables(self.options)
def _adjustment_view_data(self): is_linked = bool(get_parameter_by_name(self.device(), 'Link').value) adjusting_tunnel_left = adjusting_tunnel_right = False adjusting_filter_hp = adjusting_filter_lp = False adjusting_lfo = adjusting_lfo_phase = False touched_parameters = [ self.parameters[button.index] for button in self.parameter_touch_buttons if button.is_pressed ] for parameter in touched_parameters: if parameter.name == 'Feedback': adjusting_tunnel_left = adjusting_tunnel_right = True elif parameter.name.startswith('L '): adjusting_tunnel_left = True if parameter.name != 'L Offset' and is_linked: adjusting_tunnel_right = True elif parameter.name == 'R Offset' or parameter.name.startswith('R ') and not is_linked: adjusting_tunnel_right = True elif parameter.name in (u'HP Freq', u'HP Res'): adjusting_filter_hp = True elif parameter.name in (u'LP Freq', u'LP Res'): adjusting_filter_lp = True elif parameter.name == 'Mod Phase': adjusting_lfo_phase = True elif parameter.name.startswith('Mod '): adjusting_lfo = True return {'AdjustingTunnelLeft': adjusting_tunnel_left, 'AdjustingTunnelRight': adjusting_tunnel_right, 'AdjustingFilterHighPass': adjusting_filter_hp, 'AdjustingFilterLowPass': adjusting_filter_lp, 'AdjustingLfo': adjusting_lfo, 'AdjustingLfoPhase': adjusting_lfo_phase }
def _resolve_ambiguous_modulation_target_name(self, target_parameter_name): if re.match('^Osc (1|2) Transp$', target_parameter_name): return target_parameter_name.replace('Transp', 'Pitch') lfo_rate_re = re.match('^LFO (1|2) S\\. Rate$', target_parameter_name) if lfo_rate_re: lfo_number = lfo_rate_re.group(1) lfo_sync_param = get_parameter_by_name(self, ('LFO {} Sync').format(lfo_number)) if lfo_sync_param.value == 0: return ('LFO {} Rate').format(lfo_number) return target_parameter_name
def __init__(self, *a, **k): super(OperatorDeviceDecorator, self).__init__(*a, **k) self._osc_types_provider = NotifyingList(available_values=[ 'A', 'B', 'C', 'D'], default_value=OscillatorType.a) self._env_feature_provider = NotifyingList(available_values=[ 'Time', 'Level'], default_value=EnvelopeFeature.time) self._sloped_env_feature_provider = NotifyingList(available_values=[ 'Time', 'Slope', 'Level'], default_value=SlopedEnvelopeFeature.time) self.__on_parameters_changed.subject = self._live_object self.oscillator = EnumWrappingParameter(name='Oscillator', parent=self, values_host=self._osc_types_provider, index_property_host=self._osc_types_provider, values_property='available_values', index_property='index', value_type=OscillatorType) self.env_feature = EnumWrappingParameter(name='Envelope Feature Time/Level', parent=self, values_host=self._env_feature_provider, index_property_host=self._env_feature_provider, values_property='available_values', index_property='index', value_type=EnvelopeFeature) self.sloped_env_feature = EnumWrappingParameter(name='Envelope Feature Time/Slope/Level', parent=self, values_host=self._sloped_env_feature_provider, index_property_host=self._sloped_env_feature_provider, values_property='available_values', index_property='index', value_type=SlopedEnvelopeFeature) self.__on_oscillator_switch_value_changed.subject = self.oscillator self.filter_slope_option = DeviceSwitchOption(name='Filter Slope', parameter=get_parameter_by_name(self, 'Filter Slope')) self.register_disconnectables(self.options)
def __init__(self, *a, **k): super(CompressorDeviceDecorator, self).__init__(*a, **k) for event, func in (('input_routing_type', self.notify_input_routing_type_index), ('input_routing_channel', self.notify_input_routing_channel_index)): self.register_slot(event_name=event, subject=self._live_object, listener=func) make_option = lambda option_name, parameter_name: DeviceOnOffOption( name=option_name, property_host=get_parameter_by_name(self, parameter_name)) self._options = tuple([ self.register_disconnectable(make_option(option_name, param_name)) for option_name, param_name in ((u'Auto Release', u'Auto Release On/Off'), (u'Makeup', u'Makeup'), (u'Listen', u'S/C Listen'), (u'Sidechain', u'S/C On')) ]) make_parameter = lambda name, values, index: EnumWrappingParameter( name=name, parent=self, values_host=self, index_property_host=self, values_property=values, index_property=index) self._position_parameter = make_parameter( 'Position', 'input_channel_positions', 'input_channel_position_index') self._additional_parameters = self.register_disconnectables( (make_parameter('Input Type', 'available_input_routing_types', 'input_routing_type_index'), make_parameter('Input Channel', 'available_input_routing_channels', 'input_routing_channel_index'), self._position_parameter))
def __on_parameters_changed(self): self.mono_option.set_property_host(get_parameter_by_name(self, 'Mono')) self.bass_mono_option.set_property_host( get_parameter_by_name(self, 'Bass Mono'))
def __init__(self, *a, **k): super(DrumBussDeviceDecorator, self).__init__(*a, **k) self.compressor_option = DeviceOnOffOption( name='Compressor', property_host=get_parameter_by_name(self, 'Compressor On')) self.register_disconnectables(self.options)
def __init__(self, *a, **k): super(PedalDeviceDecorator, self).__init__(*a, **k) self.mid_freq_option = DeviceSwitchOption( name='Mid Freq', parameter=get_parameter_by_name(self, 'Mid Freq')) self.register_disconnectables(self.options)
def __on_parameters_changed(self): self.filter_slope_option.set_parameter( get_parameter_by_name(self, 'Filter Slope'))
def _create_options(self): def is_selected_parameter_modulatable(): if self.single_selected_parameter is None: return False if isinstance(self.single_selected_parameter, PitchParameter): return True if isinstance(self.single_selected_parameter, InternalParameterBase): return False return self._live_object.is_parameter_modulatable(self.single_selected_parameter) def add_selected_parameter_to_mod_matrix(): if is_selected_parameter_modulatable(): param = self.single_selected_parameter.decimal_value_host if isinstance(self.single_selected_parameter, PitchParameter) else self.single_selected_parameter self.current_mod_target_index.index = self._live_object.add_parameter_to_modulation_matrix(param) self.notify_request_bank_view('Matrix') def jump_to_bank(bank_name): self.notify_request_bank_view(bank_name) def choose_envelope(value): self.envelope_switch.value = value def choose_lfo(value): self.lfo_switch.value = value self.osc_on_option = DeviceOnOffOption(name='Osc', property_host=self._get_osc_on_property_host()) self.filter_on_option = DeviceOnOffOption(name='Filter', property_host=self._get_filter_on_property_host()) self.lfo_retrigger_option = DeviceOnOffOption(name='Retrigger', property_host=self._get_lfo_retrigger_property_host()) self.add_to_mod_matrix_option = DeviceTriggerOption(name='Add to Matrix', callback=add_selected_parameter_to_mod_matrix, is_active=is_selected_parameter_modulatable) return ( DeviceOnOffOption(name='Sub', property_host=get_parameter_by_name(self, 'Sub On')), DeviceSwitchOption(name='Filter 1 Slope', parameter=get_parameter_by_name(self, 'Filter 1 Slope'), labels=[ '12dB', '24dB']), DeviceSwitchOption(name='Filter 2 Slope', parameter=get_parameter_by_name(self, 'Filter 2 Slope'), labels=[ '12dB', '24dB']), DeviceSwitchOption(name='Filter Switch', parameter=self.filter_switch_for_filter_switch_option, labels=[ 'Filter 1', 'Filter 2']), DeviceSwitchOption(name='LFO 1 Sync', parameter=get_parameter_by_name(self, 'LFO 1 Sync'), labels=[ 'Hz', 'Sync']), DeviceSwitchOption(name='LFO 2 Sync', parameter=get_parameter_by_name(self, 'LFO 2 Sync'), labels=[ 'Hz', 'Sync']), DeviceTriggerOption(name='Go to Amp Env', callback=lambda : ( choose_envelope(WavetableEnvelopeType.amp), jump_to_bank('Envelopes'))), DeviceTriggerOption(name='Go to Env 2', callback=lambda : ( choose_envelope(WavetableEnvelopeType.env2), jump_to_bank('Envelopes'))), DeviceTriggerOption(name='Go to Env 3', callback=lambda : ( choose_envelope(WavetableEnvelopeType.env3), jump_to_bank('Envelopes'))), DeviceTriggerOption(name='Go to LFO 1', callback=lambda : ( choose_lfo(WavetableLfoType.one), jump_to_bank('LFOs'))), DeviceTriggerOption(name='Go to LFO 2', callback=lambda : ( choose_lfo(WavetableLfoType.two), jump_to_bank('LFOs'))), DeviceTriggerOption(name='Back', callback=self.notify_request_previous_bank_from_mod_matrix)) + ( self.osc_on_option, self.filter_on_option, self.lfo_retrigger_option, self.add_to_mod_matrix_option)
def _get_lfo_retrigger_property_host(self): return get_parameter_by_name(self, ('LFO {} Retrigger').format(self._lfo_types_provider.index + 1))
def _get_filter_on_property_host(self): return get_parameter_by_name(self, ('Filter {} On').format(self.filter_switch_for_filter_switch_option.value + 1))
def _get_osc_on_property_host(self): return get_parameter_by_name(self, ('Osc {} On').format(2 if self.oscillator_switch.value else 1))
def __init__(self, *a, **k): super(EchoDeviceDecorator, self).__init__(*a, **k) self._channel_names_provider = NotifyingList(available_values=[ 'Left', 'Right'], default_value=EchoDeviceDecorator.EchoChannelName.left) self.channel_switch_parameter = EnumWrappingParameter(name='Channel Toggle', parent=self, values_host=self._channel_names_provider, index_property_host=self._channel_names_provider, values_property='available_values', index_property='index', value_type=EchoDeviceDecorator.EchoChannelName) self._additional_parameters = ( self.channel_switch_parameter,) self.link_option = DeviceOnOffOption(name='Link', property_host=get_parameter_by_name(self, 'Link')) self.sync_l_option = DeviceOnOffOption(name='L Sync', property_host=get_parameter_by_name(self, 'L Sync')) self.sync_r_option = DeviceOnOffOption(name='R Sync', property_host=get_parameter_by_name(self, 'R Sync')) self.sync_m_option = DeviceOnOffOption(name='M Sync', property_host=get_parameter_by_name(self, 'L Sync')) self.sync_s_option = DeviceOnOffOption(name='S Sync', property_host=get_parameter_by_name(self, 'R Sync')) self.clip_dry_option = DeviceOnOffOption(name='Clip Dry', property_host=get_parameter_by_name(self, 'Clip Dry')) self.filter_on_option = DeviceOnOffOption(name='Filter', property_host=get_parameter_by_name(self, 'Filter On')) self.feedback_inv_option = DeviceOnOffOption(name='Invert', property_host=get_parameter_by_name(self, 'Feedback Inv')) self.modulation_times_four_option = DeviceOnOffOption(name='Mod 4x', property_host=get_parameter_by_name(self, 'Mod 4x')) self.reverb_loc_option = DeviceSwitchOption(name='Reverb Loc', parameter=get_parameter_by_name(self, 'Reverb Loc')) self.duck_option = DeviceOnOffOption(name='Duck', property_host=get_parameter_by_name(self, 'Duck On')) self.gate_option = DeviceOnOffOption(name='Gate', property_host=get_parameter_by_name(self, 'Gate On')) self.wobble_option = DeviceOnOffOption(name='Wobble', property_host=get_parameter_by_name(self, 'Wobble On')) self.noise_option = DeviceOnOffOption(name='Noise', property_host=get_parameter_by_name(self, 'Noise On')) self.channel_switch_lr_option = DeviceSwitchOption(name='L/R Switch', parameter=self.channel_switch_parameter, labels=[ 'Left', 'Right']) self.channel_switch_ms_option = DeviceSwitchOption(name='M/S Switch', parameter=self.channel_switch_parameter, labels=[ 'Mid', 'Side']) self.register_disconnectables(self._additional_parameters) self.register_disconnectables(self.options)
def setup_options(self): def get_simpler_flag(name): return liveobj_valid(self._live_object) and getattr( self._live_object, name) def call_simpler_function(name, *a): if liveobj_valid(self._live_object): return getattr(self._live_object, name)(*a) def sample_available(): return liveobj_valid(self._live_object) and liveobj_valid( self._live_object.sample) def call_sample_function(name, *a): if sample_available(): return getattr(self._live_object.sample, name)(*a) def reset_slices(): call_sample_function('reset_slices') self.show_notification(RESET_SLICING_NOTIFICATION) def split_slice_available(): if sample_available(): slices = self._live_object.sample.slices return len(slices) != MAX_NUMBER_SLICES or slices[ -1] != self._live_object.view.selected_slice return False self.crop_option = DeviceTriggerOption(name='Crop', callback=partial( call_simpler_function, 'crop')) self.reverse_option = DeviceTriggerOption(name='Reverse', callback=partial( call_simpler_function, 'reverse')) self.one_shot_sustain_mode_option = DeviceSwitchOption( name='Trigger Mode', parameter=get_parameter_by_name(self, 'Trigger Mode')) self.retrigger_option = DeviceOnOffOption( name='Retrigger', property_host=self._live_object, value_property_name='retrigger') self.warp_as_x_bars_option = DeviceTriggerOption( name='Warp as X Bars', default_label=self.get_warp_as_option_label(), callback=lambda: call_simpler_function( 'warp_as', call_simpler_function('guess_playback_length')), is_active=lambda: get_simpler_flag('can_warp_as')) self.warp_half_option = DeviceTriggerOption( name=':2', callback=partial(call_simpler_function, 'warp_half'), is_active=lambda: get_simpler_flag('can_warp_half')) self.warp_double_option = DeviceTriggerOption( name='x2', callback=partial(call_simpler_function, 'warp_double'), is_active=lambda: get_simpler_flag('can_warp_double')) self.lfo_sync_option = DeviceSwitchOption( name='LFO Sync Type', parameter=get_parameter_by_name(self, 'L Sync')) self.loop_option = DeviceOnOffOption( name='Loop', property_host=get_parameter_by_name(self, 'S Loop On')) self.filter_slope_option = DeviceSwitchOption( name='Filter Slope', parameter=get_parameter_by_name(self, 'Filter Slope')) self.clear_slices_action = DeviceTriggerOption( name='Clear Slices', default_label='Clear Slices', callback=lambda: call_sample_function('clear_slices'), is_active=lambda: sample_available() and len(self._live_object. sample.slices) > 1) self.reset_slices_action = DeviceTriggerOption( name='Reset Slices', default_label='Reset Slices', callback=reset_slices, is_active=lambda: sample_available()) self.split_slice_action = DeviceTriggerOption( name='Split Slice', default_label='Split Slice', callback=lambda: insert_new_slice(self._live_object), is_active=split_slice_available)
def __on_parameters_changed(self): edit_mode_parameter = get_parameter_by_name(self, 'Edit Mode') self.left_right_curve_switch_option.set_parameter(edit_mode_parameter) self.mid_side_curve_switch_option.set_parameter(edit_mode_parameter)