# OSC pattern config file.

# Make a copy of this file, rename it, and edit the file to create a 
# custom pattern configuration.

# For basic information about OSC and REAPER, see 
# http://www.cockos.com/reaper/sdk/osc/osc.php .

# ----------------------------------------------------------------

# Default settings for how this device displays information.

# DEVICE_TRACK_COUNT is how many tracks this device can display at once 
# (the track bank size).
# DEVICE_SEND_COUNT/DEVICE_RECEIVE_COUNT is how many sends and receives this
# device can display at once.
# DEVICE_FX_COUNT is how many track insert FX this device can display at once.
# DEVICE_FX_PARAM_COUNT is how many FX parameters this device can display at once
# (the FX parameter bank size).
# DEVICE_FX_INST_PARAM_COUNT is how many FX instrument parameters this device can
# display at once (the FX instrument parameter bank size).

DEVICE_TRACK_COUNT 8
DEVICE_SEND_COUNT 4
DEVICE_RECEIVE_COUNT 4
DEVICE_FX_COUNT 8
DEVICE_FX_PARAM_COUNT 16
DEVICE_FX_INST_PARAM_COUNT 16
DEVICE_MARKER_COUNT 0
DEVICE_REGION_COUNT 0

# ----------------------------------------------------------------

# Default values for how this device behaves. The device has a selected track, bank 
# of tracks, and FX, which are not necessarily the same as the selected track or FX 
# in the REAPER window.

# REAPER_TRACK_FOLLOWS determines whether the selected track in REAPER changes
# only when the user changes it in the REAPER window, or if it follows the track
# currently selected in the OSC device.
# Allowed values: REAPER, DEVICE

# DEVICE_TRACK_FOLLOWS determines whether the selected track in the device changes
# only when the device changes it, or if it follows the last touched track in the 
# REAPER window.
# Allowed values: DEVICE, LAST_TOUCHED

# DEVICE_TRACK_BANK_FOLLOWS determines whether the selected track bank in the device 
# changes only when the device changes it, or if it follows the REAPER mixer view.
# Allowed values: DEVICE, MIXER

# DEVICE_FX_FOLLOWS determines whether the selected FX in the device changes only 
# when the  device changes it, or if it follows the last touched or currently focused
# FX in the REAPER window.
# Allowed values: DEVICE, LAST_TOUCHED, FOCUSED

# DEVICE_EQ determines whether sending any FX_EQ message will automatically insert
# ReaEQ on the target track if it does not exist, or the message will only affect
# an existing instance of ReaEQ.
# Allowed values: INSERT, EXISTING

# DEVICE_ROTARY_CENTER defines the argument that represents no change, for rotary 
# controls.
# Allowed values: 0, 0.5

REAPER_TRACK_FOLLOWS REAPER
DEVICE_TRACK_FOLLOWS DEVICE
DEVICE_TRACK_BANK_FOLLOWS DEVICE
DEVICE_FX_FOLLOWS DEVICE

DEVICE_EQ INSERT

DEVICE_ROTARY_CENTER 0

# ----------------------------------------------------------------

# Each line below is an action description in all caps, followed by a number of OSC
# message patterns. You can add, remove, or change patterns, delete lines, or comment 
# out lines by adding '#', but do not change the action descriptions.

# The patterns following the action are the messages that REAPER will send and receive
# to and from the OSC device. An action can have no patterns (and will be ignored), 
# one pattern, or many patterns.

# The patterns may contain the wildcard character '@'. (This is REAPER-only, not part
# of the OSC specification.) The '@' wildcard is used to specify the action target.

# ----------------------------------------------------------------

# The OSC device sends patterns to trigger actions, and REAPER sends patterns to the
# device as feedback.  OSC patterns can include arguments, which are be interpreted
# in various ways, defined by a flag immediately before the pattern.

