tttapa / Control-Surface

Arduino library for creating MIDI controllers and other MIDI devices.
GNU General Public License v3.0
1.19k stars 134 forks source link

Add CTRL button to the code to select multiple channels in SOLO mode in Ableton. #922

Open NumericSpace opened 1 year ago

NumericSpace commented 1 year ago

Is your feature request related to a problem? Please describe Hello, I think it's well known that in order to activate multiple channels in SOLO in Ableton Live, you need to press the CTRL button on the keyboard and then click on the SOLO button of each channel. This allows you to listen to multiple channels in SOLO, which is very useful when playing live and sending a preview to the 3/4 channel, where the SOLO button turns into CUE mode. So, during the development of a controller, an idea came up to add a CTRL button. Initially, I didn't think it would be a problem, but it turned out that "CTRL - These keys are meant to modify the normal action of another key when the two are pressed in combination." So, I'm stuck, is it really impossible to do? Does anyone have any ideas on this? Thank you.

Describe the solution you'd like It is necessary to have an emulation of the computer CTRL button on the controller in order to activate the SOLO of multiple tracks.

Describe alternatives you've considered I used #include , however, it did not allow me to implement what I had in mind.

LukeThomasDawson commented 1 month ago

Heya @NumericSpace,

Totally doable.

First easy way is a setting in Ableton to allow multiple Solo'ing of tracks.

In Preferences under Record | Warp | Launch there is Exclusive Solo:

Ableton Exclusive Solo

Second and probably more fun way though is to use the Mackie Control Universal constants Pieter has written up as these also contain default values for controllers that use Shift, Ctrl, Option, etc.

The idea is you will actually be sending MIDI data, rather than a physical or even virtual keyboard stroke.

Head here: MCU Note Constants

...and then in your code it will look something like this:

digitalCCSender.sendOn(MCU::CONTROL);
digitalCCSender.sendOn(MCU::SOLO_1);
digitalCCSender.sendOff(MCU::SOLO_1);
digitalCCSender.sendOff(MCU::CONTROL);

Happy MIDI'ing :sunglasses: Luke