Novation Launchpad Mini MK3 Codec / Map

Want to talk about music hardware or software that doesn't include Reason?
Post Reply
User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

28 Jul 2022

Hi guys,

my old novation launchpad mini MK2 is working quite well with the stone age codec/map from https://tonalaxis.wordpress.com/2014/10 ... -and-maps/

now i got a MK3. i can't find no codec/map. any one of you got some?
or do i have to use novation components software?
i did edit reason codecs and maps before...but think it to be quite challenging...

rmtcvolte
Posts: 206
Joined: 15 Nov 2018

29 Jul 2022

me-yourself-and-them wrote:
28 Jul 2022
Hi guys,

my old novation launchpad mini MK2 is working quite well with the stone age codec/map from https://tonalaxis.wordpress.com/2014/10 ... -and-maps/

now i got a MK3. i can't find no codec/map. any one of you got some?
or do i have to use novation components software?
i did edit reason codecs and maps before...but think it to be quite challenging...
Have you searched for a programmers guide for the LP mini? I do have the LP X and this guide was verry helpful to script my own codec. Novation components is useful to install the latest firmware and I would recommend to do so.

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

31 Jul 2022

just realised: the launchpad mini MK2 IS able to remote midi:
play
stop
go to left marker
go to right marker
but how do you teach reason to IN BEAT go to block 1 2 etc?

rmtcvolte
Posts: 206
Joined: 15 Nov 2018

31 Jul 2022

me-yourself-and-them wrote:
31 Jul 2022
just realised: the launchpad mini MK2 IS able to remote midi:
play
stop
go to left marker
go to right marker
but how do you teach reason to IN BEAT go to block 1 2 etc?
There are several "Remotable Items" related to loops.

Code: Select all

Loop On/Off	0	1	Toggle	ValueOutput
Left Loop	0	2147483646	Value	ValueOutput
Left Loop Bar	0	0	Delta	TextOutput
Left Loop Beat	0	0	Delta	TextOutput
Left Loop 16th	0	0	Delta	TextOutput
Left Loop Tick	0	0	Delta	TextOutput
Left Loop Subticks	0	1	-	ValueOutput
Clear Left Loop Subticks	0	1	Trig	ValueOutput
Right Loop	0	2147483646	Value	ValueOutput
Right Loop Bar	0	0	Delta	TextOutput
Right Loop Beat	0	0	Delta	TextOutput
Right Loop 16th	0	0	Delta	TextOutput
Right Loop Tick	0	0	Delta	TextOutput
Right Loop Subticks	0	1	-	ValueOutput
Clear Right Loop Subticks	0	1	Trig	ValueOutput
Move Loop Left	0	1	Trig	ValueOutput
Move Loop Right	0	1	Trig	ValueOutput
Move Loop One bar Left	0	1	Trig	ValueOutput
Move Loop One bar Right	0	1	Trig	ValueOutput
Song Position	0	2147483646	Value	ValueOutput
Bar Position	0	0	Delta	TextOutput
Bar Position Up	0	0	Trig	TextOutput
Bar Position Down	0	0	Trig	TextOutput
Beat Position	0	0	Delta	TextOutput
Sixteenth Position	0	0	Delta	TextOutput
Tick Position	0	0	Delta	TextOutput
Subticks	0	1	-	ValueOutput
Clear Subticks	0	1	Trig	ValueOutput
and the ones you mentioned

Code: Select all

Goto Left Locator	0	0	Trig	TextOutput
Goto Right Locator	0	0	Trig	TextOutput
In "Switch Blocks by Midi Controller" I tried to describe the behavior of the Nektar P4, which is a little different from the the other controllers from Nektar I think. I have some ideas how to script it, but no sparetime at the moment to try it out.

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

08 Aug 2022

working on a new codec for Launchpad Mini MK3 now. tough work...

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

08 Aug 2022

a few hours later. i can turn a pad light on on my LPminiMK3. i can turn it off.
midi code decimal 90 24 64 for on and 80 24 40 for off, checked in midiox.
i tried to modifiy the luacodec:
the relevant port should be the local outputs, not the inputs. right?

