Opening and closing MIDI ports

Hi! I’m a relatively new to this great software, and although I’ve been able to make most of my stuff working with BMT here’s something I cannot get working no matter what, so I’m not sure if it’s possible at all:
I have a MIDI controller (Arturia) with pads and encoders that I use in my DAW. Now, I’d also like to make it working system wide using BMT so it sends shortcuts and stuff. Thing is, the controller can’t be used simultaneously in the DAW and with Bome and that’s understandable - if the port is open in BMT the DAW can’t use it. So the logical thing I thought was to make a preset where Artiria port is open, make needed translators there so they work system wide. And then make two translators in the global preset that deactivates Arturia preset (thus closing the port) once the DAW is in focus and activates it ones it’s not in focus. In theory this should work but in reality it doesn’t. Either the DAW starts too fast so the port doesn’t have time to get closed, or it’s something else - upon startup the DAW sees the port is still open and can’t use it.

I was wondering if there’s a proper way to close certain ports in BMT once some app starts so it can be used within the app?

Hi and welcome to the Bome community!

The attached project file should give you an idea on what is needed.

As you have discovered, applications and devices cannot share MIDI ports on the Windows platform. For this reason, Bome MIDI Translator Pro (MT Pro) has Virtual MIDI Ports. You can have up to 9 input and 9 output virtual ports. This is adjusted in the settings menu of Bome MIDI Translator Pro. I believe when you install it, it defaults to 3.

In this case, I created a static route from my MIDI controller to the application for MIDI thru messages. The application should always be focused on the virtual MIDI port instead of your actual controller.

image

Notice that I have given my devices aliases. Aliases are a way you can assign your own name (internal to MT Pro) so they make sense to you and also so that you can quickly re-assign to other devices if your physical port names change.

Here is how I have my aliases assigned.

image

You can learn more about aliases from this tutorial.

External to MT Pro, the virtual ports can have either short names or long names which are exposed to your other applications or devices. This can be set up in setting. By default, names are set to short names. You can get to this screen by the View Menu, then Settings, then Virtual MIDI Ports.

image

Now to the attached project file I have 3 presets as follows.

Preset Management - This preset controls other presets and I have it always enabled. See the second box ‘Ignore for Next/Preset …’

image

Key and Mouse - This preset when enabled will disable the MIDI route and still allow for translators for outgoing keystrokes or mouse actions.

MIDI - This preset when enabled will enable the MIDI route and disable the Key and Mouse preset so that outgoing all translators in ‘Key and MIDI’ are disabled.

In the Preset Management preset, I have 5 translators.

  • 0.0 will fire a one shot timer (‘Init’) when the project file is opened. More on that later
  • 0.1 will also fire the one shot timer (‘Init’) When you press Ctrl(Up) on your computer keyboard. It is a quick way to re-initialize your project if you would like to do so with a keystroke.
  • 0.2 translators has an incoming action of timer ‘INIT’ and no output but it sets the global variable ‘ga’ to the preset number you want initially enabled.
  • 0.3 will enable the preset number assigned to ‘ga’ in the previous translator while disabling all other presets.
  • 0.4 allows you to use incoming MIDI Note 0 on MIDI CH 1 to toggle between the two other presets

In the Key and Mouse Preset I have 6 translators.

  • 1.0 Disables the MIDI thru route you set when this preset is enabled.
  • 1.1 This will focus on my target application (In my case Ableton Live) any time a 3 byte MIDI message (note or CC) is sent. This is in preparation for sending keystrokes to my applications
  • 1.2 This takes note 2 on MIDI Ch 1 and sends a Shift(Left Arrow) keystroke to the currently targeted application. I apply a 10ms delay to give time for the application to focus (translator 1.1)
  • 1.3 This takes note 3 on MIDI Ch1 and sends a Shift(Right Arrow) keystroke to my target application. Again I apply the delay.
  • 1.4 This will Send Shift (Left Arrow) when I move relative encoder CC 0 on MIDI CH1 and it has a value of less the 64. Note the rules section that nothing happens if the value is greater than 64. The outgoing delay is applied.
  • 1.5 This will Send Shift(Right Arrow) when I move the relative encoder CC 0 on MIDI CH 1 and it has a value of greater than 64. The outgoing delay is applied.

In the MIDI preset, I only have one translator. It enables the MIDI thru path. You can then use MIDI learn on your DAW for anything you send from your controller, or you can write additional translations if translation is required. If you write a translator and you don’t want the original MIDI message to go through, use the ‘Swallow’ MIDI option on the MIDI message.

image

Now the DAW I’m using is Ableton Live and I have set up the input to be BMT 1 Virtual MIDI port and am not enabling my original MIDI port from my controller. It is important to disable your original MIDI input port in your DAW and only use the virtual MIDI port assigned.

Here is the project file:

Daw-Keystroke-MIDI-Switch.bmtp (3.9 KB)

I hope this helps you achieve what you are looking for!

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Thank you so much for such comprehensive answer, Steve, this has helped a lot. Using virtual ports I’ve been able to get everything working now! Watching your other tutorial I’ve also been able to properly get endless encoders of my MIDI controller change absolute faders properly. The only thing though is it works smoothly only as long as I don’t touch these faders with my mouse. If I shift them manually then try to adjust with the mapped encoders they jump to the previously known-to-encoder value and won’t adjust from their current position. Probably it’s just the way it is since it’s one way and there is no feedback from the faders to BMT.

If you have motorized faders or LED rings on your controller, most DAW provide MIDI feedback and you could use that.

If you don’t have motorized faders or LED rings, then some DAWs have a ‘takeup’ capability that they do not react to moving faders until they crossover their last know position. If your DAW doesn’t have this feature, it can be emulated in MT Pro but we would indeed need to know that last position the DAW thinks it’s fader is in. We would then set up a translator to disable the output until it crosses over to the last known position.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz