Connexion rapide:  

Forum: VirtualDJ Plugins

Sujet Behringer X-Touch Extender definition file - Page: 2
Hello, thanks for all your support!

Yesterday I got color and text working myself with this:
	
<text sysex="F0002032154C00000000000000000000000000000000F7">
<digit name="LCD1_BACKCOLOR" offset="7" iscolor="yes" values="0x01=red,0x02=green,0x03=yellow,0x04=blue,0x05=magenta,0x06=cyan,0x07=white,0x08=black" />
<sysex name="LCD1_TEXTUPPER" offset="8" size="7" scroll="yes" encoding="ascii" />
<sysex name="LCD1_TEXTLOWER" offset="15" size="7" scroll="yes" encoding="ascii" />
</text>


With your code from yesterday color and text are also working fine but the invert function isn't. To be honest I don't see this as a useful addition so it's okay by me if that isn't implemented.
That makes the definition file finished in my opinion!

There are three things left on my mapper list:

When VDJ starts the deck levels are 100% and my faders are at 0%. Is it possible to use 'ONINIT' to send the motorized faders to the level only when VDJ starts?
So when VDJ starts we don't request the faders position but send the motor faders to the position of the software faders in VDJ.
Something like: ONINIT: MOT_SLIDER1 = DECK 1 LEVEL
If we do that continuously you will feel the motor of the fader working against your movement because the fader controls the software level and at the same time the software level controls the fader....

The VU meters only shows only the top led instead of a filled bar. The leds below the signal led don't light up. I tried with fill= "yes" and without fill="yes"
<bar name="LED_VU1" cc="90" fill="no" channel="0" />

The manual says 'Level Meter Receive Value 0...129 (bottom/SIG to top/CLIP, only 1 LED on at a time)'
Looks like this problem is caused by the Extenders firmware and we cannot change that?

How can I send the VU meter of the phones/plf to a ledbar?
get_vu_meter 'phones' 'headphones' or 'pfl' is not working.
	<map value="LED_VU5" action="get_vu_meter &apos;mic&apos;" />
<map value="LED_VU6" action="get_vu_meter &apos;sampler&apos;" />
<map value="LED_VU7" action="get_vu_meter &apos;plf&apos;" />
<map value="LED_VU8" action="get_level" />


 

Posté Fri 20 Sep 24 @ 12:16 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
I think you should include the INVERT keys. Try this ...
Put back the nbbits=3 to all the BACK COLOR keys and add ..
<digit name="LCD_#_INVERT_UPPER" offset="7" nbbits="1" offsetbit="3" />
<digit name="LCD_#_INVERT_LOWER" offset="7" nbbits="1" offsetbit="4" />
to all # (0 to 7) lcds.
So in my previous code, the offsetbit for _UPPER is now 3 and the offsetbit for _LOWER is 4 (instead of 4 and 5)
The structure of the SysEx shows bits 4 and 5, but the analysis of the color Table shows 3 and 4

CeesTech wrote :

When VDJ starts the deck levels are 100% and my faders are at 0%. Is it possible to use 'ONINIT' to send the motorized faders to the level only when VDJ starts?
So when VDJ starts we don't request the faders position but send the motor faders to the position of the software faders in VDJ.
Something like: ONINIT: MOT_SLIDER1 = DECK 1 LEVEL
If we do that continuously you will feel the motor of the fader working against your movement because the fader controls the software level and at the same time the software level controls the fader....

If there is no Dump Request Sysex available from the firmware (something to send and the device to respond with the positions of the faders), then you can tell the device to follow the software by mapping the <bar .... > of the motor faders with the same action as the faders.
If you dont want to be at 100%, you can add in the ONINIT key of your Mapping the actions ..
deck all volume 0%
But also wanted to ask something about them. If you map both the <slider> and the <bar> with volume, once you try to move a fader, do you get some unwanted "resistance" ?
If so, you could add the touch-sensitive faders as buttons and map them to set a variable to 1 while touched.
Touch Fader button : set 'touchfader1' 1 while_pressed
Then your <bar> should be like .. var 'touchfader1' 1 ? send_nothing : deck 1 level

PS. Even if using Motorized faders is not much useful for Deck Volumes (software wont change them unless you move them from the skin), it makes sense to use them for Pitch faders and FX Params, so the approach above (to avoid "resistance") is a good practice and you should add the touch-sensitive Fader buttons in your definition, even if not used by you.


CeesTech wrote :

The VU meters only shows only the top led instead of a filled bar.
The manual says 'Level Meter Receive Value 0...129 (bottom/SIG to top/CLIP, only 1 LED on at a time)'
Looks like this problem is caused by the Extenders firmware and we cannot change that?

