I was searching for a control device for an embedded application. The loss of time for developing and building by myself seems to be big. So meeting the Behringer X-Touch Mini seems to be a lucky coincidence. The device is cheap enough and it offers a great functionality for using it at my application (and of course so much other stuff). Please note that I have no music background or studio experience.
If you like to add some information to this repository, please feel free to do that.
Actually I tried some stuff with the sniffed SysEx messages. For a complete reconfiguration as it is working with the Windows editor software, I need a checksum and some hints for getting the data to the X-Touch Mini. So if you are working on the same think and can help me with this matter, please contact me. I was sniffing the reading and writing process. But no luck if I'm doing this with a script and the same SysEx data, the X-Touch Mini is ignoring my configuration – maybe because of some timing issues? If there is an engineer from Behringer out there with the possibility to provide some information's about this, it would be great!
For now I decided to make this stuff public in hope there is someone who can give me some hints.
Yes there are. Even for me.
- Behringer is offering an editor for reconfiguration the device for Windows only. It seems that there is actually no macOS or Linux version in public.
- It seems that Behringer is not interested to give the communication protocol to public. I guess there are some guys out there who can develop an editor for other platforms. There is a documentation for the X-Touch Mini - Ok. So far it does not describe the interesting stuff for that device. In addition to that, there is only a forum. So everything you can read here is the result of doing testings, sniffing and try to reverse engineer.
- I'm a Linux and a macOS user. My first goals are to load / save the settings from the device. In addition to that it would be nice to reconfigure the device without the need of Windows.
- I like to change the device configuration dynamically. Which means I need to load the settings in dependency of my application state. Thinking of using an Raspberry Pi and you like to change the configuration. Actually I have not found a way for doing this.
- You can do much more with it as an add on to a normal keyboard.
All this stuff is not officially by Behringer. I do some testings and tried to reverse engineer. So please be careful and check the License file. You can use this information's by your own responsibility.
Getting some USB information about the device with an actual Linux installation (5.4 kernel):
$ lsusb
# ...
Bus 001 Device 007: ID 1397:00b3 BEHRINGER International GmbH X-TOUCH MINI
# ...
$ usb-devices
# ...
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 7 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1397 ProdID=00b3 Rev=02.00
S: Manufacturer=Behringer
S: Product=X-TOUCH MINI
S: SerialNumber=1.0.1
C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=300mA
I: If#=0x0 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=snd-usb-audio
I: If#=0x1 Alt= 0 #EPs= 2 Cls=01(audio) Sub=03 Prot=00 Driver=snd-usb-audio
# ...
$ $ amidi --list-devices
Dir Device Name
IO hw:1,0,0 X-TOUCH MINI MIDI 1
For having the X-Touch Editor and Wireshark on one machine, I decided to use a Windows 10 virtual machine. Binding the X-Touch Mini directly to the vitual machine for getting the hardware connection. Actually I thought that Behringer is using a manufacturer specific protocol for the communication with the X-Touch Mini. So I was using Wireshark with the USB Pcap for sniffing the traffic. I opened the X-Touch Editor for the device communication parallel. I was a little bit surprised to see that the communication itself was only some Midi SysEx messages!?
So it seems that the X-Touch Editor itself is putting the commands for the X-Touch Mini in SysEx messages.
I created a folder on this repository for storing the captured traffic here usbtraffic/
.
I will add the stuff on this page: SysEx Messages. So if you like to add some information's, please feel free to do it...
As a result of the work above I initially wrote an command line interface in python. Generally it is a communication wrapper for the SysEx messages from above.
# Install the dependencies
$ python3 -m pip install -r requirements.txt --user
$ cd cli
$ python3 -m xtm --help
List the available Midi ports on your computer:
$ python3 -m xtm ports
Midi Input Ports
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Index ┃ Name ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 0 │ Midi Through:Midi Through Port-0 14:0 │
│ 1 │ X-TOUCH MINI:X-TOUCH MINI MIDI 1 20:0 │
└───────┴───────────────────────────────────────┘
Midi Output Ports
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Index ┃ Name ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 0 │ Midi Through:Midi Through Port-0 14:0 │
│ 1 │ X-TOUCH MINI:X-TOUCH MINI MIDI 1 20:0 │
└───────┴───────────────────────────────────────┘
Gives you the information about the device id, global channel, mode, firmware and the actual active layer.
$ python3 -m xtm --port 1 info
Device Information
┌─────────────────┬──────────┐
│ Device ID: │ 16 │
│ Global channel: │ Off │
│ Mode: │ Standard │
│ Firmware: │ 1.8 │
│ Layer: │ A │
└─────────────────┴──────────┘
Change the actual mode to MC or Standard.
$ python3 -m xtm --port 1 mode 1 # Switch to MC mode
$ python3 -m xtm --port 1 mode 0 # Switch to Standard mode
Change the device id.
$ python3 -m xtm --port 1 devid 1 # Change the device id to 1
Change the global channel.
$ python3 -m xtm --port 1 globch 0 # Change the global channel to off.