Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add DAW Controller support for various Arturia controllers #743

Draft
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

soyersoyer
Copy link
Contributor

@soyersoyer soyersoyer commented Nov 5, 2024

Some Arturia keyboards have a Display and this can be used to display the menu.
I also added support for relative encoders, which sends 61 62 63 for decrement and 66, 67, 68 for increment.

With this config the MiniDexed can be controlled well with MiniLab3's Main Knob and Display in DAW mode:

DAWControllerEnabled=1

The Home is the shift+Main click

Keylab Essential, Keylab Essential 3, KeyLab mkII work also

Copy link

github-actions bot commented Nov 5, 2024

Build for testing:
MiniDexed_2024-11-05-1ad2394
Use at your own risk.

@probonopd
Copy link
Owner

Thank you very much for this contribution @soyersoyer.

Unfortunately I don't have the matching hardware to test this with, but I am sure many users will find this extremely useful.

Semi off topic: Do you know any good/straightforward documentation how the display and encoder on the Keystep communicates with the host over USB? It just so happens that recently I was thinking about building something the other way around (unrelated to MiniDexed), a simple microcontroller + display + encoder combination that does what a Keystep can do (e.g., to browse presets of the free Analog Lab Play), but without needing an actual Keystep.

@diyelectromusic
Copy link
Collaborator

Unfortunately I don't have the matching hardware to test this with, but I am sure many users will find this extremely useful.

Well users of this specific MIDI controller maybe, but I'm really not sure about hardcoding support for just one vendor's device in MiniDexed... In that SysEx message, 0x00, 0x20, 0x6B is the Arturia SysEx Vendor ID - right? It's a little hard to tell as I didn't seem to be able to find any mention of the MIDI implementation of Arturia devices from the manufacturer themself. Do you have a link?

If we were to go down this route, then I think we'd have to have some way of querying a connected device and mapping MiniDexed features to the features of the device itself rather than hard-code in specific SysEx messages in my view.

Do we know what other controllers support displays and how they do it?

@probonopd you weren't keen on me adding bespoke SysEx to MiniDexed to support this kind of thing between MiniDexeds, so I'm a little surprised you seem quite happy to be considering adding bespoke vendor MIDI messages other than Yamaha...?

Kevin

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Nov 6, 2024

how the display and encoder on the Keystep communicates with the host over USB?

Do you think KeyLab? KeyStep doesn't have a display. In the MiniLab 3 there is an 'Arturia' program for Analog Lab, but I don't know how it communicates. Probably after an initial model query, the main Encoder sends relative CC-s, the other encoders send absolute CCs, the Analog lab sets the encoder values on preset change and updates the display with sysex. If you think, I can capture it.

For the DAW mode, I found this:
https://github.com/PrzemekBarski/arturia-keylab-essential-mk3-programming-guide

hardcoding support for just one vendor's device in MiniDexed...

This is a very popular controller, so I think it might be worth adding.

Additional vendors may be added later.

In that SysEx message, 0x00, 0x20, 0x6B is the Arturia SysEx Vendor ID - right?

Yes

Do you have a link?

From Arturia, No.
I found the link above, and some scripts like these:
https://github.com/gluon/AbletonLive11_MIDIRemoteScripts/blob/main/MiniLab_3/midi.py
https://github.com/bitwig/bitwig-extensions/blob/api-18/src/main/java/com/bitwig/extensions/controllers/arturia/minilab3/SysExHandler.java

We can send generic device inquiry with
F0 7E 7F 06 01 F7
So in theory we can match the model, but we don't have a good spec or access to devices, so we'll probably limit the users by only enabling features for certain models without them being able to control the features.

You are right, the DAWDisplayEnabled config option is too broad and should enable some auto-detection mode.
So I think for this we should use the DAWDisplayArturiaEnabled=1 or DAWDisplay=arturia option.

@soyersoyer soyersoyer force-pushed the dawdisplay branch 2 times, most recently from 787cbe1 to 0211e16 Compare November 7, 2024 13:17
Copy link

github-actions bot commented Nov 7, 2024

Build for testing:
MiniDexed_2024-11-07-361a5ce
Use at your own risk.

@omersiar
Copy link

omersiar commented Nov 8, 2024

@soyersoyer You beat me to it while planning to do the same. It works with my MiniLab3 (firmware 1.1.1). The only issue is the Dumping MIDI to console which seems not reliable.

Also you don't configure the any of the available sliders, knobs to actual functions like Pan, Volume etc. Let me take a look.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Nov 8, 2024