Correct, nothing we can do about it.

CeesTech wrote :
How can I send the VU meter of the phones/plf to a ledbar?

I dont think there is such an action. But why would that be useful ? And since there is no way to "fill" the VU leds, there is no sense to map those as above.

 

Posté Fri 20 Sep 24 @ 12:24 pm
djdad wrote :
I think you should include the INVERT keys. Try this ...
Put back the nbbits=3 to all the BACK COLOR keys and add ..
<digit name="LCD_#_INVERT_UPPER" offset="7" nbbits="1" offsetbit="3" />
<digit name="LCD_#_INVERT_LOWER" offset="7" nbbits="1" offsetbit="4" />
to all # (0 to 7) lcds.
So in my previous code, the offsetbit for _UPPER is now 3 and the offsetbit for _LOWER is 4 (instead of 4 and 5)
The structure of the SysEx shows bits 4 and 5, but the analysis of the color Table shows 3 and 4


I'm sorry but also this is not working.
We need byte 'cc' to go from '0x' to '1x' to invert the upper line and to '2x' to invert the lower line. When both lines are inverted we need cc to be '3x'
Can you explain how the function of 'nbbits' and 'offsetbit' works? Then I can think with you.


djdad wrote :
If there is no Dump Request Sysex available from the firmware (something to send and the device to respond with the positions of the faders), then you can tell the device to follow the software by mapping the <bar .... > of the motor faders with the same action as the faders.
If you dont want to be at 100%, you can add in the ONINIT key of your Mapping the actions ..
deck all volume 0%
But also wanted to ask something about them. If you map both the <slider> and the <bar> with volume, once you try to move a fader, do you get some unwanted "resistance" ?
If so, you could add the touch-sensitive faders as buttons and map them to set a variable to 1 while touched.
Touch Fader button : set 'touchfader1' 1 while_pressed
Then your <bar> should be like .. var 'touchfader1' 1 ? send_nothing : deck 1 level

PS. Even if using Motorized faders is not much useful for Deck Volumes (software wont change them unless you move them from the skin), it makes sense to use them for Pitch faders and FX Params, so the approach above (to avoid "resistance") is a good practice and you should add the touch-sensitive Fader buttons in your definition, even if not used by you.


Yes, when I map both the <slider> and the <bar> with volume, I get unwanted "resistance" when moving a fader because they are working against each other. With your variable solution there is less resistance.
For personal use I would like to set the <bar> just once with VDJ starts. Is something like this possible:
<map value="ONINIT" action="set &apos;touchfader1&apos; 1" />
<map value="MOT_SLIDER1" action="var &apos;touchfader1&apos; 1 ? deck 1 level : send_nothing &amp; wait 500ms &amp; set_var &apos;touchfader1&apos; 0" />


 

Posté Mon 23 Sep 24 @ 1:44 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
Before explaining , can you tell me if this is working for the LCD Colors ?

<text sysex="F0002032154C00000000000000000000000000000000F7">
<digit name="LCD1_BACKCOLOR" offset="7" nbbits="3" offsetbit="0" iscolor="yes" values="0x01=red,0x02=green,0x03=yellow,0x04=blue,0x05=magenta,0x06=cyan,0x07=white,0x08=black" />
<sysex name="LCD1_TEXTUPPER" offset="8" size="7" scroll="yes" encoding="ascii" />
<sysex name="LCD1_TEXTLOWER" offset="15" size="7" scroll="yes" encoding="ascii" />
</text>

Note, this is the same code you posted above, with the addition of nbbits="3" offsetbit="0" for the BACKCOLOR key
 

Posté Mon 23 Sep 24 @ 2:36 pm
Yes, this works for the LCD Colors
 

Posté Mon 23 Sep 24 @ 4:09 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
The Color table you posted above is more or less the same with the one i had posted including the Invert bits.

The 1st column indicate the available Color values in Hex.
The rest of the Colors have the same color value with 2 additional on/off bits that define the inverted or not.
So
Value 04 (Blue) is in binary ............................ 0 0 0 0 1 0 0
Value 14 (Blue Upper Inverted) is in binary .. 0 0 1 0 1 0 0
Value 24 (Blue Lower Inverted) is in binary .. 0 1 0 0 1 0 0
Value 34 (Blue Both Inverted) is in binary .. .. 0 1 1 0 1 0 0
The Bits for inversion are Nr 4 and 5 (start counting from 0 and from right to left)
So the following should work ...
<text sysex="F0002032154C00000000000000000000000000000000F7">
<digit name="LCD1_BACKCOLOR" offset="7" nbbits="3" offsetbit="0" iscolor="yes" values="0x00=black,0x01=red,0x02=green,0x03=yellow,0x04=blue,0x05=magenta,0x06=cyan,0x07=white" />
<digit name="LCD1_INVERTUPPER" offset="7" nbbits="1" offsetbit="4" />
<digit name="LCD1_INVERTLOWER" offset="7" nbbits="1" offsetbit="5" />
<sysex name="LCD1_TEXTUPPER" encoding="ascii" offset="8" size="7" scroll="no" />
<sysex name="LCD1_TEXTLOWER" encoding="ascii" offset="15" size="7" scroll="no" />
</text>

