1

What I'm trying to do: Add a fourth mode, let's call it SendsMode, to the Session page of my Launchpad—AKA when hitting the "Stop-Solo-Mute" button a fourth time, it would cycle into SendsMode.

In this mode, the bottom row(s) of buttons would turn the sends on/off for each track within the Session Ring.

Where I am now: I have functioning code that adds SendsMode, and works for one row of sends perfectly. It changes with movements of the Session Ring.

What I need help with: I can't get it to work for more than one send at a time (the buttons go blank, but don't do anything when pressed, not reflect changes in the values done in Ableton).

Full code is here: https://github.com/jonniepeller/launchpad-mini-mk3-augmented

The relevant bit is adding the following to _create_stop_solo_mute_modes:

        self._stop_solo_mute_modes.add_mode(
            u"send_controls",
            AddLayerMode(self._mixer, Layer(send_controls=bottom_x_rows)),
            cycle_mode_button_color=u"Mixer.SendControls",
        )
        self._stop_solo_mute_modes.selected_mode = u"send_controls"
        self._stop_solo_mute_modes.set_enabled(True)

1 Answers1

1

_set_send_controls in Novation's mixer component wasn't appropriate for multiple sends—it was built and used for one thing per track, like mute, solo, stop.

I implemented my own MixerComponent and NovationBase with an adapted version of what they have for the Launch Control XL.

This is the key bit that fixed my issue:

    def set_send_controls(self, controls):
        num_sends = len(self._song.return_tracks)
        for channel_idx, channel_strip in enumerate(self._channel_strips):
            send_controls = []
            for send_idx in range(num_sends):
                if controls:
                    try:
                        button = controls.get_button(send_idx, channel_idx)
                    except:
                        logger.info("Tried getting a button out of range")
                    send_controls.append(button)
            channel_strip.set_send_controls(send_controls)