# n: normalized floating-point argument. 0 means the minimum value, and 1 means the 
# maximum value.  This can be used for continous controls like sliders and knobs.

# Example: TRACK_VOLUME n/track/volume n/track/@/volume
# The device sends /track/3/volume 0.5 to set the volume to 0.5 for track 3, or
# /track/volume 0.5 to set the volume for the track that is currently selected in 
# the device. REAPER sends /track/3/volume 0.5 when track 3 volume changes to 0.5.
# If track 3 is currently selected in the device, REAPER will also send 
# /track/volume 0.5. The floating-point argument represents as the track fader 
# position in the REAPER window. 0 sets the fader all the way down, 1 sets the fader
# all the way up, 0.5 sets the fader exactly in the middle. Therefore, the actual 
# volume that is set depends on the REAPER track fader preference settings.

# f: raw floating-point argument. The argument is interpreted directly, to set or
# report a value.

# Example: TEMPO f/tempo/raw
# The device sends /tempo/raw 100.351 to change the REAPER tempo to 100.351 bpm.
# REAPER sends /tempo/raw 120 when the tempo changes to 120 bpm. 

# Normalized and raw floating-point arguments also support multiple parameters 
# sent from the device.
# Example: FX_PARAM_VALUE n/track/@/fx/@/fxparam/@/value
# The device can send /track/3/fx/1,2,5/fxparam/6,7,7/value 0.25 0.5 0.75
# to set three FX parameter values at once, to 0.25, 0.5, 0.75 respectively.

# b: binary argument, either 0 or 1. The device sets or clears the state when 
# sending the message. Can be used to emulate switches or momentary controls.

# Example: TRACK_MUTE b/track/mute b/track/@/mute
# The device sends /track/3/mute 1 to mute track 3, or /track/mute 1 to mute the 
# track that is currently selected in the device. /track/3/mute 0 will unmute
# track 3. REAPER sends /track/3/mute 1 when track 3 is muted, and /track/3/mute 0
# when track 3 is unmuted. If track 3 is currently selected in the device, REAPER 
# will also send /track/mute 1 and /track/mute 0.

# Example: REWIND b/rewind
# The device sends /rewind 1 to begin rewinding, and sends /rewind 0 to stop
# rewinding. REAPER sends /rewind 1 when the rewind button in the REAPER window is
# pressed, and /rewind 0 when the button is released. 

# t: trigger or toggle message. The device triggers the action, or toggles the
# state, when the pattern is sent with no arguments, or with an argument of 1.
# The feedback values REAPER sends are identical to those sent for binary 
# arguments.

# Example: METRONOME t/click
# The device sends /click or /click 1 to toggle the metronome on or off. REAPER 
# sends /click 1 when the metronome is enabled, and /click 0 when the metronome 
# is disabled. 

# r: rotary. The device triggers the action in the forward direction when sent 
# with an argument greater than ROTARY_CENTER, and in the reverse direction when 
# sent with an argument less than ROTARY_CENTER. For some messages, the magnitude 
# of the argument affects the rate of change. REAPER does not send feedback for 
# these messages.

# Example: SCRUB r/scrub
# The device sends /scrub 1 to scrub forward, and /scrub -1 to scrub in reverse
# (if ROTARY_CENTER is 0).

# s: string. These messages include a string argument. Many of these messages
# are sent from REAPER to the device for feedback/display, but some can be sent
# from the device to REAPER.

# Example: TRACK_NAME s/track/name s/track/@/name
# The device sends /track/3/name "vox" to rename track 3 in REAPER, or /track/name
# "vox" to rename the track that is currently selected in the device. REAPER sends 
# /track/3/name "vox" to report that name of track 3 is "vox". If track 3 is 
# currently selected in the device, REAPER will also send /track/name "vox".

# Example: FX_FOLLOWS s/fxfollows
# The device sends /fxfollows "FOCUSED" to inform REAPER that the selected FX in the
# device will now follow the FX that is focused in the REAPER window.