tried to change the first button:
{name = "Button 8-1", pattern = "90 24 64 ", x = "enabled*value*1+56"},
{name = "Button 8-2", pattern = "90 71 xx", x = "enabled*value*1+56"},

restarted reason. no change.
the inputs look fine i can play kong with it.
what am i doing wrong with the return midi?

luacodec:
g_bars_display_index = -1
g_current_bar = -1
g_delivered_bar = -1

function remote_init()
init_items()
init_inputs()
init_outputs()
end

function init_items()

local items = {
{name = "Keyboard", input = "keyboard"},
{name = "Button 1-1", input = "noinput", output="value", min=0, max=1},
{name = "Button 1-2", input = "button", output="value"},
{name = "Button 1-3", input = "button", output="value"},
{name = "Button 1-4", input = "button", output="value"},
{name = "Button 1-5", input = "button", output="value"},
{name = "Button 1-6", input = "button", output="value"},
{name = "Button 1-7", input = "button", output="value"},
{name = "Button 1-8", input = "button", output="value"},

{name = "Button 2-1", input = "button", output="value"},
{name = "Button 2-2", input = "button", output="value"},
{name = "Button 2-3", input = "button", output="value"},
{name = "Button 2-4", input = "button", output="value"},
{name = "Button 2-5", input = "button", output="value"},
{name = "Button 2-6", input = "button", output="value"},
{name = "Button 2-7", input = "button", output="value"},
{name = "Button 2-8", input = "button", output="value"},

{name = "Button 3-1", input = "button", output="value"},
{name = "Button 3-2", input = "button", output="value"},
{name = "Button 3-3", input = "button", output="value"},
{name = "Button 3-4", input = "button", output="value"},
{name = "Button 3-5", input = "button", output="value"},
{name = "Button 3-6", input = "button", output="value"},
{name = "Button 3-7", input = "button", output="value"},
{name = "Button 3-8", input = "button", output="value"},

{name = "Button 4-1", input = "button", output="value"},
{name = "Button 4-2", input = "button", output="value"},
{name = "Button 4-3", input = "button", output="value"},
{name = "Button 4-4", input = "button", output="value"},
{name = "Button 4-5", input = "button", output="value"},
{name = "Button 4-6", input = "button", output="value"},
{name = "Button 4-7", input = "button", output="value"},
{name = "Button 4-8", input = "button", output="value"},

{name = "Button 5-1", input = "noinput", output="value", min=0, max=1},
{name = "Button 5-2", input = "noinput", output="value", min=0, max=1},
{name = "Button 5-3", input = "noinput", output="value", min=0, max=1},
{name = "Button 5-4", input = "noinput", output="value", min=0, max=1},
{name = "Button 5-5", input = "button", output="value"},
{name = "Button 5-6", input = "button", output="value"},
{name = "Button 5-7", input = "button", output="value"},
{name = "Button 5-8", input = "button", output="value"},

{name = "Button 6-1", input = "noinput", output="value", min=0, max=1},
{name = "Button 6-2", input = "noinput", output="value", min=0, max=1},
{name = "Button 6-3", input = "noinput", output="value", min=0, max=1},
{name = "Button 6-4", input = "noinput", output="value", min=0, max=1},
{name = "Button 6-5", input = "button", output="value"},
{name = "Button 6-6", input = "button", output="value"},
{name = "Button 6-7", input = "button", output="value"},
{name = "Button 6-8", input = "button", output="value"},

{name = "Button 7-1", input = "noinput", output="value", min=0, max=1},
{name = "Button 7-2", input = "noinput", output="value", min=0, max=1},
{name = "Button 7-3", input = "noinput", output="value", min=0, max=1},
{name = "Button 7-4", input = "noinput", output="value", min=0, max=1},
{name = "Button 7-5", input = "button", output="value"},
{name = "Button 7-6", input = "button", output="value"},
{name = "Button 7-7", input = "button", output="value"},
{name = "Button 7-8", input = "button", output="value"},

{name = "Button 8-1", input = "noinput", output="value", min=0, max=1},
{name = "Button 8-2", input = "noinput", output="value", min=0, max=1},
{name = "Button 8-3", input = "noinput", output="value", min=0, max=1},
{name = "Button 8-4", input = "noinput", output="value", min=0, max=1},
{name = "Button 8-5", input = "button", output="value"},
{name = "Button 8-6", input = "button", output="value"},
{name = "Button 8-7", input = "button", output="value"},
{name = "Button 8-8", input = "button", output="value"},

{name = "Button A", input = "button", output="value"},
{name = "Button B", input = "button", output="value"},
{name = "Button C", input = "button", output="value"},
{name = "Button D", input = "button", output="value"},
{name = "Button E", input = "button", output="value"},
{name = "Button F", input = "button", output="value"},
{name = "Button G", input = "button", output="value"},
{name = "Button H", input = "button", output="value"},
}

