Behringer XR18 + OSC/Pilot?

Hello. I want to create my own interface to control XR18. So it’s either MIDI or OSC. OSC is preferable because we will be controlling it from another computer in network. I was able to get everything working using:
MIDI Translator (paid)
OSI Stage (paid)

But that’s way too many programs at once and more than 150$ investment. Is it possible to directly connect OSC/Pilot to XR18? I will be buying OSC/Pilot if it’s possible.

I’m not familiar with the XR18 directly. With the current way you have it setup, is OSC/PILOT sending OSC to MIDI Translator, which is forwarding those MIDI messages over RTP MIDI to the XR18? HOw is OSI Stage in the mix?
Are the MIDI messages that come out of OSC/PILOT itself not usable for this?

My current setup looks like this:
Pilot → Midi translator → OSIStage → RTP-Midi → XR18 Midi

OSIMidi is a software that can map midi commands to mixer and control it. Maybe if there is a way to find out OSC or MIDI commands that mixer sends back. I wasn’t able to map directly OSC/Pilot MIDI to XR18 yet.

I was able to get faders and buttons working by linking MIDI CH and MIDI CC. But they do not synchonize in OSC/Pilot when you change values elsewhere. Using Midiview I was able to see that mixer sends events when faders or buttons change. But how can OSC/Pilot get those?

MIDI feedback is not yet supported, however I’m working on it this weekend and hope to release it tomorrow. I have it working on Windows, just need to get the macOS version working.

1 Like

I was able to map faders and buttons to XR18 via OSC. But OSC feedback doesn’t work. Mixer is designed to send back data to the original port. If the request comes from 10028, the it sends it to 10028. TCPView shows that ports 55650 and 10028 are open by OSC/Pilot. Unfortunately it uses 55650 to send the query. There is no way to change feedback port on mixer itself.

What can I do to send and get all requests from the same port?

Ah, this is a missing feature. The send-from port is randomly chosen by the OS (55650 in this case). However I don’t listen for messages on that port, I only listen on the ‘listen-on port’.
I’ll look into also listening for messages on the send-from port, which will be randomly chosen by the OS, but receivers know that messages are coming from that port, so they can reply to it if they wish.

Thanks. I might start using OSC/Pilot now, but having full sync with the mixer will be a game changer.

There is 1 little thing to make it all work with XR18. I found out that: mixer sends back OSC feedback data only if you ping mixer using /xremote every 5 seconds. If you dont send this command repeatedly, then it won’t give you back changes that are made outside of OSC/Pilot. Is there a possibility within your program to loop an OSC command? If not, would you please consider adding it?

Interesting requirement, I’ll think about that. Maybe some sort of heartbeat widget.
Looks like I can’t post today because my codesigning certificate has expired. I’ll try to get the new build out this week.

Thanks. Will be looking for updates!

Yes you need to send the handshake within 10 seconds and indeed the mixer will answer to the same port a request originates from. This is especially important for subscribing to parameters so the mixer can update changes to any connected editors.

Getting the port answer working would be the first i’ve seen in higher level environments. I managed to get it all working within Arduino IDE with Teensy 3.2’s and ethernet shields.

Same OSC controls go for the Behringer x32 series of mixers. I have the x32 rack. It has a lot of OSC controls and sends back OSC if you ping every 10 seconds i think it is.

Theres a guy that has an unofficial OSC map of the whole mixer on his website. I am guessing the XR18 is similar. (link to x32 OSC map - X32-OSC.pdf - Google Drive)

So getting the listening working would be super benificial to LOTS of x32 users.

Thanks for this request. The the upcoming build (1.5.2 and later), the Button widget will have a parameter that allows you to choose a Re-Send interval, which will cause the OSC message to be resent at that interval while the button is On.

1 Like

This is now available in pre-release build v1.5.2:

Hi, Malcolm. Good to hear that you are working on it. Unfortunately I couldn’t get it working yet.

When I turn on “OSC LOOPBACK” toggle the button stops sending commands. I analyzed OSCPilot using Wireshark, and it only works without this toggle. How do you put it on loop then?

And there is a second major issue. Every time you put your own number in “LISTEN ON PORT” field, Windows changes program’s sending port. This function should somehow map a certain port to Pilot and keep it.

P.S. Running with admin rights didn’t help.


Thanks for the feedback. The OSC LOOPBACK isn’t used for this, its used to send an OSC message from OSC/PILOT to itself. Primarily this is used to create buttons that change the workspace. So it’s correct that you want this off.

The second issue is is a bit more involved. There are two ports that are opened with OSC/PILOT right now. There is the LISTEN ON port, which will match the number you enter for that field. This port is opened on the OSC/PILOT machine.
The SEND TO PORT will be random on the OSC/PILOT machine, assigned by the OS. The port you enter here is the port number on the receiver machine should be listening on. That is, we send TO that port, not FROM that port.
So, if you are looking at wireshark, ignore the port number the messages are coming from that is a different port that the other one we have opened, which we are LISTEN ON.
Let me know if that helps at all

Is it possible to send an OSC command every 5 seconds then?

The trick to make it work with XR18 is to listen to the OUT port of OSCPilot. XR18 will send osc data back only to the port that it received info from.

@johnnyb you can’t change the port the XR18 receives on, it is fixed to UDP Port 10024
As per the 1st page of the OSC Documentation - Behringer Air series OSC Documentation :

“OSC packets are received on UDP port 10024 and replies are sent back to the requester’s IP/port.”

So all you need is a single button that is enabled (i.e. toggled ON) sending OSC to port 10024 with the new beta v1.5.2 “resend value” option checked with an interval of 5 minutes or so. (beta v1.5.2 link in Malcom’s post above). My x32 has a polling frequency of 10 minutes keep-alive, I am not certain of the X Air series but i think it’s 5 minutes.

Also Wireshark is an excellent tool but it is very much overkill for monitoring OSC. I would highly recommend you check out Protokol by Hexler, makers of TouchOSC. It enables you to monitor OSC/MIDI/Gamepads on mobile devices as well as desktop devices. It is extremely useful during testing phase.


Did you make it work with X32? Because the issue still persists for me. You need a fixed port to be able to listen to it. But each time you put a new number in LISTEN ON PORT, OSC/PILOT outgoing port changes. At least that is what Wireshark shows in logs.

And how would I know what is the OUT port of OSC/Pilot without Wireshark or other monitoring software? Maybe a simple checkbox saying: “Listen to the port that is used to send commands” would be easier to understand.

I have literally only just downloaded the v1.5.2 beta and have yet to install it to my production machine. I have a gig tomorrow so I won’t be able to get to it until Sunday morning South Australian time (ACST).
But I will test it immediately as this is an incredibly useful addition for the X-series/Air-series units.