I refined it a bit. Now it does a sysex inquiry and only sends sysex if it is MiniLab3 or KeyLab 3 Essential. Does this fix your MIDI issue?
Do you know what is the preferred layout for the sliders and knobs? And how to set them up?

Copy link

github-actions bot commented Nov 8, 2024

Build for testing:
MiniDexed_2024-11-08-2fa8b3a
Use at your own risk.

Copy link

github-actions bot commented Nov 8, 2024

Build for testing:
MiniDexed_2024-11-08-5eb53ac
Use at your own risk.

Copy link

github-actions bot commented Nov 8, 2024

Build for testing:
MiniDexed_2024-11-08-74ef13c
Use at your own risk.

Copy link

github-actions bot commented Nov 8, 2024

Build for testing:
MiniDexed_2024-11-08-8601f20
Use at your own risk.

@soyersoyer soyersoyer marked this pull request as draft November 10, 2024 15:10
@omersiar
Copy link

Screenshot 2024-11-10 213302
I currently use like this

And how to set them up?
Pad RGB can be controlled also you can assign what knobs do and how to represent them.
https://github.com/mhugo/sysex
https://gist.github.com/Janiczek/04a87c2534b9d1435a1d8159c742d260

@soyersoyer
Copy link
Contributor Author

How should they work? Should they send CC-s to channel 1?

Copy link

Build for testing:
MiniDexed_2024-11-11-cff7fd1
Use at your own risk.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Nov 11, 2024

Now, it maps the encoders. Also updates the encoders values at performance load from TG0.
The order is not the same as you suggested yet.
Isn't the volume better on fader?
I'm a bit unsure about which TG it should set and where to get the values ​​from.

Unfortunately the pads cannot be configured to send CC-s in DAW mode, they send notes only on channel 10.

What I want also:

  • If a new value appears from MIDI CC, it would be good to display it for a little time.
  • Remap the pad notes to MIDI CC-s.
  • Map the MIDI CC buttons automatically.

@soyersoyer soyersoyer changed the title Add DAW Display support for newer Arturia keyboards Add DAW Controller support for newer Arturia keyboards Nov 11, 2024
Copy link

Build for testing:
MiniDexed_2024-11-11-9c2a1bb
Use at your own risk.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Nov 12, 2024

I think the encoders should set the parameters based on the menu, so if the display is on the TG1, it should set the TG1 parameters, if on the performance, it should set all TG-s parameters, if it is on the effects it should set the effect parameters. I will try to make this later on a different branch.

Copy link

Build for testing:
MiniDexed_2024-11-12-453f37e
Use at your own risk.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Dec 29, 2024

