mcallegari / qlcplus

Q Light Controller Plus (QLC+) is a free and cross-platform software to control DMX or analog lighting systems like moving heads, dimmers, scanners etc. This project is a fork of the great QLC project written by Heikki Junnila that aims to continue the QLC development and to introduce new features.
Apache License 2.0
921 stars 349 forks source link

inputprofiles: Adding Worlde Easypad.12 MIDI pad #1520

Closed cmuellner closed 4 months ago

cmuellner commented 5 months ago

The Worlde Easypad.12 is a relatively cheap MIDI pad, that can be used as MIDI input. All controls that standard MIDI messages are supported here.

However, there are a few missing features:

I created this profile six years ago and forgot about it. When I recently stumbled over the pad, I wanted to add support but found the old profile in my .qlcplus folder. Enough reason to create a PR and see if it will be accepted.

coveralls commented 5 months ago

Coverage Status

coverage: 31.994%. remained the same when pulling 8601d3fed5f57aa1d907e59b75a9fdab60d930a3 on cmuellner:worlde-easypad-12 into f1427cad37821936cc0e1a81e88bed4b9219e2b0 on mcallegari:master.

yestalgia commented 5 months ago

This controller is wild lol. This is from their docs at https://www.swamp.net.au/images/otherimages/manuals/EASYPAD_USER_MANUAL.pdf image

Very odd.

cmuellner commented 5 months ago

Yeah, the manual is a bit... But I don't care what's written in the manual, as long as the device serves my use-case.

FWIW, I ran aseqdump to dump the SYSEX commands.

Slider:

Bank button:

I looked into the QLC+ and as far as I understood, there is not much support for SYSEX commands. However, when looking at the sent messages, it is obvious how mapping the slider and bank button to elements in the virtual console could be done. The issue here is, that having device-specific code in QLC+ does not make sense. But having generic SYSEX support that can be utilized by the .qxi files sounds like quite some work (e.g. this could be done by defining a message mask and a conversion method to extract the input value).

My use case is to control the lights in a theater and play audio effects. At the moment I have an external 6-channel DMX mixer for cross-fading (stepping through the cue list). The buttons of the pad are used for the audio effects. If the fader of this device could be used to control a slider on the virtual console, I could leave the 6-channel DMX mixer in the box.

mcallegari commented 5 months ago

@cmuellner thanks for the PR and your analisys. I am currently working on the topic raised in #1514 and trying to find a generic solution for devices with different needs. I might commit something more later today. SysEx is indeed supported by the MIDI plugin when it sends initialization messages. See https://github.com/mcallegari/qlcplus/blob/master/plugins/midi/src/common/midiplugin.cpp#L309

In the meantime I purchased a couple of these Worlde controllers to be able to make tests myself. The more QLC+ is flexible, the better. I'll keep you posted on the progress

cmuellner commented 5 months ago

@cmuellner thanks for the PR and your analisys. I am currently working on the topic raised in #1514 and trying to find a generic solution for devices with different needs. I might commit something more later today. SysEx is indeed supported by the MIDI plugin when it sends initialization messages. See https://github.com/mcallegari/qlcplus/blob/master/plugins/midi/src/common/midiplugin.cpp#L309

I've seen this, but this is the other direction (sending a custom message to the device and not receiving a SYSEX message from the device that will be further processed).

I could imagine to have SYSEX messages supported like this in the qxi:

 <Channel Number="SYSEX">
  <Name>Fader 1</Name>
  <Type>Slider</Type>
  <SysexMask>FF FF FF FF FF FF 00 FF</SysexMask>
  <SysexVal>F0 7F 7F 04 01 00 00 F7</SysexVal>
  <ExtractionType>SingleByte</ExtractionType>
  <ExtractionTypeArgs>6</ExtractionTypeArg>
 </Channel>

So whenever a SYSEX message is received the channel description in the qxi will be probed for:

This allows keeping the device-specific part in the qxi, while being extendable for other value extractors.

In the meantime I purchased a couple of these Worlde controllers to be able to make tests myself. The more QLC+ is flexible, the better. I'll keep you posted on the progress

Sounds good! Let me know if I can help.

At this point, I am curious if the channel numbers are equal on all devices on the market.

Independent of the SYSEX topic, I would be happy if the device support would be accepted with a slightly reduced feature set (i.e., what is covered in the PR).

mcallegari commented 4 months ago

@cmuellner merged, thanks. Please keep in mind that docs are not bundled anymore with QLC+. To add a supported device you need to submit a PR to the documentation repository, which is in sync with https://docs.qlcplus.org/v4

cmuellner commented 4 months ago

Ok, thanks for merging. I'll create the doc PR later today or tomorrow.

cmuellner commented 4 months ago

I looked at the docs repo, and there is no list of supported Midi devices. There is just a page describing Midi profiles (https://docs.qlcplus.org/v4/plugins/midi generated from pages/09.plugins/06.midi/default.v4.md). Since there are no changes to the Midi profiles (we just added support for a new device), no changes in the docs are needed.

mcallegari commented 4 months ago

Hey @cmuellner today I just received my easypad 12. In omni mode I can receive all the pads+buttons+fader as control change no issue at all. The bank button is the only one that doesn't send anything. Perhaps they changed the firmware and now it's much more standardized? I saw there might be firmware updates and configuration tools in their website. https://www.worlde.com.cn/list_17/

cmuellner commented 4 months ago

Good to know! I currently don't have it at home, but I will get my hands on it again later this week and try to update the FW.

Are the channel numbers the same odd values (e.g. 37031 for Pad 1)?

mcallegari commented 4 months ago

Yes, everything seems to be same as your mapping. I just added the XY fader