# i: integer. These messages include an integer argument, and are sent from the 
# device to REAPER.

# Example: ACTION i/action t/action/@
# The device sends /action 40757 or /action/40757 to trigger the REAPER action
# "split items at edit cursor". See the REAPER actions window for a complete list
# of action command ID numbers.

# Example: TRACK_BANK_EDIT i/bankedit t/bankedit/@
# The device sends /bankedit 2 or /bankedit/2 to inform REAPER that the active 
# track bank is bank 2. If NUM_TRACKS is 8, that means REAPER will now interpret
# a message like /track/1/volume as targeting the volume for track 9, and  REAPER 
# will only send the device feedback messages for tracks 9-16.

# ----------------------------------------------------------------

# Note: the default configuration includes a lot of feedback messages, which can
# flood the device. Avoid flooding by removing messages (by deleting the patterns, 
# or commenting out the lines) that the device does not want, especially the
# TIME, BEAT, SAMPLES, FRAMES, VU, FX_PARAM, LAST_MARKER, LAST_REGION messages.

# Note: FX parameter feedback will only be sent for the track that is currently
# selected in the device. If messages exist that can target FX on other tracks,
# feedback will be sent whenever the parameter values change. This can be a lot of
# data, so only include those messages if you want the feedback.
# Example: FX_PARAM_VALUE /fxparam/@/value /fx/@/fxparam/@/value
# This action can only target FX on the currently selected track, so feedback will
# only be sent for that track.
# Example: FX_PARAM_VALUE /fxparam/@/value /fx/@/fxparam/@/value /track/@/fx/@/fxparam/@/value
# This action can target FX on any track, so feedback will be sent for all tracks.

# Note: multiple patterns for a given action can all be listed on the same line, 
# or split onto separate lines.

# ----------------------------------------------------------------

# The default REAPER OSC pattern configuration follows. To create a custom 
# configuration, copy this file and edit the copy.


SCROLL_X- b/scroll/x/- r/scroll/x
SCROLL_X+ b/scroll/x/+ r/scroll/x
SCROLL_Y- b/scroll/y/- r/scroll/y
SCROLL_Y+ b/scroll/y/+ r/scroll/y
ZOOM_X- b/zoom/x/- r/zoom/x
ZOOM_X+ b/zoom/x/+ r/zoom/x
ZOOM_Y- b/zoom/y/- r/zoom/y
ZOOM_Y+ b/zoom/y/+ r/zoom/y

TIME f/time s/time/str
BEAT s/beat/str
SAMPLES f/samples s/samples/str
FRAMES s/frames/str

METRONOME t/click
REPLACE t/replace
REPEAT t/repeat

RECORD t/record
STOP t/stop
PLAY t/play
PAUSE t/pause

AUTO_REC_ARM t/autorecarm
SOLO_RESET t/soloreset
ANY_SOLO b/anysolo

REWIND b/rewind
FORWARD b/forward

REWIND_FORWARD_BYMARKER t/bymarker
REWIND_FORWARD_SETLOOP t/editloop
GOTO_MARKER i/marker t/marker/@
GOTO_REGION i/region t/region/@

SCRUB r/scrub

PLAY_RATE n/playrate f/playrate/raw r/playrate/rotary s/playrate/str
TEMPO n/tempo f/tempo/raw r/tempo/rotary s/tempo/str

MARKER_NAME s/marker/@/name
MARKER_NUMBER s/marker/@/number/str
REGION_NAME s/region/@/name
REGION_NUMBER s/region/@/number/str
LAST_MARKER_NAME s/lastmarker/name
LAST_MARKER_NUMBER s/lastmarker/number/str
LAST_REGION_NAME s/lastregion/name
LAST_REGION_NUMBER s/lastregion/number/str