With Mapping (as a test)...
LCD1_BACKCOLOR - >color 'blue'
LCD1_INVERTUPPER -> blink 400ms
LCD1_INVERTLOWER -> blink 800ms
LCD1_TEXTUPPER - > get_text 'UP'
LCD1_TEXTLOWER-> get_text 'LOW'
You should get the UP/LOW Texts blinking Blue with a different speed
For the Invert Keys, any true , false, blink etc actions should work (along with all other actions that return true or false), but you can also try constant 0 (off) and constant 1 (on)

If still not working, i ll need to check on both your definition and Mapping, so feel free to send those to double-check.

EDIT. I see Hex 08 as "Off" (and not 0x00), probably Black Color to Black Background or useful to turn off LCD. In this case we need 4 bits (nbbits="4") , hex 08 = 1 0 0 0, so try this too and see if color 'black' turns off the LCD.

<text sysex="F0002032154C00000000000000000000000000000000F7">
<digit name="LCD1_BACKCOLOR" offset="7" nbbits="4" offsetbit="0" iscolor="yes" values="0x08=black,0x01=red,0x02=green,0x03=yellow,0x04=blue,0x05=magenta,0x06=cyan,0x07=white" />
<digit name="LCD1_INVERTUPPER" offset="7" nbbits="1" offsetbit="4" />
<digit name="LCD1_INVERTLOWER" offset="7" nbbits="1" offsetbit="5" />
<sysex name="LCD1_TEXTUPPER" encoding="ascii" offset="8" size="7" scroll="no" />
<sysex name="LCD1_TEXTLOWER" encoding="ascii" offset="15" size="7" scroll="no" />
</text>
 

Posté Mon 23 Sep 24 @ 6:16 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
CeesTech wrote :
For personal use I would like to set the <bar> just once with VDJ starts. Is something like this possible:
<map value="ONINIT" action="set 'touchfader1' 1" />
<map value="MOT_SLIDER1" action="var 'touchfader1' 1 ? deck 1 level : send_nothing & wait 500ms & set_var 'touchfader1' 0" />

MOT_SLIDER1 is the <bar>, not the <slider> , right ?
In this case, the wait and toggle needs to be in the ONINIT.
So try ..
<map value="ONINIT" action="set 'touchfader1' 1 & wait 1000ms & set 'touchfader1' 0" />
<map value="MOT_SLIDER1" action="var 'touchfader1' 1 ? deck 1 level : send_nothing" />

(without the Touch-sensitive Fader <button>s of course mapped to anything)


About the VU meter leds, i see some product photos having more than 1 led turned on, so there must be some hidden feature there. Best would be to email Behringer and see if they are aware of this or a solution/workaround.
 

Posté Mon 23 Sep 24 @ 6:28 pm
The motorized faders are working perfectly now!
I agree I should be possible to fill the VU meter somehow. When I send a single MIDI command in Midi Tools it also lights only a single LED. So yes it's a Behringer thing.

Thanks for the explanation and I understand now how the offsetbit works.
Unfortunately the inversion is still not working... I logged the SysEx data (see below) and VDJ is not changing the inversion bits from 0 to 1, 2 or 3.

What is the function of nbbits="1"?
And is '<digit' the correct type?
In other words where is determined that the bits are to be flipped?

See mapper and definition file here: https://we.tl/t-ylpKVoSGyd

Below the SysEx output when using this definition and mapper:
To X-Touch-Ext X-TOUCH_INT	F0 00 20 32 15 4C 00 04 00 00 00 00 00 00 00 53 6C 65 65 70 20 65 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 01 01 00 00 00 00 00 00 00 53 6C 65 65 70 20 65 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 02 02 00 00 00 00 00 00 00 53 6C 65 65 70 20 65 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 03 03 00 00 00 00 00 00 00 53 6C 65 65 70 20 65 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 04 07 00 00 00 00 00 00 00 4D 69 63 00 00 00 00 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 05 07 00 00 00 00 00 00 00 53 61 6D 70 6C 65 72 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 06 07 00 00 00 00 00 00 00 50 68 6F 6E 65 73 00 F7
To X-Touch-Ext X-TOUCH_INT F0 00 20 32 15 4C 07 07 00 00 00 00 00 00 00 4D 61 73 74 65 72 00 F7
 

