Jump to content

Announcement of XMidiCtrl - Version 1.00


Recommended Posts

It is with great joy that I’m announcing the release of XMidiCtrl Version 1.00!


I started this project around one year ago. The initial commit was on the 4th May 2021 and I’m honestly rather proud how well it turned out. Since the release of the first version on 1st November 2021 I have received many nice messages from people all around the world.

Within the last few months, the plugin evolved even more, thanks to the many suggestions and ideas I received from you. Together we succeeded to enable support of various MIDI devices and not just the Behringer X-Touch Mini. The release of the Hot Start Challenger 650 was another milestone in the young history of XMidiCtrl. Thanks to the great help of Graeme from Reflected Reality Simulations, I was able to offer support for this amazing aircraft from day one.

Recently I did some major refactoring and added some ideas I had for a long time. With all the work done and some extensive testing from quite a few people, I’m confident to label the current version as 1.00. I hope this will be a clear sign to new users, that we are talking about a stable and feature complete plugin. Development will not stop here, of course! But all the initial ideas I had are finally implemented.

Okay, let’s have a look at the new features:


Support for all MIDI message types

In order to support all kind of MIDI devices, it was necessary to implement support for all MIDI message types. Initially the plugin was able to send and receive Control Change messages, only. With the new version of can send and receive:

  • Control Change
  • Note on/off
  • Pitch Bend
  • Program Change


New logging system

I was never happy with the logging system. It was still the initial implementation from the first prototype. I wanted an improved system which shows the user exactly the information she/he needs to see without the need to search an extensive log file.

First of all, there are no log levels anymore to choose from in the settings window. You can enable a debug mode if required, but otherwise all warnings and info messages are being logged. There are not many of them anyway and most get raised when loading an aircraft profile.



In addition, there is a new tab page in the profile window. It shows you all errors and warnings for the current aircraft profile:



When you open the new messages window and change to the MIDI Message tab page, you will see quite a few changes, as well:



As you can see, I added some icons instead of text. Most icons provide a tooltip with additional information. This allows you to see all mappings and log messages related a specific MIDI message. However, all messages are still logged to the common log file, if you prefer to monitor the plugin this way.

Log entries related to a MIDI message:



Mapping used for a MIDI message:



Enhanced Mappings

I added some additional mapping parameters to allow more advanced mappings. Most notable additions are:

Encoders – value_min and value_max

Allows you to specify minimum and maximum values for the mapping.


{ ch = 11, cc = 8, type = "enc", dataref = "AirbusFBW/XPDRPower", modifier_up = 1, modifier_down = -1, value_min = 0, value_max = 4 }

Dataref support for Push&Pull
So far it was only possible to specify commands for push and pull. With this version you can also modify Datarefs directly. It’s even possible to mix commands and Datarefs, such as have a push command and modify a Dataref for the pull event.


{ ch = 11, cc = 9,  type = "pnp", dataref_push = "AirbusFBW/BaroStdCapt", values_push = ['0', '1'], dataref_pull = "AirbusFBW/BaroUnitCapt", values_pull = ['0', '1'] }
{ ch = 11, cc = 9,  type = "pnp", command_push = "AirbusFBW/Toggle_BaroStdCapt", dataref_pull = "AirbusFBW/BaroUnitCapt", values_pull = ['0', '1'] }



This is one of my most favourite additions. Labels allow you to display display a text when a mapping event takes place. Lets assume you have a mapping to change the transponder mode using a knob on your MIDI device. The mapping would probably look similar to this one:

{ ch = 11, cc = 8, type = "enc", label = "xpdr", dataref = "AirbusFBW/XPDRPower", modifier_up = 1, modifier_down = -1, value_min = 0, value_max = 4 }

That will work rather nicely, but often the transponder mode knob is between the pilot seats. If you want to check the current setting you must look down and that annoyed me. In order to display labels, you have to define the label in the aircraft profile:

text = "Transponder Mode:"
values = [
  { value = "0", text = "STBY" },
  { value = "1", text = "ALT RPTG OFF" },
  { value = "2", text = "XPNDR" },
  { value = "3", text = "TA ONLY" },
  { value = "4", text = "TA/RA" }

In this case I created a new label with the id xpdr. In addition, I specified a text to be displayed each time the mapping gets executed and some labels for the different values. Finally, you have to bind the label to your mapping:

{ ch = 11, cc = 8, type = "enc", label = "xpdr", dataref = "AirbusFBW/XPDRPower", modifier_up = 1, modifier_down = -1, value_min = 0, value_max = 4 }

Whenever you change the transponder mode using the MIDI device, the label for current value will be displayed. If no label value has been defined, the Dataref value will be shown.


The new settings dialog allows you to modify the position where the label text will be displayed:



Init Mappings

This new mapping option allows you to send some MIDI messages to the device just after the aircraft has been loaded. It can be useful when using the Behringer X-Touch Mini to initialise the behaviour or the encoder lights.


name       = "Behringer X-Touch Mini"
port_in    = 0
port_out   = 1
mapping_init = [
# Encoder Lights
# 0 = Single
# 1 = Pan
# 2 = Fan
# 3 = Spread
# 4 = Trim
  { ch = 1, cc = 1, velocity = 1 },
  { ch = 1, cc = 2, velocity = 2 },
  { ch = 1, cc = 3, velocity = 3 },
  { ch = 1, cc = 4, velocity = 4 },
  { ch = 1, cc = 5, velocity = 4 },
  { ch = 1, cc = 6, velocity = 3 },
  { ch = 1, cc = 7, velocity = 2 },
  { ch = 1, cc = 8, velocity = 1 }


New Examples

The new version comes with some additional example mappings:

  • Updated version for the ToLiss A321
  • iniBuilds A310
  • Felis Boeing 747-200


I hope you enjoy the new version as much as I do and please let me know if you have any questions.


Edited by VirtualCPT
  • Like 2
Link to comment
Share on other sites

  • 2 months later...

Thanks for developing the fantastic plugin xmidictrl .
I'm using Loupedeck, and in general it works very well.
However, there is one difficulty when mapping midi commands.

If I want to Command Mapping the N1 button, I have to give it a Velocity value of 127, a Delay of 150ms for the button animation, and a Velocity value of 0 for the button to pop out again.

If command mapping is done with only the Velocity value of 127, The button is pressed continue.
I can check the pressed state in the Dataref tool as well.

For Loupedeck users, would be nice to be able to automatically add a velocity value of 0 either through a global setting or as a new mode value.

Thank you.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...