MASTER_VOLUME n/master/volume s/master/volume/str
MASTER_PAN n/master/pan s/master/pan/str
MASTER_VU n/master/vu
MASTER_VU_L n/master/vu/L
MASTER_VU_R n/master/vu/R

MASTER_SEND_NAME s/master/send/@/name
MASTER_SEND_VOLUME n/master/send/@/volume s/master/send/@/volume/str
MASTER_SEND_PAN n/master/send/@/pan s/master/send/@/pan/str

TRACK_NAME s/track/name s/track/@/name
TRACK_NUMBER s/track/number/str s/track/@/number/str

TRACK_MUTE b/track/mute b/track/@/mute t/track/mute/toggle t/track/@/mute/toggle
TRACK_SOLO b/track/solo b/track/@/solo t/track/solo/toggle t/track/@/solo/toggle
TRACK_REC_ARM b/track/recarm b/track/@/recarm t/track/recarm/toggle t/track/@/recarm/toggle

TRACK_MONITOR b/track/monitor b/track/@/monitor 
TRACK_SELECT b/track/select b/track/@/select 

TRACK_VU n/track/vu n/track/@/vu
TRACK_VU_L n/track/vu/L n/track/@/vu/L
TRACK_VU_R n/track/vu/R n/track/@/vu/R
TRACK_VOLUME n/track/volume n/track/@/volume 
TRACK_VOLUME s/track/volume/str s/track/@/volume/str
TRACK_VOLUME f/track/volume/db f/track/@/volume/db
TRACK_PAN n/track/pan n/track/@/pan s/track/pan/str s/track/@/pan/str
TRACK_PAN2 n/track/pan2 n/track/@/pan2 s/track/pan2/str s/track/@/pan2/str
TRACK_PAN_MODE s/track/panmode s/track/@/panmode

TRACK_SEND_NAME s/track/send/@/name s/track/@/send/@/name
TRACK_SEND_VOLUME n/track/send/@/volume n/track/@/send/@/volume
TRACK_SEND_VOLUME s/track/send/@/volume/str s/track/@/send/@/volume/str
TRACK_SEND_PAN n/track/send/@/pan n/track/@/send/@/pan
TRACK_SEND_PAN s/track/send/@/pan/str s/track/@/send/@/pan/str

TRACK_RECV_NAME s/track/recv/@/name s/track/@/recv/@/name
TRACK_RECV_VOLUME n/track/recv/@/volume n/track/@/recv/@/volume
TRACK_RECV_VOLUME s/track/recv/@/volume/str s/track/@/recv/@/volume/str
TRACK_RECV_PAN n/track/recv/@/pan n/track/@/recv/@/pan
TRACK_RECV_PAN s/track/recv/@/pan/str s/track/@/recv/@/pan/str

TRACK_AUTO s/track/auto
TRACK_AUTO_TRIM t/track/autotrim t/track/@/autotrim
TRACK_AUTO_READ t/track/autoread t/track/@/autoread
TRACK_AUTO_LATCH t/track/autolatch t/track/@/autolatch
TRACK_AUTO_TOUCH t/track/autotouch t/track/@/autotouch
TRACK_AUTO_WRITE t/track/autowrite t/track/@/autowrite

TRACK_VOLUME_TOUCH b/track/volume/touch b/track/@/volume/touch
TRACK_PAN_TOUCH b/track/pan/touch b/track/@/pan/touch

FX_NAME s/fx/name s/fx/@/name s/track/@/fx/@/name
FX_NUMBER s/fx/number/str s/fx/@/number/str s/track/@/fx/@/number/str
FX_BYPASS b/fx/bypass b/fx/@/bypass b/track/@/fx/@/bypass 
FX_OPEN_UI b/fx/openui b/fx/@/openui b/track/@/fx/@/openui

FX_PRESET s/fx/preset s/fx/@/preset s/track/@/fx/@/preset
FX_PREV_PRESET t/fx/preset- t/fx/@/preset- t/track/@/fx/@/preset-
FX_NEXT_PRESET t/fx/preset+ t/fx/@/preset+ t/track/@/fx/@/preset+