table.insert(items, { name="Bars Display", input="noinput", output="text" })
g_bars_display_index = table.getn(items)

remote.define_items(items)
end

function init_inputs()

local inputs = {
{pattern="<100?>? 40 ?<???x>", name="Keyboard", value="x", note="48", velocity="100"},
{pattern="<100?>? 41 ?<???x>", name="Keyboard", value="x", note="49", velocity="100"},
{pattern="<100?>? 42 ?<???x>", name="Keyboard", value="x", note="50", velocity="100"},
{pattern="<100?>? 43 ?<???x>", name="Keyboard", value="x", note="51", velocity="100"},
{pattern="<100?>? 50 ?<???x>", name="Keyboard", value="x", note="44", velocity="100"},
{pattern="<100?>? 51 ?<???x>", name="Keyboard", value="x", note="45", velocity="100"},
{pattern="<100?>? 52 ?<???x>", name="Keyboard", value="x", note="46", velocity="100"},
{pattern="<100?>? 53 ?<???x>", name="Keyboard", value="x", note="47", velocity="100"},
{pattern="<100?>? 60 ?<???x>", name="Keyboard", value="x", note="40", velocity="100"},
{pattern="<100?>? 61 ?<???x>", name="Keyboard", value="x", note="41", velocity="100"},
{pattern="<100?>? 62 ?<???x>", name="Keyboard", value="x", note="42", velocity="100"},
{pattern="<100?>? 63 ?<???x>", name="Keyboard", value="x", note="43", velocity="100"},
{pattern="<100?>? 70 ?<???x>", name="Keyboard", value="x", note="36", velocity="100"},
{pattern="<100?>? 71 ?<???x>", name="Keyboard", value="x", note="37", velocity="100"},
{pattern="<100?>? 72 ?<???x>", name="Keyboard", value="x", note="38", velocity="100"},
{pattern="<100?>? 73 ?<???x>", name="Keyboard", value="x", note="39", velocity="100"},

{pattern="<100?>? 00 ?<???x>", name="Keyboard", value="x", note="48", velocity="100"},
{pattern="<100x>? 01 7F", name="Button 1-2"},
{pattern="<100x>? 02 7F", name="Button 1-3"},
{pattern="<100x>? 03 7F", name="Button 1-4"},
{pattern="<100x>? 04 7F", name="Button 1-5"},
{pattern="<100x>? 05 7F", name="Button 1-6"},
{pattern="<100x>? 06 7F", name="Button 1-7"},
{pattern="<100x>? 07 7F", name="Button 1-8"},

{pattern="<100x>? 10 7F", name="Button 2-1"},
{pattern="<100x>? 11 7F", name="Button 2-2"},
{pattern="<100x>? 12 7F", name="Button 2-3"},
{pattern="<100x>? 13 7F", name="Button 2-4"},
{pattern="<100x>? 14 7F", name="Button 2-5"},
{pattern="<100x>? 15 7F", name="Button 2-6"},
{pattern="<100x>? 16 7F", name="Button 2-7"},
{pattern="<100x>? 17 7F", name="Button 2-8"},

{pattern="<100x>? 20 7F", name="Button 3-1"},
{pattern="<100x>? 21 7F", name="Button 3-2"},
{pattern="<100x>? 22 7F", name="Button 3-3"},
{pattern="<100x>? 23 7F", name="Button 3-4"},
{pattern="<100x>? 24 7F", name="Button 3-5"},
{pattern="<100x>? 25 7F", name="Button 3-6"},
{pattern="<100x>? 26 7F", name="Button 3-7"},
{pattern="<100x>? 27 7F", name="Button 3-8"},

{pattern="<100x>? 30 7F", name="Button 4-1"},
{pattern="<100x>? 31 7F", name="Button 4-2"},
{pattern="<100x>? 32 7F", name="Button 4-3"},
{pattern="<100x>? 33 7F", name="Button 4-4"},
{pattern="<100x>? 34 7F", name="Button 4-5"},
{pattern="<100x>? 35 7F", name="Button 4-6"},
{pattern="<100x>? 36 7F", name="Button 4-7"},
{pattern="<100x>? 37 7F", name="Button 4-8"},

{pattern="<100x>? 44 7F", name="Button 5-5"},
{pattern="<100x>? 45 7F", name="Button 5-6"},
{pattern="<100x>? 46 7F", name="Button 5-7"},
{pattern="<100x>? 47 7F", name="Button 5-8"},

{pattern="<100x>? 54 7F", name="Button 6-5"},
{pattern="<100x>? 55 7F", name="Button 6-6"},
{pattern="<100x>? 56 7F", name="Button 6-7"},
{pattern="<100x>? 57 7F", name="Button 6-8"},

{pattern="<100x>? 64 7F", name="Button 7-5"},
{pattern="<100x>? 65 7F", name="Button 7-6"},
{pattern="<100x>? 66 7F", name="Button 7-7"},
{pattern="<100x>? 67 7F", name="Button 7-8"},

{pattern="<100x>? 74 7F", name="Button 8-5"},
{pattern="<100x>? 75 7F", name="Button 8-6"},
{pattern="<100x>? 76 7F", name="Button 8-7"},
{pattern="<100x>? 77 7F", name="Button 8-8"},

{pattern="<100x>? 08 7F", name="Button A"},
{pattern="<100x>? 18 7F", name="Button B"},
{pattern="<100x>? 28 7F", name="Button C"},
{pattern="<100x>? 38 7F", name="Button D"},
{pattern="<100x>? 48 7F", name="Button E"},
{pattern="<100x>? 58 7F", name="Button F"},
{pattern="<100x>? 68 7F", name="Button G"},
{pattern="<100x>? 78 7F", name="Button H"},
}
remote.define_auto_inputs(inputs)
end

