The build quality is what you'd expect from the pricetag, being about as robust as a DJ Hero 2 controller but with more functionality. With two jogwheels, a crossfader, 14 rotaries, 16 backlit buttons and MIDI over USB already functioning out of the box it presents an interesting hacking project for controllerism and hardware modding.
As you'd expect, this unit is intended to be used with included software. I assumed there were going to be issues using it in recognizing it as a MIDI device outside of Cross DJ, but OSX picked it up as a MIDI device:
I opened Max6 and set up a patch to check what MIDI messages were being sent and to see whether the jogwheels, rotaries and buttons had dedicated assignments. Only the jogwheels were sending values on 24 & 25 and MIDI notes C#6 & C6 respectively.
Instead of the jogwheels sending the full range from 0-127 they only send a 1 value with a forward (clockwise) movement of the jogwheel and a 127 value when moved in reverse/anticlockwise. Going by Precision Audio's amusing Product Demonstration, the controller can actually scrub through tracks using these wheels similar to Traktor - I guess it moves the playhead forward and backward incrementally whenever it receives these values on their respective controller numbers.
The video also mentions a "break" function on the jogwheels which pauses the playing track on each channel by pushing in the jogwheel and releasing it to resume playback. This explains the noteon and noteoff messages on C6 & C#6.
I used MIDI Monitor to check what messages were being sent to and/or from the controller when Cross DJ boots. It does indeed send a list of noteoff messages which then trigger a list of control values to be sent back (perhaps polled by the software.)
After this the controller sends MIDI from all of the buttons and rotaries even with Cross DJ closed.
The full dump of the activation string is below:
22:53:13.979 To GW MID-100 Note Off 1 D#2 0
22:53:13.979 To GW MID-100 Note Off 1 B2 0
22:53:13.979 To GW MID-100 Note Off 1 C3 0
22:53:13.979 To GW MID-100 Note Off 1 E3 0
22:53:13.979 To GW MID-100 Note Off 1 F#3 0
22:53:13.979 To GW MID-100 Note Off 1 B3 0
22:53:13.979 To GW MID-100 Note Off 1 D4 0
22:53:13.979 To GW MID-100 Note Off 1 E4 0
22:53:13.979 To GW MID-100 Note Off 1 A#4 0
22:53:13.979 To GW MID-100 Note Off 1 B4 0
22:53:13.979 To GW MID-100 Note Off 1 C5 0
22:53:13.979 To GW MID-100 Note Off 1 C#5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 F#5 0
22:53:13.979 To GW MID-100 Note Off 1 G5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D4 0
22:53:13.979 To GW MID-100 Note Off 1 A#4 0
22:53:13.979 To GW MID-100 Note Off 1 B4 0
22:53:13.979 To GW MID-100 Note Off 1 D#2 0
22:53:13.979 To GW MID-100 Note On 1 F#5 127
22:53:13.979 To GW MID-100 Note Off 1 B2 0
22:53:13.979 To GW MID-100 Note Off 1 E3 0
22:53:13.979 To GW MID-100 Note Off 1 E4 0
22:53:13.979 To GW MID-100 Note Off 1 C5 0
22:53:13.979 To GW MID-100 Note Off 1 C#5 0
22:53:13.979 To GW MID-100 Note Off 1 C3 0
22:53:13.979 To GW MID-100 Note On 1 G5 127
22:53:13.979 To GW MID-100 Note Off 1 F#3 0
22:53:13.979 To GW MID-100 Note Off 1 B3 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:13.979 To GW MID-100 Note Off 1 D5 0
22:53:13.979 To GW MID-100 Note Off 1 D#5 0
22:53:14.160 From GW MID-100 Control 1 General Purpose 1 (coarse) 63
22:53:14.160 From GW MID-100 Control 1 Effect Control 1 (coarse) 127
22:53:14.161 From GW MID-100 Control 1 Effect Control 2 (coarse) 62
22:53:14.161 From GW MID-100 Control 1 Expression (coarse) 120
22:53:14.161 From GW MID-100 Control 1 Controller 9 65
22:53:14.162 From GW MID-100 Control 1 Pan (coarse) 68
22:53:14.163 From GW MID-100 Control 1 General Purpose 2 (coarse) 60
22:53:14.163 From GW MID-100 Control 1 General Purpose 4 (coarse) 61
22:53:14.163 From GW MID-100 Control 1 Controller 15 71
22:53:14.164 From GW MID-100 Control 1 Balance (coarse) 56
22:53:14.164 From GW MID-100 Control 1 General Purpose 3 (coarse) 55
22:53:14.165 From GW MID-100 Control 1 Controller 20 85
22:53:14.165 From GW MID-100 Control 1 General Purpose 1 (coarse) 63
22:53:14.166 From GW MID-100 Control 1 Effect Control 1 (coarse) 127
22:53:14.166 From GW MID-100 Control 1 Effect Control 2 (coarse) 62
22:53:14.166 From GW MID-100 Control 1 Expression (coarse) 120
22:53:14.167 From GW MID-100 Control 1 Controller 9 65
22:53:14.168 From GW MID-100 Control 1 Pan (coarse) 68
22:53:14.168 From GW MID-100 Control 1 General Purpose 2 (coarse) 60
22:53:14.168 From GW MID-100 Control 1 General Purpose 4 (coarse) 61
22:53:14.169 From GW MID-100 Control 1 Controller 15 71
22:53:14.169 From GW MID-100 Control 1 Balance (coarse) 56
22:53:14.169 From GW MID-100 Control 1 General Purpose 3 (coarse) 55
22:53:14.170 From GW MID-100 Control 1 Controller 20 85
22:53:14.170 From GW MID-100 Control 1 General Purpose 1 (coarse) 63
22:53:14.171 From GW MID-100 Control 1 Effect Control 1 (coarse) 127
22:53:14.171 From GW MID-100 Control 1 Effect Control 2 (coarse) 62
22:53:14.171 From GW MID-100 Control 1 Expression (coarse) 120
22:53:14.172 From GW MID-100 Control 1 Controller 9 65
22:53:14.310 To GW MID-100 Note Off 1 D#5 0
22:53:14.310 To GW MID-100 Note Off 1 D#5 0
22:53:14.310 To GW MID-100 Note Off 1 D5 0
22:53:14.310 To GW MID-100 Note Off 1 D5 0
22:53:14.310 To GW MID-100 Note Off 1 D#5 0
22:53:14.310 To GW MID-100 Note Off 1 D5 0
22:53:14.310 To GW MID-100 Note Off 1 D#5 0
Converted these messages to a txt file and loaded it into a coll. A dump message sends this activation string to the controller.
1, 51 0;
2, 59 0;
3, 60 0;
4, 64 0;
5, 66 0;
6, 71 0;
7, 74 0;
8, 76 0;
9, 82 0;
10, 83 0;
11, 84 0;
12, 85 0;
13, 86 0;
14, 87 0;
15, 90 0;
16, 91 0;
17, 86 0;
18, 86 0;
19, 87 0;
20, 87 0;
21, 86 0;
22, 87 0;
23, 74 0;
24, 82 0;
25, 83 0;
26, 51 0;
27, 90 127;
28, 59 0;
29, 64 0;
30, 76 0;
31, 84 0;
32, 85 0;
33, 60 0;
34, 91 127;
35, 66 0;
36, 71 0;
37, 86 0;
38, 86 0;
39, 87 0;
40, 87 0;
41, 86 0;
42, 86 0;
42, 87 0;
43, 87 0;
44, 86 0;
45, 87 0;
47, 87 0;
48, 87 0;
49, 86 0;
50, 86 0;
51, 87 0;
52, 86 0;
53, 87 0;
Draft map of the native MIDI assignments of the controller:
Dump of the De-activation string that is sent when Cross DJ closes:
01:26:34.432 To GW MID-100 Note Off 1 D4 0
01:26:34.432 To GW MID-100 Note Off 1 A#4 0
01:26:34.432 To GW MID-100 Note Off 1 B4 0
01:26:34.432 To GW MID-100 Note Off 1 D#2 0
01:26:34.432 To GW MID-100 Note Off 1 F#5 0
01:26:34.432 To GW MID-100 Note Off 1 B2 0
01:26:34.432 To GW MID-100 Note Off 1 E3 0
01:26:34.432 To GW MID-100 Note Off 1 E4 0
01:26:34.432 To GW MID-100 Note Off 1 C5 0
01:26:34.432 To GW MID-100 Note Off 1 C#5 0
01:26:34.432 To GW MID-100 Note Off 1 C3 0
01:26:34.432 To GW MID-100 Note Off 1 G5 0
01:26:34.432 To GW MID-100 Note Off 1 F#3 0
01:26:34.432 To GW MID-100 Note Off 1 B3 0
01:26:34.432 To GW MID-100 Note Off 1 D#2 0
01:26:34.432 To GW MID-100 Note Off 1 B2 0
01:26:34.432 To GW MID-100 Note Off 1 C3 0
01:26:34.432 To GW MID-100 Note Off 1 E3 0
01:26:34.432 To GW MID-100 Note Off 1 F#3 0
01:26:34.432 To GW MID-100 Note Off 1 B3 0
01:26:34.432 To GW MID-100 Note Off 1 D4 0
01:26:34.432 To GW MID-100 Note Off 1 E4 0
01:26:34.432 To GW MID-100 Note Off 1 A#4 0
01:26:34.432 To GW MID-100 Note Off 1 B4 0
01:26:34.432 To GW MID-100 Note Off 1 C5 0
01:26:34.432 To GW MID-100 Note Off 1 C#5 0
01:26:34.432 To GW MID-100 Note Off 1 D5 0
01:26:34.432 To GW MID-100 Note Off 1 D#5 0
01:26:34.432 To GW MID-100 Note Off 1 F#5 0
01:26:34.432 To GW MID-100 Note Off 1 G5 0
01:26:34.437 From GW MID-100 Control 1 Expression (coarse) 68
01:26:34.438 From GW MID-100 Control 1 Controller 9 107
01:26:34.438 From GW MID-100 Control 1 Pan (coarse) 86
01:26:34.439 From GW MID-100 Control 1 General Purpose 2 (coarse) 63
01:26:34.439 From GW MID-100 Control 1 General Purpose 4 (coarse) 119
01:26:34.439 From GW MID-100 Control 1 Controller 15 65
01:26:34.440 From GW MID-100 Control 1 Balance (coarse) 42
01:26:34.440 From GW MID-100 Control 1 General Purpose 3 (coarse) 68
01:26:34.440 From GW MID-100 Control 1 Controller 20 115
01:26:34.441 From GW MID-100 Control 1 General Purpose 1 (coarse) 53
01:26:34.441 From GW MID-100 Control 1 Effect Control 1 (coarse) 65
01:26:34.442 From GW MID-100 Control 1 Effect Control 2 (coarse) 63
01:26:34.442 From GW MID-100 Control 1 Expression (coarse) 68
01:26:34.443 From GW MID-100 Control 1 Controller 9 107
01:26:34.443 From GW MID-100 Control 1 Pan (coarse) 86
01:26:34.444 From GW MID-100 Control 1 General Purpose 2 (coarse) 63
01:26:34.444 From GW MID-100 Control 1 General Purpose 4 (coarse) 119
01:26:34.444 From GW MID-100 Control 1 Controller 15 65
01:26:34.444 From GW MID-100 Control 1 Balance (coarse) 42
01:26:34.445 From GW MID-100 Control 1 General Purpose 3 (coarse) 68
01:26:34.445 From GW MID-100 Control 1 Controller 20 115
01:26:34.445 From GW MID-100 Control 1 General Purpose 1 (coarse) 53
01:26:34.445 From GW MID-100 Control 1 Effect Control 1 (coarse) 65
Next,
MIDI Map of backlit buttons
Max >> Controller activation string
Waveform Scratch in Max
TBC
According to MIXXX forum, sending any MIDI output to it will initialize the controls and make them operational, it doesn't have to be the particular Mixvibes sequence. The Mixvibes initialization and shutdown sequences are presumably a side effect of it lighting up and then turning off the button LEDs, because Mixvibes is not actually MIDI scriptable, it uses a simple I/O mapping system with modifiers.
ReplyDeleteTo discover how to light up particular buttons, you have two options. One option is to use Mixvibes (bundled, or time-limited Demo but not Free version) and export the MIDI mapping as XML from it, it will contain the output mapping too and isn't too hard to read. Other option is to examine the user-created MIDI script for MIXXX that's on the forums.
I also think i know why they did this. It allows the controller to burst the inputs into the software, so that the rotary and fader positions in the software match the hardware upon software startup.
Deletehello,
ReplyDeleteI know the post is old.
I have silvercrest sdj 100 a1 since 2 week ago and i am on linux mint.
I have try to connect the controller with your explication, by sending midi note off signals in mixxx output signal.
But it's not working the faders and buttons don't send midi signal
how do your manipulation on mixxx could you explain me please.