Live 6 isn’t even out yet, but here’s a “secret” feature Ableton developers were able to sneak into a recent beta. Sources at Ableton say this won’t ever be documented, but they do plan to put it on the forums. I’m most interested to see what Live hackers and hard-core users do with this. The idea is this: you can script your own automatic mappings for control surfaces. (DIY hardware builders, take note — but that’s only the beginning.)

Scripting your own controller mappings? Now that’s exciting — and something Propellerhead didn’t do with their own Automap feature in Reason. Here’s my bet: even if you don’t modify the scripts yourself, you may soon be downloading hacks from fellow Live users. And my personal hope is that Ableton will follow-up on this in a future version. (Hear that, Abletonheads?)

Here’s the message that broke the news. Sorry for the lousy formatting; later this fall I’ll try to post some examples and tutorials — I won’t just keep copying and pasting from emails.

Hi everyone,

we are sooo disappointed in you guys
A few weeks ago, Alex mentioned that we were working on an unofficial feature that would let you customise the automatic mappings (or Instant Mappings, as we call them). This feature was actually introduced in Beta 13… and nobody found it!

If you look into the preferences directory of Beta 13 and 14 you should find a sub directory called ‘User Defined Scripts’. In this directory you will find a text file describing how to customise the instant mappings, as well as a template config file (which will tell you about the available functions).

Please remember 2 things, though:
First, this is an unofficial feature, so there will be no real support for this. Second, this feature is based on the same functionality as the new instant mappings introduced with the different beta version. Thus, you will only be able to use the same functions and banks of device parameters.

I also wanted to use this opporunity to explain some of the decisions we have made for the new instant mappings:

1. Banks of Device Parameters
The parameter banks used in the new instant mappings were created based on the fact that almost all of the controllers have no display to show the mapped parameters. We are well aware of the fact that some parameters are not contained in the banks.

Unfortunately, we had to leave out those parameters for the sake of consistency and clarity. Please keep in mind that the importance of a parameter is mostly based on your personal workflow (for example see djastroboy’s last posting in For more clarity, Live 6 will provide an overview of the banks.

2. Dumps and unmapped Controls
The new instant mappings are based on common functions. Thus, we expect controls to adhere certains characteristics (different buttons, for example, should not send on the same CC only differing in the
value sent).

To simplify setting up a control surface, we tried to use the first factory preset of a controller. If you find controls unmapped that are reported to work on other controllers (like transport buttons), these controls do not adhere to the characteristics mentioned above.

In some of the cases, we provide a memory dump for the first preset (you will see the dump button be enabled in those cases). However, some controllers only allow to dump an entire bank. We don’t want to provide a bank dump to not overwrite all of your settings. Now, you can set up your own preset and customise the instant mappings.


InstantMappings HowTo

With the file ‘UserConfiguration.txt’provided in
this directory, you can create your own Instant

Note: Since this mechanism relies on the scripts
� added for Live 6, you can solely map the given
� functions to your Control Surface. You can neither
� add functions nor can you change the banks of
� device parameters.

1. Create a directory in ‘User Defined Scripts’.
� The name of the directory will show up in the
� list of Control Surfaces in Live.
� Naming: The name of the directory should not
� � start with ‘_’ or ‘.’.

2. Copy the the file ‘UserConfiguration.txt’ into
� your directory. The name of the file needs to
� remain unchanged.

3. Edit the copy to adapt it to your needs. The
� comments in the file will tell you what to do.

# Config File for User-defined Instant Mappings

# We assume that the controls on your MIDI controller
# send CCs. All controls, except the sliders for volume
# and the encoders for device parameters, are expected
# to use the global channel. CCs are counted from 0-127
# and channels from 0-15.

# The channel that the controller should send on
GlobalChannel: 0
# If your controller is connected via USB, replace ControllerName
# with the name of the respective port. Live will then try to
# recognize the ports for you when you select your Instant-Mappings
InputName: ControllerName
OutputName: ControllerName

# The Encoders will control the device parameters (you can also
# use knobs or sliders). Replace the -1’s with the CCs sent by
# the respective controls on your controller. You can also set
# the channel for each controller if it differs from the global
# channel (if you leave the channel of an encoder at -1, Live
# will assume that the encoder uses the global channel).
Encoder1: -1
Encoder2: -1
Encoder3: -1
Encoder4: -1
Encoder5: -1
Encoder6: -1
Encoder7: -1
Encoder8: -1
EncoderChannel1: -1
EncoderChannel2: -1
EncoderChannel3: -1
EncoderChannel4: -1
EncoderChannel5: -1
EncoderChannel6: -1
EncoderChannel7: -1
EncoderChannel8: -1
# Enter the respective map mode for the encoders here. The following
# map modes are available:
# – Absolute
# – Absolute14Bit
# – LinearSignedBit
# – LinearSignedBit2
# – LinearTwoCompliment
# – LinearBinaryOffset
# – AccelSignedBit
# – AccelSignedBit2
# – AccelTwoCompliment
# – AccelBinaryOffset
# Consult the controller’s documentation to find out which mode to use.
EncoderMapMode: Absolute
# Buttons used here are expected to not be toggles (i.e., sending
# value 0 every second time you press it).
Bank1Button: -1
Bank2Button: -1
Bank3Button: -1
Bank4Button: -1
Bank5Button: -1
Bank6Button: -1
Bank7Button: -1
Bank8Button: -1
NextBankButton: -1
PrevBankButton: -1
LockButton: -1

# Again enter the appropriate CCs for the respective controls.
# If all sliders use the global channel to send their data,
# you can leave the channels at -1. You can, of course, use
# encoders or knobs instead of sliders.
VolumeSlider1: -1
VolumeSlider2: -1
VolumeSlider3: -1
VolumeSlider4: -1
VolumeSlider5: -1
VolumeSlider6: -1
VolumeSlider7: -1
VolumeSlider8: -1
Slider1Channel: -1
Slider2Channel: -1
Slider3Channel: -1
Slider4Channel: -1
Slider5Channel: -1
Slider6Channel: -1
Slider7Channel: -1
Slider8Channel: -1
MasterVolumeSlider: -1
MasterSliderChannel: -1
Send1Knob1: -1
Send1Knob2: -1
Send1Knob3: -1
Send1Knob4: -1
Send1Knob5: -1
Send1Knob6: -1
Send1Knob7: -1
Send1Knob8: -1
Send2Knob1: -1
Send2Knob2: -1
Send2Knob3: -1
Send2Knob4: -1
Send2Knob5: -1
Send2Knob6: -1
Send2Knob7: -1
Send2Knob8: -1
TrackArmButton1: -1
TrackArmButton2: -1
TrackArmButton3: -1
TrackArmButton4: -1
TrackArmButton5: -1
TrackArmButton6: -1
TrackArmButton7: -1
TrackArmButton8: -1
VolumeMapMode: Absolute
SendsMapMode: Absolute

# The transport buttons are also expected not to be toggles.
StopButton: -1
PlayButton: -1
RecButton: -1
LoopButton: -1
RwdButton: -1
FfwdButton: -1