FX_PARAM_NAME s/fxparam/@/name s/fx/@/fxparam/@/name
FX_WETDRY n/fx/wetdry n/fx/@/wetdry n/track/@/fx/@/wetdry
FX_WETDRY s/fx/wetdry/str s/fx/@/wetdry/str s/track/@/fx/@/wetdry/str
FX_PARAM_VALUE n/fxparam/@/value n/fx/@/fxparam/@/value n/track/@/fx/@/fxparam/@/value
FX_PARAM_VALUE s/fxparam/@/value/str s/fx/@/fxparam/@/value/str

FX_EQ_BYPASS b/fxeq/bypass b/track/@/fxeq/bypass
FX_EQ_OPEN_UI b/fxeq/openui b/track/@/fxeq/openui

FX_EQ_PRESET s/fxeq/preset s/track/@/fxeq/preset
FX_EQ_PREV_PRESET s/fxeq/preset- s/track/@/fxeq/preset-
FX_EQ_NEXT_PRESET s/fxeq/preset+ s/track/@/fxeq/preset+

FX_EQ_MASTER_GAIN n/fxeq/gain n/track/@/fxeq/gain 
FX_EQ_MASTER_GAIN f/fxeq/gain/db f/track/@/fxeq/gain/db s/fxeq/gain/str
FX_EQ_WETDRY n/fxeq/wetdry n/track/@/fxeq/wetdry
FX_EQ_WETDRY s/fxeq/wetdry/str s/track/@/fxeq/wetdry/str

FX_EQ_HIPASS_NAME s/fxeq/hipass/str
FX_EQ_HIPASS_FREQ n/fxeq/hipass/freq n/track/@/fxeq/hipass/freq
FX_EQ_HIPASS_FREQ f/fxeq/hipass/freq/hz f/track/@/fxeq/hipass/freq/hz
FX_EQ_HIPASS_FREQ s/fxeq/hipass/freq/str s/track/@/fxeq/hipass/freq/str
FX_EQ_HIPASS_Q n/fxeq/hipass/q n/track/@/fxeq/hipass/q
FX_EQ_HIPASS_Q f/fxeq/hipass/q/oct f/track/@/fxeq/hipass/q/oct
FX_EQ_HIPASS_Q s/fxeq/hipass/q/str s/track/@/fxeq/hipass/q/str

FX_EQ_LOSHELF_NAME s/fxeq/lopass/str
FX_EQ_LOSHELF_FREQ n/fxeq/loshelf/freq n/track/@/fxeq/loshelf/freq
FX_EQ_LOSHELF_FREQ f/fxeq/loshelf/freq/hz f/track/@/fxeq/loshelf/freq/hz
FX_EQ_LOSHELF_FREQ s/fxeq/loshelf/freq/str s/track/@/fxeq/loshelf/freq/str
FX_EQ_LOSHELF_GAIN n/fxeq/loshelf/gain n/track/@/fxeq/loshelf/gain
FX_EQ_LOSHELF_GAIN f/fxeq/loshelf/gain/db f/track/@/fxeq/loshelf/gain/db
FX_EQ_LOSHELF_GAIN s/fxeq/loshelf/gain/str s/track/@/fxeq/loshelf/gain/str
FX_EQ_LOSHELF_Q n/fxeq/loshelf/q n/track/@/fxeq/loshelf/q
FX_EQ_LOSHELF_Q f/fxeq/loshelf/q/oct f/track/@/fxeq/loshelf/q/oct
FX_EQ_LOSHELF_Q s/fxeq/loshelf/q/str s/track/@/fxeq/loshelf/q/str

