Midi Binding Map for AKAI APC Key 25 Mk2

I recently purchased the AKAI APC Key 25 mk2 (APC Key 25 mk2 Ableton Live Controller with Keyboard | Akai Pro) because I wanted a travel MIDI controller, and also because I recently got into the cue launching feature in Ardour.

I mistakenly thought it had support in Ardour because I didn’t read the list at The Ardour Manual - Generic MIDI Binding Maps carefully enough :slight_smile:

No big deal, a good opportunity to attempt my first MIDI bindings map. It was all straight forward except it took a good few hours to figure out the knobs are CC type enc-2 instead of ctl (they spin freely and send either 1 or 127 for quieter or louder).

I would have liked to added a lot more functionality by using the shift key in combination with others, but it just sends note on and from reading Multi-event midi bindings it appears that it is not possible to bind combination of note on messages to an action.

The knobs control gain for the 8 channels in the currently selected bank.

play/pause toggles transport roll
record toggles rec enable
Since shift can’t be used in combination with other keys I just mapped to loop-toggle

The grid 5x8 grid behaves as expected (launching clips for the respective grid location in the cue window).

The buttons in the right column next to the 5x8 grid launch scenes 1-5

The manual for the device intends the bottom row to be used to stop clips for that column, which I implemented but commented out. Instead my personal preference is the following:
Up arrow - Previous Bank
Down arrow - Next Bank
Left Arrow - Move transport to previous marker
Right Arrow - Move transport to next marker
I haven’t settled on bindings for the next four buttons on the bottom row labeled volume, pan, send, and device. The device manual intends these to be used in combination with the knobs to control the respective values, but I can’t find a way to do this. My initial thought is to bind these to view Recorder, Editor, Cue, or Mixer windows as switching between them is common in my workflow (at least on my laptop).

Sharing in case anyone finds it useful and for feedback. Happy to make a pull request after review, but not sure of the process for that (just make one at Pull requests · Ardour/ardour · GitHub ???)

The file:

<?xml version="1.0" encoding="UTF-8"?>
<ArdourMIDIBindings version="1.0.0" name="AKAI APC Key 25 mk2">

<!--
Created 2024-11-20 by Jason Kramer

Notes:

Only tested for the mk2.  I believe several mods would be needed for the
mk1, especially the knobs.

The shift button sends note 98 on.  AFAICT, there is no way to tie
actions to a combination of MIDI note on messages, so there is no way to
use the the shift key in combination with another to add additional
functionality.  Below shift is just mapped to loop-toggle which I find
useful.
-->

<DeviceInfo bank-size="8"/>

<!-- knobs 1-8 control gain for 8 channels per bank -->
<Binding channel="1" enc-2="48"  uri="/route/gain B1"/>
<Binding channel="1" enc-2="49"  uri="/route/gain B2"/>
<Binding channel="1" enc-2="50"  uri="/route/gain B3"/>
<Binding channel="1" enc-2="51"  uri="/route/gain B4"/>
<Binding channel="1" enc-2="52"  uri="/route/gain B5"/>
<Binding channel="1" enc-2="53"  uri="/route/gain B6"/>
<Binding channel="1" enc-2="54"  uri="/route/gain B7"/>
<Binding channel="1" enc-2="55"  uri="/route/gain B8"/>

<!-- Transport Controls-->
<Binding channel="1" note="91" action="Transport/ToggleRoll"/><!--Play/Pause-->
<Binding channel="1" note="93" function="toggle-rec-enable"/><!--Record On/Off-->
<Binding channel="1" note="98" function="loop-toggle"/><!--Shift-->

<!-- trigger cues in the session view using the scene launch buttons -->
<Binding channel="1" note="82" action="Cues/trigger-cue-0"/>
<Binding channel="1" note="83" action="Cues/trigger-cue-1"/>
<Binding channel="1" note="84" action="Cues/trigger-cue-2"/>
<Binding channel="1" note="85" action="Cues/trigger-cue-3"/>
<Binding channel="1" note="86" action="Cues/trigger-cue-4"/>

<!-- trigger individual clips using the 5x8 grid buttons -->
<Binding channel="1" note="32" action="Cues/trigger-slot-0-0"/>
<Binding channel="1" note="33" action="Cues/trigger-slot-1-0"/>
<Binding channel="1" note="34" action="Cues/trigger-slot-2-0"/>
<Binding channel="1" note="35" action="Cues/trigger-slot-3-0"/>
<Binding channel="1" note="36" action="Cues/trigger-slot-4-0"/>
<Binding channel="1" note="37" action="Cues/trigger-slot-5-0"/>
<Binding channel="1" note="38" action="Cues/trigger-slot-6-0"/>
<Binding channel="1" note="39" action="Cues/trigger-slot-7-0"/>

