Skip to content

Commit 0df8ed2

Browse files
committed
Minor readme cleanup
1 parent 237b8d9 commit 0df8ed2

File tree

2 files changed

+41
-24
lines changed

2 files changed

+41
-24
lines changed

BehringerXTouchExtender/BehringerXTouchExtender.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<Version>0.0.1-SNAPSHOT2</Version>
4+
<Version>1.0.0</Version>
55
<Authors>Ben Hutchison</Authors>
66
<Company>Ben Hutchison</Company>
77
<PackageId>BehringerXTouchExtender</PackageId>

Readme.md

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ BehringerXTouchExtender
1111

1212
1. [Quick Start](#quick-start)
1313
1. [Prerequisites](#prerequisites)
14+
- [MIDI control mode](#midi-control-mode)
15+
- [Firmware upgrade](#firmware-upgrade)
1416
1. [Installation](#installation)
1517
1. [Connection](#connection)
1618
1. [Track identifiers](#track-identifiers)
@@ -65,23 +67,35 @@ dotnet run
6567
## Prerequisites
6668

6769
- A [Behringer X-Touch Extender](https://www.behringer.com/product.html?modelCode=P0CCR)
68-
- Connect over USB, not Ethernet
69-
- Set to absolute or relative MIDI control mode (persistent)
70-
1. Turn on the device while holding the track 1 select button
71-
1. Turn the track 1 rotary encoder knob until the track 1 LCD shows `Ctrl` (absolute MIDI control mode) or `CtrlRel` (relative MIDI control mode)
72-
1. Press the track 1 select button
73-
- *AMD Zen2 (Ryzen 3000) and later only:* install [firmware 1.21 or later](https://mediadl.musictribe.com/download/software/behringer/X-TOUCH/X-TOUCH-EXT_Firmware_V1.22.zip) to fix the [broken USB connection](https://community.amd.com/t5/drivers-software/behringer-x-touch-usb-driver-issues/m-p/199495)
74-
1. Turn on the device while holding the track 8 record button
75-
1. Download and run [MIDI-OX](http://www.midiox.com/moxdown.htm) on an unaffected (e.g. Intel) computer connected to the device over USB
76-
1. Highlight the `X-Touch-Ext` entries in Options › MIDI Devices
77-
1. Select the downloaded `.syx` file using Actions › Send › SysEx File
78-
1. Wait for the upgrade to finish
79-
1. Reboot the device using the power button
80-
- Any Microsoft .NET runtime that supports [.NET Standard 2.0 or later](https://docs.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-2-0#net-standard-versions)
70+
- A Microsoft .NET runtime that supports [.NET Standard 2.0 or later](https://docs.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-2-0#net-standard-versions):
8171
- [.NET 5.0 or later](https://dotnet.microsoft.com/en-us/download/dotnet)
8272
- [.NET Core 2.0 or later](https://dotnet.microsoft.com/en-us/download/dotnet)
8373
- [.NET Framework 4.6.1 or later](https://dotnet.microsoft.com/en-us/download/dotnet-framework)
8474

75+
<a id="midi-control-mode"></a>
76+
### MIDI control mode
77+
78+
You must manually set the device to absolute or relative MIDI control mode. The other two modes, HUI and MC, are not supported by this library.
79+
80+
1. Turn on the device while holding the track 1 select button
81+
1. Turn the track 1 rotary encoder knob until the track 1 LCD shows `Ctrl` (absolute MIDI control mode) or `CtrlRel` (relative MIDI control mode)
82+
1. Press the track 1 select button
83+
1. Remember which mode you chose when you [connect](#connection) to the device
84+
85+
<a id="firmware-upgrade"></a>
86+
### Firmware upgrade
87+
88+
If your computer has an AMD Zen2 (Ryzen 3000) or later CPU, then you must install X-Touch Extender firmware 1.21 or later to fix the [broken USB connection](https://community.amd.com/t5/drivers-software/behringer-x-touch-usb-driver-issues/m-p/199495).
89+
90+
1. [Download the firmware](https://mediadl.musictribe.com/download/software/behringer/X-TOUCH/X-TOUCH-EXT_Firmware_V1.22.zip)
91+
1. Extract the `.syx` file from the `.zip` file
92+
1. Turn on the device while holding the track 8 record button
93+
1. Download and run [MIDI-OX](http://www.midiox.com/moxdown.htm) on an unaffected (e.g. Intel) computer connected to the device over USB
94+
1. Highlight the `X-Touch-Ext` entries in Options › MIDI Devices
95+
1. Select the downloaded `.syx` file using Actions › Send › SysEx File
96+
1. Wait for the upgrade to finish
97+
1. Reboot the device using the power button
98+
8599
<a id="installation"></a>
86100
## Installation
87101

@@ -188,11 +202,11 @@ IRotaryEncoder rotaryEncoder = device.GetRotaryEncoder(0);
188202
<a id="illuminating-lights"></a>
189203
#### Illuminating lights
190204

191-
There are thirteen orange lights on each rotary encoder. *Exactly one* of them is illuminated at any given time. Set the **`LightPosition`** property to change which light is illuminated.
205+
There are thirteen orange lights on each rotary encoder. *Exactly one* of them is illuminated at any given time. You can't turn them all off at the same time. Set the **`LightPosition`** property to change which light is illuminated.
192206

193207
They are numbered from `0` (most counter-clockwise) to `12` (most clockwise). Values outside this range are clipped to stay within `[0, 12]`.
194208

195-
The maximum value `13` is available programmatically in the `IRotaryEncoder.LightCount` property.
209+
The number of lights `13` is available programmatically in the `IRotaryEncoder.LightCount` property.
196210

197211
```cs
198212
rotaryEncoder.LightPosition.Connect(0);
@@ -216,11 +230,11 @@ rotaryEncoder.IsPressed.PropertyChanged += (sender, args) =>
216230

217231
The available Properties and their values for a rotary encoder depend on whether you created your `IBehringerXTouchExtender` instance using either `BehringerXTouchExtenderFactory.CreateWithAbsoluteMode()` or `.CreateWithRelativeMode()`.
218232

219-
This control mode must match the [configured mode on the physical X-Touch Extender](#prerequisites) (`Ctrl` or `CtrlRel`, respectively).
233+
This control mode must match the [configured mode on the physical X-Touch Extender](#midi-control-mode) (`Ctrl` or `CtrlRel`, respectively).
220234

221235
##### Absolute control mode
222236

223-
Available when you [set the X-Touch Extender's control mode](#prerequisites) to `Ctrl` and called `BehringerXTouchExtenderFactory.CreateWithAbsoluteMode()`.
237+
Available when you [set the X-Touch Extender's control mode](#midi-control-mode) to `Ctrl` and called `BehringerXTouchExtenderFactory.CreateWithAbsoluteMode()`.
224238

225239
When the knob is rotated, the rotary encoder will update its **`RotationPosition`** Property with the new position of the knob, from `0.0` (most counter-clockwise) to `1.0` (most clockwise).
226240

@@ -237,7 +251,7 @@ rotaryEncoder.RotationPosition.PropertyChanged += (sender, args) =>
237251

238252
##### Relative control mode
239253

240-
Available when you [set the X-Touch Extender's control mode](#prerequisites) to `CtrlRel` and called `BehringerXTouchExtenderFactory.CreateWithRelativeMode()`.
254+
Available when you [set the X-Touch Extender's control mode](#midi-control-mode) to `CtrlRel` and called `BehringerXTouchExtenderFactory.CreateWithRelativeMode()`.
241255

242256
When the knob is rotated, the rotary encoder will emit a **`Rotated`** event that tells you in which direction it was rotated. It does not tell you how far it was rotated, instead, it sends more `Rotated` events as you continue to turn the knob.
243257

@@ -380,23 +394,26 @@ When you're done using an `IBehringerXTouchExtender<>` instance, you should [dis
380394
```cs
381395
public void ExplicitlyDispose() {
382396
var device = BehringerXTouchExtenderFactory.CreateWithRelativeMode();
383-
// use device
397+
device.Open();
398+
// use device here
384399
device.Dispose();
385400
}
386401
```
387402

388403
```cs
389404
public void ImplicitlyDisposeWithUsingDeclaration() {
390405
using var device = BehringerXTouchExtenderFactory.CreateWithRelativeMode();
391-
// use device
406+
device.Open();
407+
// use device here
392408
// when control exits the Main method, device will be disposed
393409
}
394410
```
395411

396412
```cs
397413
public void ImplicitlyDisposeWithUsingStatement() {
398414
using (var device = BehringerXTouchExtenderFactory.CreateWithRelativeMode()) {
399-
// use device
415+
device.Open();
416+
// use device here
400417
// when control exits the using block, device will be disposed
401418
}
402419
}
@@ -411,5 +428,5 @@ public void ImplicitlyDisposeWithUsingStatement() {
411428
<a id="acknowledgements"></a>
412429
## Acknowledgements
413430

414-
- [Maxim Dobroselsky](https://github.com/melanchall) for the [DryWetMIDI](https://github.com/melanchall/drywetmidi) library to control MIDI devices in .NET
415-
- The person on the now-deleted MusicTribe forums who correctly [answered a question](https://community.musictribe.com/t5/Recording/X-Touch-Extender-Scribble-Strip-Midi-Sysex-Command/td-p/251306) about the 5th byte of the scribble strip SysEx message, the value of which must be the message length `0x15` instead of the incorrectly documented device ID `0x42`.
431+
- [Maxim Dobroselsky](https://github.com/melanchall) for the [DryWetMIDI](https://github.com/melanchall/drywetmidi) library that controls MIDI devices from .NET
432+
- The person on the now-deleted MusicTribe forums who correctly [answered a question](https://community.musictribe.com/t5/Recording/X-Touch-Extender-Scribble-Strip-Midi-Sysex-Command/td-p/251306) about the 5th byte of the scribble strip SysEx message, the value of which must be the message length `0x15` instead of the incorrectly documented device ID `0x42`

0 commit comments

Comments
 (0)