function init_outputs()
local outputs = {
{name = "Button 1-1", pattern = "90 24 x", x = "64"},
{name = "Button 1-2", pattern = "90 01 xx", x = "enabled*value*1+56"},
{name = "Button 1-3", pattern = "90 02 xx", x = "enabled*value*1+56"},
{name = "Button 1-4", pattern = "90 03 xx", x = "enabled*value*1+56"},
{name = "Button 1-5", pattern = "90 04 xx", x = "enabled*value*15"},
{name = "Button 1-6", pattern = "90 05 xx", x = "enabled*value*15"},
{name = "Button 1-7", pattern = "90 06 xx", x = "enabled*value*15"},
{name = "Button 1-8", pattern = "90 07 xx", x = "enabled*value*15"},

{name = "Button 2-1", pattern = "90 10 xx", x = "enabled*value*60"},
{name = "Button 2-2", pattern = "90 11 xx", x = "enabled*value*60"},
{name = "Button 2-3", pattern = "90 12 xx", x = "enabled*value*60"},
{name = "Button 2-4", pattern = "90 13 xx", x = "enabled*value*60"},
{name = "Button 2-5", pattern = "90 14 xx", x = "enabled*value*60"},
{name = "Button 2-6", pattern = "90 15 xx", x = "enabled*value*60"},
{name = "Button 2-7", pattern = "90 16 xx", x = "enabled*value*60"},
{name = "Button 2-8", pattern = "90 17 xx", x = "enabled*value*60"},

{name = "Button 3-1", pattern = "90 20 xx", x = "enabled*value*45"},
{name = "Button 3-2", pattern = "90 21 xx", x = "enabled*value*45"},
{name = "Button 3-3", pattern = "90 22 xx", x = "enabled*value*45"},
{name = "Button 3-4", pattern = "90 23 xx", x = "enabled*value*45"},
{name = "Button 3-5", pattern = "90 24 xx", x = "enabled*value*45"},
{name = "Button 3-6", pattern = "90 25 xx", x = "enabled*value*45"},
{name = "Button 3-7", pattern = "90 26 xx", x = "enabled*value*45"},
{name = "Button 3-8", pattern = "90 27 xx", x = "enabled*value*45"},

{name = "Button 4-1", pattern = "90 30 xx", x = "enabled*value*46"},
{name = "Button 4-2", pattern = "90 31 xx", x = "enabled*value*46"},
{name = "Button 4-3", pattern = "90 32 xx", x = "enabled*value*46"},
{name = "Button 4-4", pattern = "90 33 xx", x = "enabled*value*46"},
{name = "Button 4-5", pattern = "90 34 xx", x = "enabled*value*46"},
{name = "Button 4-6", pattern = "90 35 xx", x = "enabled*value*46"},
{name = "Button 4-7", pattern = "90 36 xx", x = "enabled*value*46"},
{name = "Button 4-8", pattern = "90 37 xx", x = "enabled*value*46"},

{name = "Button 5-1", pattern = "90 40 xx", x = "enabled*value*1+56"},
{name = "Button 5-2", pattern = "90 41 xx", x = "enabled*value*1+56"},
{name = "Button 5-3", pattern = "90 42 xx", x = "enabled*value*1+56"},
{name = "Button 5-4", pattern = "90 43 xx", x = "enabled*value*1+56"},
{name = "Button 5-5", pattern = "90 44 xx", x = "enabled*value*63"},
{name = "Button 5-6", pattern = "90 45 xx", x = "enabled*value*63"},
{name = "Button 5-7", pattern = "90 46 xx", x = "enabled*value*63"},
{name = "Button 5-8", pattern = "90 47 xx", x = "enabled*value*63"},

{name = "Button 6-1", pattern = "90 50 xx", x = "enabled*value*1+56"},
{name = "Button 6-2", pattern = "90 51 xx", x = "enabled*value*1+56"},
{name = "Button 6-3", pattern = "90 52 xx", x = "enabled*value*1+56"},
{name = "Button 6-4", pattern = "90 53 xx", x = "enabled*value*1+56"},
{name = "Button 6-5", pattern = "90 54 xx", x = "enabled*value*63"},
{name = "Button 6-6", pattern = "90 55 xx", x = "enabled*value*63"},
{name = "Button 6-7", pattern = "90 56 xx", x = "enabled*value*63"},
{name = "Button 6-8", pattern = "90 57 xx", x = "enabled*value*63"},

{name = "Button 7-1", pattern = "90 60 xx", x = "enabled*value*1+56"},
{name = "Button 7-2", pattern = "90 61 xx", x = "enabled*value*1+56"},
{name = "Button 7-3", pattern = "90 62 xx", x = "enabled*value*1+56"},
{name = "Button 7-4", pattern = "90 63 xx", x = "enabled*value*1+56"},
{name = "Button 7-5", pattern = "90 64 xx", x = "enabled*value*15"},
{name = "Button 7-6", pattern = "90 65 xx", x = "enabled*value*15"},
{name = "Button 7-7", pattern = "90 66 xx", x = "enabled*value*15"},
{name = "Button 7-8", pattern = "90 67 xx", x = "enabled*value*15"},

{name = "Button 8-1", pattern = "90 24 64 ", x = "enabled*value*1+56"},
{name = "Button 8-2", pattern = "90 71 xx", x = "enabled*value*1+56"},
{name = "Button 8-3", pattern = "90 72 xx", x = "enabled*value*1+56"},
{name = "Button 8-4", pattern = "90 73 xx", x = "enabled*value*1+56"},
{name = "Button 8-5", pattern = "90 74 xx", x = "enabled*value*60"},
{name = "Button 8-6", pattern = "90 75 xx", x = "enabled*value*60"},
{name = "Button 8-7", pattern = "90 76 xx", x = "enabled*value*15+1"},
{name = "Button 8-8", pattern = "90 77 xx", x = "enabled*value*15+1"},

{name = "Button A", pattern = "90 08 xx", x = "enabled*value*63"},
{name = "Button B", pattern = "90 18 xx", x = "enabled*value*63"},
{name = "Button C", pattern = "90 28 xx", x = "enabled*value*63"},
{name = "Button D", pattern = "90 38 xx", x = "enabled*value*56"},
{name = "Button E", pattern = "90 48 xx", x = "enabled*value*15"},
{name = "Button F", pattern = "90 58 xx", x = "enabled*value*63"},
{name = "Button G", pattern = "90 68 xx", x = "enabled*value*15+1"},
{name = "Button H", pattern = "90 78 xx", x = "enabled*value*15+1"},
}
remote.define_auto_outputs(outputs)
end

function remote_deliver_midi()
local ret_events={}
if g_delivered_bar ~= g_current_bar then

if g_current_bar < 1 then table.insert(ret_events, remote.make_midi("B0 68 00")) end
if g_current_bar < 2 then table.insert(ret_events, remote.make_midi("B0 69 00")) end
if g_current_bar < 3 then table.insert(ret_events, remote.make_midi("B0 6A 00")) end
if g_current_bar < 4 then table.insert(ret_events, remote.make_midi("B0 6B 00")) end
if g_current_bar < 5 then table.insert(ret_events, remote.make_midi("B0 6C 00")) end
if g_current_bar < 6 then table.insert(ret_events, remote.make_midi("B0 6D 00")) end
if g_current_bar < 7 then table.insert(ret_events, remote.make_midi("B0 6E 00")) end
if g_current_bar < 8 then table.insert(ret_events, remote.make_midi("B0 6F 00")) end

if g_current_bar > 0 then table.insert(ret_events, remote.make_midi("B0 68 60")) end
if g_current_bar > 1 then table.insert(ret_events, remote.make_midi("B0 69 60")) end
if g_current_bar > 2 then table.insert(ret_events, remote.make_midi("B0 6A 60")) end
if g_current_bar > 3 then table.insert(ret_events, remote.make_midi("B0 6B 60")) end
if g_current_bar > 4 then table.insert(ret_events, remote.make_midi("B0 6C 60")) end
if g_current_bar > 5 then table.insert(ret_events, remote.make_midi("B0 6D 60")) end
if g_current_bar > 6 then table.insert(ret_events, remote.make_midi("B0 6E 60")) end
if g_current_bar > 7 then table.insert(ret_events, remote.make_midi("B0 6F 60")) end
end
g_delivered_bar = g_current_bar
return ret_events
end