News:

  • Rebased on the latest main
  • Use the latest Synth_Dexed (#13)

Copy link

Build for testing:
MiniDexed_2024-12-29-caa656d
Use at your own risk.

@probonopd
Copy link
Owner

Different question; the display of my pirate audio hat now shows "Minidexed" and the build number. Is this a testing setting? Can I Set a parameter to see the minidexed menu as usual instead?

That should show up only during boot time. Where and when do you see it?

@GertSchepens
Copy link

PXL_20241229_215818196 MP

I only ever see the version on my pirate display. The output and buttons work, I'm playing sounds, everything is as expected, except the screen only ever shows the version. Whereas with the same config and the vanilla version, it showed the menu.

On the newest build.

Absolutely loving the arrows, the _ when at the end, and the text. Very elegant. Great update!!

I'm enjoying pressing shift to see what the knob values are.

I'm not so sure I love the by default showing the list of what does what. It looks very busy and jumbled. Though I get it's a lot of info and a very small screen. Do we really need that inélégant reminder of what's what?
And definitely. When I'm trying to change things in tg1, it reverts the text too soon.

Slightly related. I'm still thinking I'd enjoy the behaviour to be context sensitive to where in the menu I am.. on the root, I guess info is better than just showing "TG1" all the time. But when I'm in TG2 already, I'm doing something there and I'd prefer the behaviour and inputs to support what I'm doing in that menu. I'm probably there to change things in that TG, so I'd prefer seeing that menu instead of the root info; and the inputs to change what I see on my screen and not all active TGs. (Instead of for example changing all voices of all active TGs.) When on the root, it does make sense to change all active ones.

@GertSchepens
Copy link

GertSchepens commented Dec 29, 2024

After rereading the latest posts, I see there is context aware stuff 🎉 Sorry for missing that. Poking through a bit more.

However, the letter salad gets really heavy in the effects part; and while efficient, I was kinda surprised to be able to edit all in the first level effects menu.
I guess it's a challenge between expert accessibility to settings and simple UX.
I do enjoy that the rotator popup always clearly shows what's being edited, and that gave me a clear idea of what's happening even without that extra overview.

That said. Effects rotator 1 says compress, while 2 doesn't say Reverb, it confusingly says enable instead.

(Not editing the previous post to not risk messing up the photo)

Update.
Whow!! I absolutely adore playing with the OP settings by twiddling the nobs!! Wonderful for exploring the sounds!!!
And I definitely enjoy being able to see what values things are on, while I'm there, maybe more than anything else.

A thought on on/off selectors.. right now it looks like on is 90+ and below, off. I think I'd enjoy the choices to be spread over the range. (Kinda 100/options) ie 2 options to change around 50; 3 around 33, .. most do that but the binaries don't seem to.

Update.
It feels like it'd be cool if, when editing a voice, pad 1 to 6 would open OP1-6 for editing. It would tremendously speed things up, it seems..

And of course, something more to do for the sliders too, while we're at it. Though they definitely don't enable easy stable settings like the knobs do.

Fun fun

@probonopd
Copy link
Owner

@GertSchepens what do you see on your RPi screen after booting with the normal firmware (not the one from this PR for Arturia controllers), when no USB controller is connected to it at all?

Copy link

Build for testing:
MiniDexed_2024-12-30-119c42f
Use at your own risk.

Copy link

Build for testing:
MiniDexed_2024-12-30-2dac620
Use at your own risk.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Dec 30, 2024

Absolutely loving the arrows, the _ when at the end, and the text. Very elegant.

This is the merit of Arturia, it's the only way to set it up :)
It will work similarly to the arpeggiator, where it shows at the bottom where you are in the menu, but I haven't decided yet how I will query the length of the menu.

I guess it's a challenge between expert accessibility to settings and simple UX.

I'm trying to put the encoders on as few pages as possible, maybe this is better than scattering them by type.

A thought on on/off selectors.. right now it looks like on is 90+ and below, off. I think I'd enjoy the choices to be spread over the range.

I'll check it.

It feels like it'd be cool if, when editing a voice, pad 1 to 6 would open OP1-6 for editing. It would tremendously speed things up, it seems..

That's a good idea, it can be solved.

And of course, something more to do for the sliders too, while we're at it.

Is there a better idea than the volume of the first 4 active MIDI channels?:)
The first 4 OP Output levels?

What I also thought about was that there could be encoder pages where there are individual values ​​for the Operators, e.g. 6 output levels, or 6 detunes, etc.

News:

  • shift button changes between the encoder display and the menu display,
  • the menu display works as before
  • you can change the encoder pages with the main knob, it's more convenient and hopefully more understandable
  • added all ModWheel/FootController/AfterTouch/BreatController controls
  • Handle MenuEventPressAndStepDown/MenuEventPressAndStepUp as the KY040 encoder (the encoder display can't work with it yet)
  • Renamed Reverb encoders.

@soyersoyer
Copy link
Contributor Author

News:

  • Long press shift to switch between menu display and the encoder/values displays
  • short press of shift switches between encoder display and values display

Copy link

Build for testing:
MiniDexed_2024-12-30-20e906a
Use at your own risk.

@probonopd
Copy link
Owner

At some point I'm going to need a proper MiniLab 3 👍

Copy link

Build for testing:
MiniDexed_2024-12-30-4c6c830
Use at your own risk.

@soyersoyer
Copy link
Contributor Author

soyersoyer commented Dec 30, 2024

News:

  • the on/off encoder center point is now 64
  • the encoders are aware of the TG menu, so only TG1 values will be set in the TG1 Menu
  • the main menu encoders use all enabled TGs, which channel is the same as the first active TG channel
  • more encoder pages, each OP parameter has a separate page with the 6 OPs and one encoder that sets all the OPs.

I miss the All TG menu a little bit now. But if there is a Unison mode, I don't think it will.

@soyersoyer
Copy link
Contributor Author

News:

  • Channel, Volume, Portamento Glissando, Poly/Mono added to encoder pages.

Copy link

Build for testing:
MiniDexed_2024-12-31-88edbbe
Use at your own risk.

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
Copy link

Build for testing:
MiniDexed_2024-12-31-ef9b820
Use at your own risk.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants