Skip to content

Commit e35abd0

Browse files
committed
add DAW Controller support for various Arturia controllers
MiniLab 3 Keylab Essential KeyLab Essential mk3 KeyLab mkII based on https://github.com/PrzemekBarski/arturia-keylab-essential-mk3-programming-guide Tested on a Arturia MiniLab 3 and KeyLab mkII Keylab Essential and Keylab Essential mk3 is not tested
1 parent e0b6146 commit e35abd0

18 files changed

Lines changed: 3098 additions & 128 deletions

README.md

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,153 @@
1+
# MiniDexed Arturia fork
2+
3+
This is a fork of Minidexed that integrates better with Arturia keyboards.
4+
5+
Maybe someday it will be part of the MiniDexed
6+
7+
## Enabling
8+
9+
This feature can be enabled in the minidexed.ini with:
10+
```
11+
DAWControllerEnabled=1
12+
```
13+
14+
## Features
15+
16+
### Controller Display, Main Encoder
17+
The controller display in DAW mode shows the MiniDexed menu.
18+
19+
With the main encoder you can navigate in the menu.
20+
21+
The Home is the shift+Main click
22+
23+
Supported:
24+
- MiniLab 3 (tested)
25+
- KeyLab mkII (tested)
26+
- Keylab Essential
27+
- Keylab Essential 3
28+
29+
### Energy efficiency
30+
This version uses a little less power so it runs cooler thanks to #3.
31+
32+
### MiniLab 3 features:
33+
34+
#### Encoders
35+
36+
By holding down shift will bring up an overlay menu, where you can see and adjust what the encoders do.
37+
38+
You can use the main encoder to select the current encoding page.
39+
40+
Short pressing the shift will show the actual values.
41+
42+
Holding down the shift will goes back to the normal menu.
43+
44+
This overlay menu is context-aware, it is different if you are in the effect menu, or in a TG menu.
45+
46+
If you are in a TG menu, it only affects the selected TG.
47+
48+
If you are in the main menu, it affects the TGs on the first TG's channel.
49+
50+
- Main Overlay 1 (default)
51+
- Cutoff, Resonance, ReverbSend, None
52+
- PortamentoTime, Program, Volume, MasterVolume
53+
- Faders: ChG 1 Vol, ChG 2 Vol, ChG 3 Vol, ChG 4 Vol
54+
55+
- Effect Overlay
56+
- CompressorEnable, ReverbEnable, ReverbSize, ReverbHighDamp
57+
- ReverbLowDamp, ReverbLowPass, ReverbDiffusion, ReverbLevel
58+
59+
- Main Overlay 2
60+
- Pan1, Pan2, Pan3, Pan4
61+
- Det1, Det2, Det3, Det4
62+
- Faders: TG1 Vol, TG2 Vol, TG3 Vol, TG4 Vol
63+
64+
- Main Overlay 3
65+
- Pan5, Pan6, Pan7, Pan8
66+
- Det5, Det6, Det7, Det8
67+
- Faders: TG5 Vol, TG6 Vol, TG7 Vol, TG8 Vol
68+
69+
- TG Overlay 1
70+
- Cutoff, Resonance, ReverbSend, MasterTune
71+
- PortamentoTime, Program, Volume, Pan
72+
- Faders: Cutoff, Resonance, ReverbSend, Volume
73+
74+
- TG Overlay 2
75+
- MIDIChannel, None, None, PitchBendRange
76+
- PortamentoGlissando, MonoMode, None, PitchBendStep
77+
78+
- TG Overlay 3
79+
- MWRange, MWPitch, FCRange, FCPitch
80+
- MWEGBias, MWAmplitude, FCEGBias, FCAmplitude
81+
82+
- TG Overlay 4
83+
- BCRange, BCPitch, ATRange, ATPitch
84+
- BCEGBias, BCAmplitude, ATEGBias, ATAmplitude
85+
86+
- Voice Overlay 1
87+
- ALGORITHM, FEEDBACK, TRANSPOSE, None,
88+
- None, None, None, None
89+
90+
- Voice Overlay 2
91+
- PITCH_EG_R1, PITCH_EG_R2, PITCH_EG_R3, PITCH_EG_R4
92+
- PITCH_EG_L1, PITCH_EG_L2, PITCH_EG_L3, PITCH_EG_L4
93+
- Faders: PITCH_EG_L1, PITCH_EG_L2, PITCH_EG_L3, PITCH_EG_L4
94+
95+
- Voice Overlay 3
96+
- OSC_KEY_SYNC, LFO_SPEED, LFO_DELAY, LFO_PITCH_MOD_DEP
97+
- LFO_SYNC, LFO_WAVE, LFO_PITCH_MOD_SENS, LFO_AMP_MOD_DEP
98+
99+
- OP Overlay 1
100+
- OP_OUTPUT_LEV, OP_FREQ_COARSE, OP_FREQ_FINE, OP_OSC_DETUNE,
101+
- OP_OSC_MODE, OP_ENABLE, None, None
102+
103+
- OP Overlay 2
104+
- OP_EG_R1, OP_EG_R2, P_EG_R3, OP_EG_R4
105+
- OP_EG_L1, OP_EG_L2, OP_EG_L3, OP_EG_L4,
106+
- Faders: OP_EG_L1, OP_EG_L2, OP_EG_L3, OP_EG_L4,
107+
108+
- OP Overlay 3
109+
- OP_LEV_SCL_BRK_PT, OP_SCL_LEFT_DEPTH, OP_SCL_RGHT_DEPTH, OP_AMP_MOD_SENS
110+
- OP_OSC_RATE_SCALE, OP_SCL_LEFT_CURVE, OP_SCL_RGHT_CURVE, OP_KEY_VEL_SENS
111+
112+
In the Main overlay you can reach the TG and voice overlays also.
113+
114+
In the voice overlay there is a page for every OP control also, with the 6 operator and with an encoder which sets all.
115+
116+
#### Pads on Bank A
117+
- Mono/Poly mode
118+
- Portamento enable/disable, hard press to enable/disable Portamento Glissando
119+
- Sostenuto
120+
- Sustain
121+
- All Sound Off
122+
- Hold2
123+
- None
124+
- Channel AfterTouch Pad
125+
126+
#### Pads on Bank B
127+
- Short press a TG will enable/disable that TG
128+
- Long press will enable/disable all the TG on the TG's channel
129+
- Hard press will enable only that TG (it uses the pad's AT messsages)
130+
131+
132+
### KeyLab mkII features
133+
134+
#### Faders
135+
- The faders 1-8 adjust the volume of the MIDI channels of the current performance
136+
- The fader 9 adjusts the master volume.
137+
138+
#### DAW buttons
139+
- Mono/Poly mode
140+
- Portamento enable/disable, hard press to enable/disable Portamento Glissando
141+
- Sostenuto
142+
- Sustain
143+
- Hold2
144+
145+
#### Track select buttons
146+
- Short press a TG will enable/disable that TG
147+
- Long press will enable only that TG
148+
149+
150+
1151
# MiniDexed ![Github Build Status](https://github.com/probonopd/MiniDexed/actions/workflows/build.yml/badge.svg)
2152

3153
![minidexed](https://user-images.githubusercontent.com/2480569/161813414-bb156a1c-efec-44c0-802a-8926412a08e0.jpg)

src/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ OBJS = main.o kernel.o minidexed.o config.o userinterface.o uimenu.o \
1111
sysexfileloader.o performanceconfig.o perftimer.o \
1212
effect_platervbstereo.o uibuttons.o midipin.o \
1313
arm_float_to_q23.o arm_scale_zip_f32.o \
14-
net/ftpdaemon.o net/ftpworker.o net/applemidi.o net/udpmidi.o net/mdnspublisher.o udpmididevice.o
14+
net/ftpdaemon.o net/ftpworker.o net/applemidi.o net/udpmidi.o net/mdnspublisher.o udpmididevice.o \
15+
dawcontroller.o
1516

1617
OPTIMIZE = -O3
1718

src/common.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#ifndef _common_h
33
#define _common_h
44

5+
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))
6+
57
inline long maplong(long x, long in_min, long in_max, long out_min, long out_max) {
68
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
79
}
@@ -16,6 +18,12 @@ inline float32_t mapfloat(int val, int in_min, int in_max, float32_t out_min, fl
1618
return (val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
1719
}
1820

21+
inline long mapfloatr(int val, int in_min, int in_max, float32_t out_min, float32_t out_max)
22+
{
23+
return lround((val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min);
24+
}
25+
26+
1927
#define constrain(amt, low, high) ({ \
2028
__typeof__(amt) _amt = (amt); \
2129
__typeof__(low) _low = (low); \

src/config.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,9 @@ void CConfig::Load (void)
205205
m_MIDIButtonActionBankDown = m_Properties.GetString ("MIDIButtonActionBankDown", "");
206206
m_MIDIButtonActionTGUp = m_Properties.GetString ("MIDIButtonActionTGUp", "");
207207
m_MIDIButtonActionTGDown = m_Properties.GetString ("MIDIButtonActionTGDown", "");
208-
208+
209+
m_bDAWControllerEnabled = m_Properties.GetNumber ("DAWControllerEnabled", 0) != 0;
210+
209211
m_bEncoderEnabled = m_Properties.GetNumber ("EncoderEnabled", 0) != 0;
210212
m_nEncoderPinClock = m_Properties.GetNumber ("EncoderPinClock", 10);
211213
m_nEncoderPinData = m_Properties.GetNumber ("EncoderPinData", 9);
@@ -777,6 +779,11 @@ const char *CConfig::GetMIDIButtonActionTGDown (void) const
777779
return m_MIDIButtonActionTGDown.c_str();
778780
}
779781

782+
bool CConfig::GetDAWControllerEnabled (void) const
783+
{
784+
return m_bDAWControllerEnabled;
785+
}
786+
780787
bool CConfig::GetEncoderEnabled (void) const
781788
{
782789
return m_bEncoderEnabled;

src/config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ class CConfig // Configuration for MiniDexed
242242
const char *GetMIDIButtonActionTGUp (void) const;
243243
const char *GetMIDIButtonActionTGDown (void) const;
244244

245+
bool GetDAWControllerEnabled (void) const;
246+
245247
// KY-040 Rotary Encoder
246248
// GPIO pin numbers are chip numbers, not header positions
247249
bool GetEncoderEnabled (void) const;
@@ -389,6 +391,8 @@ class CConfig // Configuration for MiniDexed
389391
unsigned m_nMIDIButtonTGUp;
390392
unsigned m_nMIDIButtonTGDown;
391393

394+
bool m_bDAWControllerEnabled;
395+
392396
bool m_bEncoderEnabled;
393397
unsigned m_nEncoderPinClock;
394398
unsigned m_nEncoderPinData;

0 commit comments

Comments
 (0)