function remote_set_state(changed_items)
for kk,item_index in ipairs(changed_items) do
if item_index == g_bars_display_index then
if remote.is_item_enabled(item_index) then
g_current_bar = get_relative_bar(remote.get_item_text_value(item_index))
else
g_current_bar = -1
end
end
end
return false
end

function get_relative_bar(s)
local n=tonumber(s)
n = n - math.floor(n/8)*8
return (n == 0) and 8 or n
end

REMOTEMAP FILE:

Propellerhead Remote Mapping File
File Format Version 1.0.0
Control Surface Manufacturer Novation
Control Surface Model Launchpad Mini MK3
Map Version 1.1.0

Scope Propellerheads Master Keyboard
// Control Surface Item Key Remotable Item Scale Mode
Map Keyboard Keyboard

Scope Propellerheads Reason Document
// Control Surface Item Key Remotable Item Scale Mode

Map Bars Display Bar Position
Map Button 2-1 Rewind
Map Button B Fast Forward
Map Button C Stop
Map Button D Play
Map Button E Record
Map Button F Loop On/Off
Map Button G Target Previous Track
Map Button H Target Next Track
Map Button 8-7 Select Previous Patch

Scope Propellerheads Kong Drum Designer
// Control Surface Item Key Remotable Item Scale Mode

