Akai LPD8 controller for Ableton Live 8

UPDATE: The following is a quote from the release notes for Ableton Live 8.2.2:

8.2.2 Release Notes. Improvements and feature changes: Added control surface support for Akai Professional LPD8.

So finally the contents of this article is not relevant anymore 🙂

The original article follows

This is how to set up Ableton Live to use the Akai LPD8 controller.

The Akai LPD8 is an ultra-portable pad controller. It has 8 sensitive trigger pads and 8 assignable knobs. It is plug’n’play for Windows and Mac, so in theory you can just connect it and start using it with your favourite music production software.

AKAI LPD8 MIDI pad controller


When you first connect the LPD8, it will show up in Live as a MIDI note input device enabled for triggering note events. So just load up a drum kit on a MIDI track, arm it, and start hitting those triggers.

There is no native support for the LPD8 knobs in Ableton Live, though. So a lot of the more powerful features of remote controllers, such as instant mapping and device locking, are not enabled by default.

To start using the LPD8 in “Manual Control Surface Setup” mode, you must go to the Preferences, MIDI Ports section, and enable the “Remote” button. Twiddling the knobs will now send MIDI data to Live, but nothing really happens just yet. The last step is to go to MIDI Learn mode, select the parameter you want to change, and move the corresponding knob to link the knob to the software control.

Now, the problem with the Manual Control and MIDI Learn mapping is that the link between the knob and the control is not context sensitive. This is the most interesting feature of natively supported controllers, because then you can use the same knobs to control all different instruments and sound parameters depending on what is currently selected.

So to get to this exalted level of controller support, we need to implement native support for the LPD8.

The official Ableton Live manual has nothing about how to do this, and searching around on the internet may lead you down a severely complicated path with multiple python scripts and internal APIs etc. But I found an easier way in an article called Ableton Live MIDI Remote Scripting How To: Custom Korg nanoSERIES Control. This tutorial was for setting up a similar (but inferiour…) controller, so I tweaked the scripts a little for the LPD8.

The key is to find the User Remote Scripts folder in your Preferences for Ableton Live. Here you will find actual instructions and a template for writing your own script. This script must be placed in a subfolder named after your controller.

So I created the folder Library/Preferences/Ableton/Live 8.1.5/User Remote Scripts/AKAI LPD8/. In this folder I put the following file, called UserConfiguration.txt

# Config File for User-defined Instant Mappings

# We assume that the controls on your MIDI controller
# send CCs (except for pads). All controls that do not have
# an explicit channel setting are expected to use the
# global channel. CCs & Notes 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: LPD8
OutputName: LPD8
# If your controller has pads that send notes, you can use them to
# play the visible pads in your DrumRacks. Just replace the -1 for
# the note (and channel) of the respective pad. The arrangement of
# the pads in the DrumRacks is as follows:
#   1     2     3     4
#   5     6     7     8
#   9    10    11    12  
#  13    14    15    16
# (If you leave the channel of a pad at -1, Live will assume that
#  the pad uses the global channel)
Pad1Note: -1
Pad2Note: -1
Pad3Note: -1
Pad4Note: -1
Pad5Note: -1
Pad6Note: -1
Pad7Note: -1
Pad8Note: -1
Pad9Note: 40
Pad10Note: 41
Pad11Note: 42
Pad12Note: 43
Pad13Note: 36
Pad14Note: 37
Pad15Note: 38
Pad16Note: 39
Pad1Channel: -1
Pad2Channel: -1
Pad3Channel: -1
Pad4Channel: -1
Pad5Channel: -1
Pad6Channel: -1
Pad7Channel: -1
Pad8Channel: -1
Pad9Channel: -1
Pad10Channel: -1
Pad11Channel: -1
Pad12Channel: -1
Pad13Channel: -1
Pad14Channel: -1
Pad15Channel: -1
Pad16Channel: -1

# 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: 2
Encoder3: 3
Encoder4: 4
Encoder5: 5
Encoder6: 6
Encoder7: 7
Encoder8: 8
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: 9
Bank2Button: 10
Bank3Button: 11
Bank4Button: 12
Bank5Button: 13
Bank6Button: 14
Bank7Button: 15
Bank8Button: 16
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

With this file in place, the next time you start Ableton Live, you will find AKAI LPD8 as a possible selection in the Preferences MIDI Control Surface drop-down box. Select this, and go back to your musical masterpiece.
If you now try to click on an instrument rack control, you will get the blue hand icon, and your LPD8 will control the parameters. A typical instrument rack has 8 virtual knob controls, neatly mapping into the 8 physical knobs on the LPD8.

For more complex controls, such as the Operator synth, the knobs will control individual detailed parameters. When there are more than 8 parameters, they will be assigned different “banks”. To switch banks using the LPD8, push the “CC” button, and use the trigger pads to select bank 1 (pad 1) through bank 8 (pad 8). The status bar at the bottom of Live’s interface will show you the name of the bank, such as “Operator Bank : Oscillator B” for pad 2, or “Operator Bank : LFO” for pad 5, etc.

Now, you can finally enjoy detailed control of all Live parameters using the Akai LPD8 controller.

PS: Akai also makes the fabulous Akai LPK25 ultra-portable MIDI keyboard, in the same style as the LPD8. They go very well together, and I recommend getting both to have a complete on-the-road MIDI setup for your laptop.