FX_EQ_BAND_NAME s/fxeq/band/str
FX_EQ_BAND_FREQ n/fxeq/band/@/freq n/track/@/fxeq/band/@/freq
FX_EQ_BAND_FREQ f/fxeq/band/@/freq/hz f/track/@/fxeq/band/@/freq/hz
FX_EQ_BAND_FREQ s/fxeq/band/@/freq/str s/track/@/fxeq/band/@/freq/str
FX_EQ_BAND_GAIN n/fxeq/band/@/gain n/track/@/fxeq/band/@/gain
FX_EQ_BAND_GAIN f/fxeq/band/@/gain/db f/track/@/fxeq/band/@/gain/db
FX_EQ_BAND_GAIN s/fxeq/band/@/gain/str s/track/@/fxeq/band/@/gain/str
FX_EQ_BAND_Q n/fxeq/band/@/q n/track/@/fxeq/band/@/q
FX_EQ_BAND_Q f/fxeq/band/@/q/oct f/track/@/fxeq/band/@/q/oct
FX_EQ_BAND_Q s/fxeq/band/@/q/str s/track/@/fxeq/band/@/q/str

FX_EQ_NOTCH_NAME s/fxeq/notch/str
FX_EQ_NOTCH_FREQ n/fxeq/notch/freq n/track/@/fxeq/notch/freq
FX_EQ_NOTCH_FREQ f/fxeq/notch/freq/hz f/track/@/fxeq/notch/freq/hz
FX_EQ_NOTCH_FREQ s/fxeq/notch/freq/str s/track/@/fxeq/notch/freq/str
FX_EQ_NOTCH_GAIN n/fxeq/notch/gain n/track/@/fxeq/notch/gain
FX_EQ_NOTCH_GAIN f/fxeq/notch/gain/db f/track/@/fxeq/notch/gain/db
FX_EQ_NOTCH_GAIN s/fxeq/notch/gain/str s/track/@/fxeq/notch/gain/str
FX_EQ_NOTCH_Q n/fxeq/notch/q n/track/@/fxeq/notch/q
FX_EQ_NOTCH_Q f/fxeq/notch/q/oct f/track/@/fxeq/notch/q/oct
FX_EQ_NOTCH_Q s/fxeq/notch/q/str s/track/@/fxeq/notch/q/str

FX_EQ_HISHELF_NAME s/fxeq/hishelf/str
FX_EQ_HISHELF_FREQ n/fxeq/hishelf/freq n/track/@/fxeq/hishelf/freq
FX_EQ_HISHELF_FREQ f/fxeq/hishelf/freq/hz f/track/@/fxeq/hishelf/freq/hz
FX_EQ_HISHELF_FREQ s/fxeq/hishelf/freq/str s/track/@/fxeq/hishelf/freq/str
FX_EQ_HISHELF_GAIN n/fxeq/hishelf/gain n/track/@/fxeq/hishelf/gain
FX_EQ_HISHELF_GAIN f/fxeq/hishelf/gain/sb f/track/@/fxeq/hishelf/gain/db
FX_EQ_HISHELF_GAIN s/fxeq/hishelf/gain/str s/track/@/fxeq/hishelf/gain/str
FX_EQ_HISHELF_Q n/fxeq/hishelf/q n/track/@/fxeq/hishelf/q
FX_EQ_HISHELF_Q f/fxeq/hishelf/q/oct f/track/@/fxeq/hishelf/q/oct
FX_EQ_HISHELF_Q s/fxeq/hishelf/q/str s/track/@/fxeq/hishelf/q/str

FX_EQ_LOPASS_NAME s/fxeq/loshelf/str
FX_EQ_LOPASS_FREQ n/fxeq/lopass/freq n/track/@/fxeq/lopass/freq
FX_EQ_LOPASS_FREQ f/fxeq/lopass/freq/hz f/track/@/fxeq/lopass/freq/hz
FX_EQ_LOPASS_FREQ s/fxeq/lopass/freq/str s/track/@/fxeq/lopass/freq/str
FX_EQ_LOPASS_Q n/fxeq/lopass/q n/track/@/fxeq/lopass/q
FX_EQ_LOPASS_Q f/fxeq/lopass/q/oct f/track/@/fxeq/lopass/q/oct
FX_EQ_LOPASS_Q s/fxeq/lopass/q/str s/track/@/fxeq/lopass/q/str