Map Button 5-1 Pad 13 Hit Indication
Map Button 5-2 Pad 14 Hit Indication
Map Button 5-3 Pad 15 Hit Indication
Map Button 5-4 Pad 16 Hit Indication
Map Button 6-1 Pad 9 Hit Indication
Map Button 6-2 Pad 10 Hit Indication
Map Button 6-3 Pad 11 Hit Indication
Map Button 6-4 Pad 12 Hit Indication
Map Button 7-1 Pad 5 Hit Indication
Map Button 7-2 Pad 6 Hit Indication
Map Button 7-3 Pad 7 Hit Indication
Map Button 7-4 Pad 8 Hit Indication
Map Button 8-1 Pad 1 Hit Indication
Map Button 8-2 Pad 2 Hit Indication
Map Button 8-3 Pad 3 Hit Indication
Map Button 8-4 Pad 4 Hit Indication

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

11 Aug 2022

another idea from novation:
duplicate midi sequencer line e.g. from kong.
foward this to midi out
result: pads get lit up when playing back sequencer track.

but: this would mean i'd have to duplicate every single midi track.

been searching quite some time in vain:
could it really be there is no way to loop out ALL midi sequencer tracks also to external midi device?

moreover: what to do with instruments that don't have a sequencer lane and are just being used for live playback of loops like octo rex?

rmtcvolte
Posts: 206
Joined: 15 Nov 2018

11 Aug 2022

me-yourself-and-them wrote:
11 Aug 2022
another idea from novation:
duplicate midi sequencer line e.g. from kong.
foward this to midi out
result: pads get lit up when playing back sequencer track.

but: this would mean i'd have to duplicate every single midi track.

been searching quite some time in vain:
could it really be there is no way to loop out ALL midi sequencer tracks also to external midi device?

moreover: what to do with instruments that don't have a sequencer lane and are just being used for live playback of loops like octo rex?
As long as I know, there is no general midi note out in Reason, Kong is special with the Hit indication items. The way to send out notes is like you described it. By the way you dont need to restard Reason everytime you change the codec, just go to Preferences and disable/enable the device you are working on.

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

12 Aug 2022

thanks @rmtcvolte! already recognized the need the easiest way to reload codec is dis/reenable controller. for use another app to debug midi messages you always need to quit and restart reason.

with the duplicated kong midi track i already achieved lighting of LP mini MK3 pads according to notes played. the "octo rex actual running slot" feature seems definitely to require a new codec, couldn't find any way to achieve the live button push > light LP pad by e.g. cv out. so far only possbile with an according sequencer track.

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

21 Aug 2022

i got pretty further. now kong lights up launchpad mini mk3 buttons when a note is being played in reason, without an extra note track routed to midi out > lp mini.

codec example, just lower left basedrum button and row 1 button 5 for 1 octo rex slot:

Code: Select all

function init_items()
	local items = {
	     -- /< kong input buttons
             {name = "Button 8-1", input = "noinput", output="value", min=0, max=1},
             -- /< dr. octo rex 1 input buttons
             {name = "Button 1-5", input = "noinput", output="value", min=0, max=1},
	}	
	remote.define_items(items)
end
function init_inputs()
	local inputs = {
		-- /< kong input buttons
		{pattern="<100?>? 24 ?<???x>", name="Keyboard", value="x", note="36", velocity="100"},
		-- /< dr. octo rex 1 input buttons
		{pattern="<100?>? 40 ?<???x>", name="Keyboard", value="x", note="64", velocity="100"},
	}
	remote.define_auto_inputs(inputs)
