377 lines
8.7 KiB
Plaintext
377 lines
8.7 KiB
Plaintext
|
|
# Mackie emulation for the NI Maschine Mk3
|
|
|
|
# Copyright (c) 2018 Albert Graef <aggraef@gmail.com>
|
|
|
|
# Copying and distribution of this file, with or without modification, are
|
|
# permitted in any medium without royalty provided the copyright notice and
|
|
# this notice are preserved. This file is offered as-is, without any
|
|
# warranty.
|
|
|
|
JACK_NAME "midizap-Maschine"
|
|
JACK_PORTS 2
|
|
SYSTEM_PASSTHROUGH # pass through MCP feedback
|
|
|
|
# NOTE: At present, this controller isn't properly supported by ALSA, but it
|
|
# can be made to work in Linux with Harry van Haaren's Ctlra software.
|
|
# Specifically, you'll need the ctlra_daemonx program from the
|
|
# mapping_v1-daemonx branch which for the time being can be found here:
|
|
# https://github.com/agraef/openAV-Ctlra/tree/mapping_v1-daemonx
|
|
|
|
# After cloning the repository and switching to the mapping_v1-daemonx
|
|
# branch, you can run the following to install the libctlra library along with
|
|
# ctlra_daemonx: meson build && cd build && ninja && sudo ninja install
|
|
|
|
# Then run ctlra_daemonx -fnm alongside with midizap, and connect the ports as
|
|
# follows: Ctlra Maschine Mk3 -> midizap midi_in / midi_out -> Ardour mackie
|
|
# control in / mackie control out -> midizap midi_in2 / midi_out2 -> Ctlra
|
|
# Maschine Mk3.
|
|
|
|
# Usage (executive summary):
|
|
|
|
# - SHIFT, SELECT, SOLO and MUTE are used as shift buttons which change the
|
|
# functions of the encoders and some keys
|
|
|
|
# - The transport section (bottom/left) mostly does what you'd expect it to.
|
|
# PLAY, REC, STOP and RESTART/Loop all work as advertized. The two keys
|
|
# above REC and STOP are used as REWIND and FAST FWD.
|
|
|
|
# - The eight buttons at the top select a channel, or engage Channel
|
|
# Rec/Solo/Mute when combined with SELECT, SOLO and MUTE, respectively.
|
|
|
|
# - The eight small encoders function as the volume faders, or as encoders
|
|
# (usually pan) when combined with SHIFT. Touching the encoders means
|
|
# touching the faders, or pushing the encoders when combined with SELECT.
|
|
|
|
# - The big encoder emulates the jog wheel. Pushing this encoder left, right,
|
|
# up and down emulates the cursor keys, pressing it engages the Zoom
|
|
# function (which also lights up all four LEDs around the encoder).
|
|
|
|
# - The touchstrip is used as the master fader. The four buttons above it
|
|
# emulate the MCP shift keys (SHIFT, CTRL, OPTION, ALT/CMD).
|
|
|
|
# - The left and right arrow keys in the top/left button group are used to
|
|
# change banks, or move by single channels when combined with SHIFT.
|
|
|
|
# These are just the most important mappings; there's a bunch of other
|
|
# bindings, but I'll leave you to discover them on your own (see below for all
|
|
# the gory details). There are so many keys on this device, many of them are
|
|
# still unused right now, so you can easily add more bindings if you want. :)
|
|
|
|
[MIDI]
|
|
|
|
# We use the Mk3's dedicated SHIFT button as our primary shift key, to provide
|
|
# alternative functions to some of the buttons and the faders.
|
|
F2 SHIFT ^F2 RELEASE SHIFT ^F2
|
|
|
|
# transport (assigned to the transport section on the bottom left)
|
|
F#5 A7 # Stop
|
|
E5 A#7 # Play
|
|
F5 B7 # Rec
|
|
C5 D7 # Cycle (RESTART/Loop key)
|
|
C#5 G7 # Rew (ERASE/Replace key)
|
|
D5 G#7 # FFwd (TAP/Metro key)
|
|
D#5 C#7 # Nudge (FOLLOW/Grid key)
|
|
|
|
# additional functions on shifted keys
|
|
^C#5 D#7 # In (SHIFT ERASE/Replace key)
|
|
^F5 E7 # Out (SHIFT Rec key)
|
|
^D5 F7 # Click (SHIFT TAP/Metro key)
|
|
^D#5 C7 # Mark (SHIFT FOLLOW/Grid key)
|
|
|
|
# switch between SMPTE and BBT timecode
|
|
C#6 F4 # (MIDI/Channel key)
|
|
|
|
# Bank/channel left/right (arrow keys in the top left section)
|
|
E6 A#3 # Bank Left
|
|
A5 B3 # Bank Right
|
|
^E6 C4 # Channel Left
|
|
^A5 C#4 # Channel Right
|
|
|
|
# the four buttons below the arrow keys are assigned to the utility functions
|
|
F6 G#6 # Save (SAVE/File key)
|
|
G#5 A6 # Undo (SETTINGS key)
|
|
F#6 A#6 # Cancel (AUTO key)
|
|
G5 B6 # Enter (MACRO/Set key)
|
|
|
|
# Track/Pan/Send/Instr (4 buttons right above the grid)
|
|
# NOTE: Only Pan and Send appear to be supported in Ardour.
|
|
G#3 E3 # Track (PAD MODE key)
|
|
A3 F#3 # Pan (KEYBOARD key)
|
|
A#3 F3 # Send (CHORDS key)
|
|
B3 A3 # Instr (STEPS key)
|
|
|
|
# the four buttons right above the touchstrip are used for the MC shift keys
|
|
A4 A#5 # Shift (PITCH key)
|
|
A#4 B5 # Control (MOD key)
|
|
B4 C6 # Option (PERFORM key)
|
|
D3 C#6 # Alt/Cmd (NOTES key)
|
|
|
|
# big encoder press/left/right/up/down is assigned to the zoom/cursor keys
|
|
D2 C8 # Up
|
|
E2 C#8 # Down
|
|
D#2 D8 # Left
|
|
C#2 D#8 # Right
|
|
C2 E8 # Zoom
|
|
|
|
# These can also be shifted, so that you can bind them in the DAW if you
|
|
# want. E.g., I have the previous/next marker functions on the shifted cursor
|
|
# left/right keys in Ardour.
|
|
|
|
^D2 A#5 C8 # Up
|
|
^E2 A#5 C#8 # Down
|
|
^D#2 A#5 D8 # Left
|
|
^C#2 A#5 D#8 # Right
|
|
^C2 A#5 E8 # Zoom
|
|
|
|
# The Mk3 has one row of dedicated "channel buttons" at the top, right above
|
|
# the display. Since we'd also like to use these for the channel-based
|
|
# rec/solo/mute functions, we combine them with the SELECT, SOLO and MUTE
|
|
# buttons as additional shift keys.
|
|
|
|
F#4 SHIFT2 ^F#4 RELEASE SHIFT2 ^F#4
|
|
G4 SHIFT3 ^G4 RELEASE SHIFT3 ^G4
|
|
G#4 SHIFT4 ^G#4 RELEASE SHIFT4 ^G#4
|
|
|
|
# top row, unshifted: track select
|
|
G6 C2
|
|
G#6 C#2
|
|
A6 D2
|
|
A#6 D#2
|
|
B6 E2
|
|
C7 F2
|
|
C#7 F#2
|
|
D7 G2
|
|
|
|
# SELECT: rec
|
|
2^G6 C0
|
|
2^G#6 C#0
|
|
2^A6 D0
|
|
2^A#6 D#0
|
|
2^B6 E0
|
|
2^C7 F0
|
|
2^C#7 F#0
|
|
2^D7 G0
|
|
|
|
# SOLO: solo
|
|
3^G6 G#0
|
|
3^G#6 A0
|
|
3^A6 A#0
|
|
3^A#6 B0
|
|
3^B6 C1
|
|
3^C7 C#1
|
|
3^C#7 D1
|
|
3^D7 D#1
|
|
|
|
# MUTE: mute
|
|
4^G6 E1
|
|
4^G#6 F1
|
|
4^A6 F#1
|
|
4^A#6 G1
|
|
4^B6 G#1
|
|
4^C7 A1
|
|
4^C#7 A#1
|
|
4^D7 B1
|
|
|
|
# We also assign these to the function keys F1..F8 when shifted. You may want
|
|
# to remap these as needed.
|
|
^G6 F#4
|
|
^G#6 G4
|
|
^A6 G#4
|
|
^A#6 A4
|
|
^B6 A#4
|
|
^C7 B4
|
|
^C#7 C5
|
|
^D7 C#5
|
|
|
|
# The grid buttons are passed through unchanged, so that you can still use
|
|
# them as drum pads (provided that you filter out all MIDI channels except
|
|
# channel 10). Note that we use mod translations here, in order to preserve
|
|
# the velocities.
|
|
|
|
C3[]-10 C3-10
|
|
C#3[]-10 C#3-10
|
|
D3[]-10 D3-10
|
|
D#3[]-10 D#3-10
|
|
E3[]-10 E3-10
|
|
F3[]-10 F3-10
|
|
F#3[]-10 F#3-10
|
|
G3[]-10 G3-10
|
|
G#3[]-10 G#3-10
|
|
A3[]-10 A3-10
|
|
A#3[]-10 A#3-10
|
|
B3[]-10 B3-10
|
|
C4[]-10 C4-10
|
|
C#4[]-10 C#4-10
|
|
D4[]-10 D4-10
|
|
D#4[]-10 D#4-10
|
|
|
|
# Map the A..H buttons to program changes on channel 10 so that you can
|
|
# quickly switch the sounds of your drumkit, drum patterns etc. (This is just
|
|
# an example, you might want to disable these or remap them as you see fit.)
|
|
|
|
F#2 PC0-10
|
|
G2 PC1-10
|
|
G#2 PC2-10
|
|
A2 PC3-10
|
|
A#2 PC4-10
|
|
B2 PC5-10
|
|
C3 PC6-10
|
|
C#3 PC7-10
|
|
|
|
# big encoder assigned to MCP jog wheel
|
|
CC0~ CC60~
|
|
|
|
# encoders are mapped to the MCP channel faders
|
|
# (MC uses pitch bends here, use 129 as step size to get full range)
|
|
CC1~ PB[129]-1
|
|
CC2~ PB[129]-2
|
|
CC3~ PB[129]-3
|
|
CC4~ PB[129]-4
|
|
CC5~ PB[129]-5
|
|
CC6~ PB[129]-6
|
|
CC7~ PB[129]-7
|
|
CC8~ PB[129]-8
|
|
# master fader (touchstrip)
|
|
CC9[] PB[129]-9
|
|
|
|
# encoders become the MCP encoders when shifted (CC16..CC23, incremental mode)
|
|
^CC1~ CC16~
|
|
^CC2~ CC17~
|
|
^CC3~ CC18~
|
|
^CC4~ CC19~
|
|
^CC5~ CC20~
|
|
^CC6~ CC21~
|
|
^CC7~ CC22~
|
|
^CC8~ CC23~
|
|
|
|
# encoder touches = fader touches
|
|
E7 G#8
|
|
F7 A8
|
|
F#7 A#8
|
|
G7 B8
|
|
G#7 C9
|
|
A7 C#9
|
|
A#7 D9
|
|
B7 D#9
|
|
D#7 E9
|
|
|
|
# SELECT + encoder touches = push encoders -- we can't use SHIFT here since
|
|
# touches might easily get triggered when the encoders are moved
|
|
2^E7 G#2
|
|
2^F7 A2
|
|
2^F#7 A#2
|
|
2^G7 B2
|
|
2^G#7 C3
|
|
2^A7 C#3
|
|
2^A#7 D3
|
|
2^B7 D#3
|
|
2^D#7 E3
|
|
|
|
# feedback section ########################################################
|
|
|
|
[MIDI2]
|
|
|
|
# transport
|
|
A7 F#5 $M0 # reset all meters, see "meter" in the MCP feedback section below
|
|
A#7 E5
|
|
B7 F5 # Rec
|
|
D7 C5 # Cycle
|
|
G7 C#5
|
|
G#7 D5
|
|
C#7 D#5
|
|
|
|
^F7 D5
|
|
^C7 D#5
|
|
|
|
# SMPTE/BBT
|
|
F4 C#6
|
|
|
|
# channel left/right keys
|
|
C4 E6
|
|
C#4 A5
|
|
|
|
# row above grid (track/pan/send/instr)
|
|
E3 G#3
|
|
F#3 A3
|
|
F3 A#3
|
|
A3 B3
|
|
|
|
# feedback for the MC shift keys
|
|
A#5 A4 # Shift
|
|
B5 A#4 # Control
|
|
C6 B4 # Option
|
|
C#6 D3 # Alt/Cmd
|
|
|
|
# zoom (as the big encoder itself has no led, we light up the 4 leds around it
|
|
# instead; color: 4 = blue)
|
|
E8 C#2[4] D2[4] D#2[4] E2[4]
|
|
|
|
# select
|
|
# NOTE: Ardour apparently doesn't update these when changing banks.
|
|
C2 G6
|
|
C#2 G#6
|
|
D2 A6
|
|
D#2 A#6
|
|
E2 B6
|
|
F2 C7
|
|
F#2 C#7
|
|
G2 D7
|
|
|
|
# no feedback for encoders, only touchstrip
|
|
PB[128]{0}-9 CC9'
|
|
|
|
# MCP feedback (simply passed through, ctlra_daemon handles these
|
|
# automagically).
|
|
|
|
# rec/solo/mute
|
|
|
|
C0[] C0
|
|
C#0[] C#0
|
|
D0[] D0
|
|
D#0[] D#0
|
|
E0[] E0
|
|
F0[] F0
|
|
F#0[] F#0
|
|
G0[] G0
|
|
|
|
G#0[] G#0
|
|
A0[] A0
|
|
A#0[] A#0
|
|
B0[] B0
|
|
C1[] C1
|
|
C#1[] C#1
|
|
D1[] D1
|
|
D#1[] D#1
|
|
|
|
E1[] E1
|
|
F1[] F1
|
|
F#1[] F#1
|
|
G1[] G1
|
|
G#1[] G#1
|
|
A1[] A1
|
|
A#1[] A#1
|
|
B1[] B1
|
|
|
|
# meter values
|
|
CP[] CP
|
|
|
|
# NOTE: We only report the values as we receive them here, there's no
|
|
# automatic decay of the meters like with real Mackie hardware. Thus we
|
|
# explicitly reset all meters when transport stops below. (Ardour at least
|
|
# does *not* do that automatically.)
|
|
|
|
M0[1] CP{0} CP{16} CP{32} CP{48} CP{64} CP{80} CP{96} CP{112}
|
|
|
|
# timecode
|
|
CC64[] CC64
|
|
CC65[] CC65
|
|
CC66[] CC66
|
|
CC67[] CC67
|
|
CC68[] CC68
|
|
CC69[] CC69
|
|
CC70[] CC70
|
|
CC71[] CC71
|
|
CC72[] CC72
|
|
CC73[] CC73
|