FX_INST_NAME s/fxinst/name s/track/@/fxinst/name
FX_INST_BYPASS b/fxinst/bypass b/track/@/fxinst/bypass
FX_INST_OPEN_UI b/fxinst/openui b/track/@/fxinst/openui

FX_INST_PRESET s/fxinst/preset s/track/@/fxinst/preset
FX_INST_PREV_PRESET t/fxinst/preset- t/track/@/fxinst/preset-
FX_INST_NEXT_PRESET t/fxinst/preset+ t/track/@/fxinst/preset+

FX_INST_PARAM_NAME s/fxinstparam/@/name
FX_INST_PARAM_VALUE n/fxinstparam/@/value n/track/@/fxinstparam/@/value
FX_INST_PARAM_VALUE s/fxinstparam/@/value/str

LAST_TOUCHED_FX_TRACK_NAME s/fx/last_touched/track/name
LAST_TOUCHED_FX_TRACK_NUMBER s/fx/last_touched/track/number/str
LAST_TOUCHED_FX_NAME s/fx/last_touched/name
LAST_TOUCHED_FX_NUMBER s/fx/last_touched/number/str
LAST_TOUCHED_FX_PARAM_NAME s/fxparam/last_touched/name
LAST_TOUCHED_FX_PARAM_VALUE n/fxparam/last_touched/value s/fxparam/last_touched/value/str

# these send MIDI to the vkb MIDI input. parameters are raw MIDI.

# for notes, if two, first wildcard is channel (0-15). MIDI note number is required (as decimal integer only!)
# if parameter value is 0, note-off, otherwise note-on
VKB_MIDI_NOTE i/vkb_midi/@/note/@ f/vkb_midi/@/note/@ i/vkb_midi/note/@ f/vkb_midi/note/@
# similar, but for 0xA0 (poly aftertouch)
VKB_MIDI_POLYAFTERTOUCH i/vkb_midi/@/polyaftertouch/@ f/vkb_midi/@/polyaftertouch/@ i/vkb_midi/polyaftertouch/@ f/vkb_midi/polyaftertouch/@
# for CCs, if two, first wildcard is channel (0-15). MIDI CC number is required (as decimal integer only!)
VKB_MIDI_CC i/vkb_midi/@/cc/@ f/vkb_midi/@/cc/@ i/vkb_midi/cc/@ f/vkb_midi/cc/@ 
# program change (0xC0) can take channel as wildcard, or value only
VKB_MIDI_PROGRAM i/vkb_midi/@/program f/vkb_midi/@/program i/vkb_midi/program f/vkb_midi/program
# channel pressure (aftertouch) (0xD0) can take channel as wildcard, or value only
VKB_MIDI_CHANNELPRESSURE i/vkb_midi/@/channelpressure f/vkb_midi/@/channelpressure i/vkb_midi/channelpressure f/vkb_midi/channelpressure
# pitch can take channel as wildcard, or value only
VKB_MIDI_PITCH i/vkb_midi/@/pitch f/vkb_midi/@/pitch i/vkb_midi/pitch f/vkb_midi/pitch


ACTION i/action s/action/str t/action/@ f/action/@/cc
ACTION_SOFT f/action/@/cc/soft
ACTION_RELATIVE f/action/@/cc/relative
MIDIACTION i/midiaction t/midiaction/@
MIDILISTACTION i/midilistaction t/midilistaction/@

# ----------------------------------------------------------------

# The following messages are sent from the device, to inform REAPER
# of a change in the device state, behavior, or display capabilities.

