Hi All,
I created a partial definition file for the DJ-Tech CTRL (https://www.dj-tech.com/dj-tech-ctrl) that consists of only 8 hotcue buttons and managed to get it showing up in the controllers section and also got the buttons to show as well. Here is my definition file. As mentioned, it is each of the 4 cue buttons for each side as well as the shift for each of them:
Here is the screenshot of me trying to map hotcue 1 for each deck and delete hotcue for deck 1:
![](/img/405461/80072/Screenshot 2024-05-07 223016.png)
Despite this, neither hotcue button works. What could I be missing? A few things:
-I am using Windows 11.
-The unique identifiers were found by me using the midi log trick. Here is the exact excerpt from the log that I believe corresponds to this device:
-The midi codes and values were retrieved from a PDF included in https://www.dj-tech.com/media/archive/g0/a8/5c/DJ-Tech-CTRL-Midi-Mappings.zip and cross referenced using the MidiView tool for Windows.
Thanks in advance!
I created a partial definition file for the DJ-Tech CTRL (https://www.dj-tech.com/dj-tech-ctrl) that consists of only 8 hotcue buttons and managed to get it showing up in the controllers section and also got the buttons to show as well. Here is my definition file. As mentioned, it is each of the 4 cue buttons for each side as well as the shift for each of them:
<device name="CTRL" author="DJ-Tech" description="DJ-Tech CTRL" version="2023" type="MIDI" vid="0x2485" pid="0x504f" decks="2" padColumns="4" padRows="1" padSides="2" >
<!--Cue buttons for deck A, no shift-->
<button cc="0x22" value="0x7F" off="0x00" name="cue_1_a" deck="1" channel="90" />
<button cc="0x32" value="0x7F" off="0x00" name="cue_2_a" deck="1" channel="90" />
<button cc="0x39" value="0x7F" off="0x00" name="cue_3_a" deck="1" channel="90" />
<button cc="0x42" value="0x7F" off="0x00" name="cue_4_a" deck="1" channel="90" />
<!--Cue buttons for deck A, with shift-->
<button cc="0x22" value="0x7F" off="0x00" name="cue_1_a_shift" deck="1" channel="98" />
<button cc="0x32" value="0x7F" off="0x00" name="cue_2_a_shift" deck="1" channel="98" />
<button cc="0x39" value="0x7F" off="0x00" name="cue_3_a_shift" deck="1" channel="98" />
<button cc="0x42" value="0x7F" off="0x00" name="cue_4_a_shift" deck="1" channel="98" />
<!--Cue buttons for deck B, no shift-->
<button cc="0x22" value="0x7F" off="0x00" name="cue_1_b" deck="2" channel="91" />
<button cc="0x32" value="0x7F" off="0x00" name="cue_2_b" deck="2" channel="91" />
<button cc="0x39" value="0x7F" off="0x00" name="cue_3_b" deck="2" channel="91" />
<button cc="0x42" value="0x7F" off="0x00" name="cue_4_b" deck="2" channel="91" />
<!--Cue buttons for deck A, with shift-->
<button cc="0x22" value="0x7F" off="0x00" name="cue_1_b_shift" deck="2" channel="99" />
<button cc="0x32" value="0x7F" off="0x00" name="cue_2_b_shift" deck="2" channel="99" />
<button cc="0x39" value="0x7F" off="0x00" name="cue_3_b_shift" deck="2" channel="99" />
<button cc="0x42" value="0x7F" off="0x00" name="cue_4_b_shift" deck="2" channel="99" />
</device>
Here is the screenshot of me trying to map hotcue 1 for each deck and delete hotcue for deck 1:
![](/img/405461/80072/Screenshot 2024-05-07 223016.png)
Despite this, neither hotcue button works. What could I be missing? A few things:
-I am using Windows 11.
-The unique identifiers were found by me using the midi log trick. Here is the exact excerpt from the log that I believe corresponds to this device:
[21:29:18] MIDI Device Identifying: \\?\usb#vid_2485&pid_504f#5&2aaa1eac&0&3#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\global (in:0 out:1) (name: CTRL)
[21:29:18] MIDI Device Identified by general midi: \\?\usb#vid_2485&pid_504f#5&2aaa1eac&0&3#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\global
-The midi codes and values were retrieved from a PDF included in https://www.dj-tech.com/media/archive/g0/a8/5c/DJ-Tech-CTRL-Midi-Mappings.zip and cross referenced using the MidiView tool for Windows.
Thanks in advance!
Posté Wed 08 May 24 @ 5:44 am
MIDI channel can only be 0 thru 15 (1-16) in VirtualDJ.
I'm not sure how you got 90 there.
If I was to make a guess, then pressing button cue_1_a should show on your MIDI monitor:
90 22 7F (button pressed), and
80 22 00 (button released), and that's where you got confused.
In this case, the first two digits (90) are a combination of EVENT TYPE, and CHANNEL
So, 90 is 9 and 0.
9 means button (note) pressed
0 is the channel
Then the next 2 digits (22) are the identifier (which note/control/encoder/etc), and the final 2 digits (7F) are the value of the note/control/encoder.
So, when you see 90 it's not channel 90. It's channel 0.
And when you see 98 22 7F, is note pressed, channel 8, NOTE 22, value 7F
Please note, that I emphasozed NOTE here.
9X is note pressed, which means that you need to identify the control by NOTE (MIDI NOTE) and not by CC.
BX is control change, and then you need to identify the control via CC.
So, if you see B6 14 7F it's : Control change, channel 6, cc 14, value 7F
Based on all of the above, your first button should be: <button note="0x22" name="cue_1_a" deck="1" channel="0" />
And for the love of simplicity, you should probably want to merge things similar to how VirtualDJ does on native definitions, so:
Finally, on your device header, make sure to include hardwareshift="true"
I'm not sure how you got 90 there.
If I was to make a guess, then pressing button cue_1_a should show on your MIDI monitor:
90 22 7F (button pressed), and
80 22 00 (button released), and that's where you got confused.
In this case, the first two digits (90) are a combination of EVENT TYPE, and CHANNEL
So, 90 is 9 and 0.
9 means button (note) pressed
0 is the channel
Then the next 2 digits (22) are the identifier (which note/control/encoder/etc), and the final 2 digits (7F) are the value of the note/control/encoder.
So, when you see 90 it's not channel 90. It's channel 0.
And when you see 98 22 7F, is note pressed, channel 8, NOTE 22, value 7F
Please note, that I emphasozed NOTE here.
9X is note pressed, which means that you need to identify the control by NOTE (MIDI NOTE) and not by CC.
BX is control change, and then you need to identify the control via CC.
So, if you see B6 14 7F it's : Control change, channel 6, cc 14, value 7F
Based on all of the above, your first button should be: <button note="0x22" name="cue_1_a" deck="1" channel="0" />
And for the love of simplicity, you should probably want to merge things similar to how VirtualDJ does on native definitions, so:
<button note="0x22" channel="0" deck="1" name="CUE_1"/>
<button note="0x22" channel="1" deck="2" name="CUE_1"/>
<button note="0x32" channel="0" deck="1" name="CUE_2"/>
<button note="0x32" channel="1" deck="2" name="CUE_2"/>
<button note="0x22" channel="8" deck="1" name="SHIFT_CUE_1"/>
<button note="0x22" channel="9" deck="2" name="SHIFT_CUE_1"/>
<button note="0x32" channel="8" deck="1" name="SHIFT_CUE_2"/>
<button note="0x32" channel="9" deck="2" name="SHIFT_CUE_2"/>
Finally, on your device header, make sure to include hardwareshift="true"
Posté Wed 08 May 24 @ 9:53 am
Thanks for the reply! I will give this a shot after my work day, but everything you mentioned makes sense. The manufacturer appears to have provided the note/code details in a weird fashion but the information I am looking for can be extracted from it.
Posté Wed 08 May 24 @ 1:27 pm
I had a chance to apply the changes you suggested and the button behaves as expected when I tried to map it to a simple play button. Thank you for the help!
Posté Wed 08 May 24 @ 10:23 pm