end	
function init_outputs()
	local outputs = {
		-- /< light up the kong pads if pushed in reason
		{name = "Button 5-1", pattern = "90 30 xx", x = "enabled*value"},
		-- /< light up 1st dr. octo rex buttons
		{name = "Button 1-5", pattern = "90 40 7f", x = "enabled*value"},
	}
	remote.define_auto_outputs(outputs)
end		
i can play buttons now on kong and dr. octo rex.
kong buttons light up when a note is played.

hard question?
why won't the 1-5 button assigned to dr. octo rex slot one light up?
i tired many code formats, reassigned other notes to lp through components.novation.com
and added a slot lane.
all in vain. i can choose the octo rex by lp mini. but the active slot button won't light up. why?

rmtcvolte
Posts: 206
Joined: 15 Nov 2018

21 Aug 2022

me-yourself-and-them wrote:
21 Aug 2022
i got pretty further. now kong lights up launchpad mini mk3 buttons when a note is being played in reason, without an extra note track routed to midi out > lp mini.

i can play buttons now on kong and dr. octo rex.
kong buttons light up when a note is played.

hard question?
why won't the 1-5 button assigned to dr. octo rex slot one light up?
i tired many code formats, reassigned other notes to lp through components.novation.com
and added a slot lane.
all in vain. i can choose the octo rex by lp mini. but the active slot button won't light up. why?
I dont get it to work this way, for me the pad in question is light up steady as soon the codec is loaded (I can see the "note on" in MidiOX going out only once at startup). I still believe Reason does not sending out notes other then via MidiOut device. Maybe you have mixed up something as you have the same midi definition twice (as "Keyboard" - "<100?> 24 ?<???x>" and "Button" - "90 30 xx") plus eventually the mapping of "Pad 1 Hit Indication" is still in your mapping file?!
For the OctoRex the only difference I can see is in the pattern deffinition for "Button 1-5" -> "90 40 7f" instead "90 30 xx" for "Button 5-1".
Ever tried to get the session mode running?

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

23 Aug 2022

i'll check as soon as possible. my codec is definitely working without a midi out > LP lane. kong is lighting up when pushed or note played. i'm using loop midi, 4 ports. use the midi in 2 of LP > midi ox as reason mocks when midi-ox and reason try to access midi in 1 LP. midi ox splits the LP pads defined as 1 channel per device (4 octo rec, 1 kong plus transport controls. the lp mini in 1 is assigned fixed to kong, only this way the buttons light up when played. i DOESN'T work when you use a loop midi port....maybe this is also the reason that octo rex doesn't light up when played, right now fixed to loop midi 3-6. i'll send all the files via pm if required.

rmtcvolte
Posts: 206
Joined: 15 Nov 2018

23 Aug 2022

me-yourself-and-them wrote:
23 Aug 2022
i'll check as soon as possible. my codec is definitely working without a midi out > LP lane. kong is lighting up when pushed or note played. i'm using loop midi, 4 ports. use the midi in 2 of LP > midi ox as reason mocks when midi-ox and reason try to access midi in 1 LP. midi ox splits the LP pads defined as 1 channel per device (4 octo rec, 1 kong plus transport controls. the lp mini in 1 is assigned fixed to kong, only this way the buttons light up when played. i DOESN'T work when you use a loop midi port....maybe this is also the reason that octo rex doesn't light up when played, right now fixed to loop midi 3-6. i'll send all the files via pm if required.
Did not check that loop midi is involved in your set up. Will take a look if you like to send me something, maybe with a screenshot of the loopmidi settings, if possible.

Heater
Posts: 894
Joined: 16 Jan 2015

25 Nov 2022

Any update on this? It sounds really promising.

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

26 Nov 2022

yep. got it up and running. the ony thing i couldn't achieve is a setup where i can control several octo rex with button indicating the actual loop running. you definitely need midiox/loopmidi to achieve this - but the back channel only seems to be working when connected to the launchpad - not to loop midi

User avatar
me-yourself-and-them
Posts: 71
Joined: 09 Jan 2022

12 Jul 2023

arrrr...hardware crash. looks like i've lost my 10-20hr programming on the custom codec/remotemap for lp mini mk3. did i send the files to someone here maybe?

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 10 guests