<Binding channel="1" note="24" action="Cues/trigger-slot-0-1"/>
<Binding channel="1" note="25" action="Cues/trigger-slot-1-1"/>
<Binding channel="1" note="26" action="Cues/trigger-slot-2-1"/>
<Binding channel="1" note="27" action="Cues/trigger-slot-3-1"/>
<Binding channel="1" note="28" action="Cues/trigger-slot-4-1"/>
<Binding channel="1" note="29" action="Cues/trigger-slot-5-1"/>
<Binding channel="1" note="30" action="Cues/trigger-slot-6-1"/>
<Binding channel="1" note="31" action="Cues/trigger-slot-7-1"/>

<Binding channel="1" note="16" action="Cues/trigger-slot-0-2"/>
<Binding channel="1" note="17" action="Cues/trigger-slot-1-2"/>
<Binding channel="1" note="18" action="Cues/trigger-slot-2-2"/>
<Binding channel="1" note="19" action="Cues/trigger-slot-3-2"/>
<Binding channel="1" note="20" action="Cues/trigger-slot-4-2"/>
<Binding channel="1" note="21" action="Cues/trigger-slot-5-2"/>
<Binding channel="1" note="22" action="Cues/trigger-slot-6-2"/>
<Binding channel="1" note="23" action="Cues/trigger-slot-7-2"/>

<Binding channel="1" note="8" action="Cues/trigger-slot-0-3"/>
<Binding channel="1" note="9" action="Cues/trigger-slot-1-3"/>
<Binding channel="1" note="10" action="Cues/trigger-slot-2-3"/>
<Binding channel="1" note="11" action="Cues/trigger-slot-3-3"/>
<Binding channel="1" note="12" action="Cues/trigger-slot-4-3"/>
<Binding channel="1" note="13" action="Cues/trigger-slot-5-3"/>
<Binding channel="1" note="14" action="Cues/trigger-slot-6-3"/>
<Binding channel="1" note="15" action="Cues/trigger-slot-7-3"/>

<Binding channel="1" note="0" action="Cues/trigger-slot-0-4"/>
<Binding channel="1" note="1" action="Cues/trigger-slot-1-4"/>
<Binding channel="1" note="2" action="Cues/trigger-slot-2-4"/>
<Binding channel="1" note="3" action="Cues/trigger-slot-3-4"/>
<Binding channel="1" note="4" action="Cues/trigger-slot-4-4"/>
<Binding channel="1" note="5" action="Cues/trigger-slot-5-4"/>
<Binding channel="1" note="6" action="Cues/trigger-slot-6-4"/>
<Binding channel="1" note="7" action="Cues/trigger-slot-7-4"/>

<!-- Uncomment the below to use the the bottom buttons to stop cue columns -->
<!--
<Binding channel="1" note="64" action="Cues/stop-cues-0-soon"/>
<Binding channel="1" note="65" action="Cues/stop-cues-1-soon"/>
<Binding channel="1" note="66" action="Cues/stop-cues-2-soon"/>
<Binding channel="1" note="67" action="Cues/stop-cues-3-soon"/>
<Binding channel="1" note="68" action="Cues/stop-cues-4-soon"/>
<Binding channel="1" note="69" action="Cues/stop-cues-5-soon"/>
<Binding channel="1" note="70" action="Cues/stop-cues-6-soon"/>
<Binding channel="1" note="71" action="Cues/stop-cues-7-soon"/>
-->

<!-- Alternative way of mapping bottom row, based on personal preference -->
<!-- up, down, left, right buttons -->
<Binding channel="1" note="64" function="prev-bank"/><!--Up changes to previous bank-->
<Binding channel="1" note="65" function="next-bank"/><!--Down changes to next bank-->
<Binding channel="1" note="66" action="Common/alternate-jump-backward-to-mark"/><!--Left moves transport to previous marker-->
<Binding channel="1" note="67" action="Common/alternate-jump-forward-to-mark"/><!--Right moves transport to next marker-->

<!-- "stop all clips" -->
<Binding channel="1" note="81" action="Cues/stop-all-cues-soon"/>

</ArdourMIDIBindings>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.