DEVICE_TRACK_COUNT i/device/track/count t/device/track/count/@
DEVICE_SEND_COUNT i/device/send/count t/device/send/count/@
DEVICE_RECEIVE_COUNT i/device/receive/count t/device/receive/count/@
DEVICE_FX_COUNT i/device/fx/count t/device/fx/count/@
DEVICE_FX_PARAM_COUNT i/device/fxparam/count t/device/fxparam/count/@
DEVICE_FX_INST_PARAM_COUNT i/device/fxinstparam/count t/device/fxinstparam/count/@
DEVICE_MARKER_COUNT i/device/marker/count t/device/marker/count/@
DEVICE_REGION_COUNT i/device/region/count t/device/region/count/@

REAPER_TRACK_FOLLOWS s/reaper/track/follows
REAPER_TRACK_FOLLOWS_REAPER t/reaper/track/follows/reaper
REAPER_TRACK_FOLLOWS_DEVICE t/reaper/track/follows/device

DEVICE_TRACK_FOLLOWS s/device/track/follows
DEVICE_TRACK_FOLLOWS_DEVICE t/device/track/follows/device
DEVICE_TRACK_FOLLOWS_LAST_TOUCHED t/device/track/follows/last_touched

DEVICE_TRACK_BANK_FOLLOWS s/device/track/bank/follows
DEVICE_TRACK_BANK_FOLLOWS_DEVICE t/device/track/bank/follows/device
DEVICE_TRACK_BANK_FOLLOWS_MIXER t/device/track/bank/follows/mixer

DEVICE_FX_FOLLOWS s/device/fx/follows
DEVICE_FX_FOLLOWS_DEVICE t/device/fx/follows/device
DEVICE_FX_FOLLOWS_LAST_TOUCHED t/device/fx/follows/last_touched
DEVICE_FX_FOLLOWS_FOCUSED t/device/fx/follows/focused

DEVICE_TRACK_SELECT i/device/track/select t/device/track/select/@ 
DEVICE_PREV_TRACK t/device/track/-
DEVICE_NEXT_TRACK t/device/track/+

DEVICE_TRACK_BANK_SELECT i/device/track/bank/select t/device/track/bank/select/@
DEVICE_PREV_TRACK_BANK t/device/track/bank/-
DEVICE_NEXT_TRACK_BANK t/device/track/bank/+

DEVICE_FX_SELECT i/device/fx/select t/device/fx/select/@
DEVICE_PREV_FX t/device/fx/-
DEVICE_NEXT_FX t/device/fx/+

DEVICE_FX_PARAM_BANK_SELECT i/device/fxparam/bank/select t/device/fxparam/bank/select/@ 
DEVICE_FX_PARAM_BANK_SELECT s/device/fxparam/bank/str
DEVICE_PREV_FX_PARAM_BANK t/device/fxparam/bank/-
DEVICE_NEXT_FX_PARAM_BANK t/device/fxparam/bank/+

DEVICE_FX_INST_PARAM_BANK_SELECT i/device/fxinstparam/bank/select t/device/fxinstparam/bank/select/@
DEVICE_FX_INST_PARAM_BANK_SELECT s/device/fxinstparam/bank/str
DEVICE_PREV_FX_INST_PARAM_BANK t/device/fxinstparam/bank/-
DEVICE_NEXT_FX_INST_PARAM_BANK t/device/fxinstparam/bank/+

DEVICE_MARKER_BANK_SELECT i/device/marker/bank/select t/device/marker/bank/select/@
DEVICE_PREV_MARKER_BANK t/device/marker/bank/-
DEVICE_NEXT_MARKER_BANK t/device/marker/bank/+

DEVICE_REGION_BANK_SELECT i/device/region/bank/select t/device/region/bank/select/@
DEVICE_PREV_REGION_BANK t/device/region/bank/-
DEVICE_NEXT_REGION_BANK t/device/region/bank/+