Posté Wed 25 Sep 24 @ 2:21 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
Will check further, but for now i see you mapped as contant instead of constant
Also try, blink 1000ms ? constant 1.0 : constant 0.0
 

Posté Wed 25 Sep 24 @ 6:38 pm
You can stop checking! Turns out to be typo from my side, and it's working with
constant 1
and
blink 1000ms ? constant 1.0 : constant 0.0


I think all open items are solved now. The final mapper will look like this:


Can I upload it for review here (https://www.virtualdj.com/plugins/upload.html) under 'Other' -> 'Custom Mappers"?
Many thanks for your support!
 

Posté Wed 25 Sep 24 @ 7:45 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
Ok all good then. Glad we managed to sort it out.

There was a fault from my side too.
With <digiti ... nbbits="1"> (nbbits stands for Number of bits) VDJ expects a number 0.0 (on) or 1.0 (off). If you just use true/false/blink it wont work (although it should - will check with the Dev Team).
So in case you want to query something and invert accordingly, you can map like ..
effect_active ? constant 1.0 : constant 0.0



I also spotted some keys that dont follow the same naming pattern like the others, it's actually for LCD6_ keys , so could follow the others (in both definition and Mapping.. Minor though.

But, yes you may upload your files once you' re done and let VDJ Team to check and approve.
 

Posté Wed 25 Sep 24 @ 8:17 pm
I corrected the naming pattern for LCD6, thanks for spotting this.
The coming days I will test everything and upload it when this is done.
 

Posté Thu 26 Sep 24 @ 10:39 am
I've tested a bit today and modified some mapper things for better workflow.

One thing I'm tried to accomplish is when I press one or more PFL buttons the headphone goes to PFL only. And when I release a PFL it should go back to my main mix. So not a split signal, just fully PFL or fully main mix.

The code below works when pressing PFL of a single channel at a time. But with I press PFL buttons of two or more channels it goes back to the main mix when I release the first PFL button.
I would like it to stay on PFL mix until I released the last PFL button. Is that possible?


<map value="REC1" action="deck 1 pfl &amp; pfl ? headphone_mix 0% : headphone_mix 100%" />
<map value="REC2" action="deck 2 pfl &amp; pfl ? headphone_mix 0% : headphone_mix 100%" />
<map value="REC3" action="deck 3 pfl &amp; pfl ? headphone_mix 0% : headphone_mix 100%" />
<map value="REC4" action="deck 4 pfl &amp; pfl ? headphone_mix 0% : headphone_mix 100%" />
 

Posté Thu 26 Sep 24 @ 1:45 pm
djdadPRO InfinityDevelopment ManagerMember since 2005
Try this ...


<map value="REC1" action="deck 1 pfl & deck 1 pfl ? headphone_mix 0% : deck 2 pfl ? headphone_mix 0% : deck 3 pfl ? headphone_mix 0% : deck 4 pfl ? headphone_mix 0% : headphone_mix 100%"/>
<map value="REC2" action="deck 2 pfl & deck 1 pfl ? headphone_mix 0% : deck 2 pfl ? headphone_mix 0% : deck 3 pfl ? headphone_mix 0% : deck 4 pfl ? headphone_mix 0% : headphone_mix 100%"/>
<map value="REC3" action="deck 3 pfl & deck 1 pfl ? headphone_mix 0% : deck 2 pfl ? headphone_mix 0% : deck 3 pfl ? headphone_mix 0% : deck 4 pfl ? headphone_mix 0% : headphone_mix 100%"/>
<map value="REC4" action="deck 4 pfl & deck 1 pfl ? headphone_mix 0% : deck 2 pfl ? headphone_mix 0% : deck 3 pfl ? headphone_mix 0% : deck 4 pfl ? headphone_mix 0% : headphone_mix 100%"/>


was trying to find a shorter script, but deck all pfl off can't be queried
 

Posté Thu 03 Oct 24 @ 9:03 pm
locoDogPRO InfinityModeratorMember since 2013
Any better?
pfl & set $pfl 0 & ( deck all pfl ? set $pfl +1 : ) & var $pfl 0 ? headphone_mix 100% : headphone_mix 0%
 

Posté Thu 03 Oct 24 @ 9:49 pm
locoDog wrote :
Any better?
pfl & set $pfl 0 & ( deck all pfl ? set $pfl +1 : ) & var $pfl 0 ? headphone_mix 100% : headphone_mix 0%


Thanks locoDog. This is exactly what I needed!
I'll do some more testing to check everything and send the mapper in for review afterwards.
 

Posté Sun 06 Oct 24 @ 6:01 pm