Kontrol DJ 500 KDJ 500 mapping

Hi,

After learning how to map for mixxx for the iddj I today began for the KDJ500.
I am aware of the following topic: viewtopic.php?f=1&t=945&hilit=kdj&start=20
But it just has lots of text and not so many code :mrgreen:

The correct code from that topic (incl. pitchbend with the scratchhweel) is:

<MixxxMIDIPreset mixxxVersion="1.7.1+" schemaVersion="1" > <controller id="Last used" > <controls> <control> <status>0x90</status> <midino>0x24</midino> <group>[Channel2]</group> <key>cue_default</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x1</midino> <group>[Channel1]</group> <key>flanger</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x26</midino> <group>[Channel2]</group> <key>play</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x2</midino> <group>[Channel1]</group> <key>filterLowKill</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x3</midino> <group>[Channel1]</group> <key>filterMidKill</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x4</midino> <group>[Channel1]</group> <key>filterHighKill</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x2c</midino> <group>[Channel1]</group> <key>pfl</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x2e</midino> <group>[Channel2]</group> <key>pfl</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0x24</midino> <group>[Channel2]</group> <key>cue_default</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0x26</midino> <group>[Channel2]</group> <key>play</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0xe</midino> <group>[Channel1]</group> <key>cue_default</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x34</midino> <group>[Playlist]</group> <key>SelectPrevTrack</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x1</midino> <group>[Master]</group> <key>headVolume</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x10</midino> <group>[Channel1]</group> <key>play</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x2</midino> <group>[Channel1]</group> <key>filterHigh</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x3</midino> <group>[Channel1]</group> <key>filterMid</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0x2c</midino> <group>[Channel1]</group> <key>pfl</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x4</midino> <group>[Channel1]</group> <key>filterLow</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x5</midino> <group>[Master]</group> <key>headMix</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0x2e</midino> <group>[Channel2]</group> <key>pfl</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x6</midino> <group>[Channel2]</group> <key>filterHigh</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x7</midino> <group>[Channel2]</group> <key>filterMid</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x8</midino> <group>[Channel2]</group> <key>filterLow</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x17</midino> <group>[Channel2]</group> <key>flanger</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x9</midino> <group>[Channel1]</group> <key>rate</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x18</midino> <group>[Channel2]</group> <key>filterLowKill</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xa</midino> <group>[Channel2]</group> <key>rate</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0xe</midino> <group>[Channel1]</group> <key>cue_default</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x19</midino> <group>[Channel2]</group> <key>filterMidKill</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xb</midino> <group>[Channel1]</group> <key>volume</key> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x1a</midino> <group>[Channel2]</group> <key>filterHighKill</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xc</midino> <group>[Channel2]</group> <key>volume</key> <options> <normal/> </options> </control> <control> <status>0x80</status> <midino>0x10</midino> <group>[Channel1]</group> <key>play</key> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x2c</midino> <group>[Channel2]</group> <key>jog</key> <options> <diff/> </options> </control> <control> <status>0xb0</status> <midino>0x28</midino> <group>[Channel1]</group> <key>jog</key> <options> <diff/> </options> </control> <control> <status>0xb0</status> <midino>0xd</midino> <group>[Master]</group> <key>crossfader</key> <options> <normal/> </options> </control> </controls> </controller> </MixxxMIDIPreset>

First I am writing down the midi controller numbers, so we can map our own presets, check the pdf. There are a lot of controllers !!!
KDJ500_midi_chart.PDF.7z (16.2 KB)

Cool, bonkhead. Let me know when you think your mapping for the KDJ 500 is ready/stable and I’ll include it in Mixxx.

Regards,
RJ

great news !

Thank you a lot, I’ll try it in a few days.

Is there any chance to see linux drivers for the kdj500 ? I asked on the official forum, but with no success. And as you can see, coding is not my main quality :mrgreen:

Digging up this old thread since I’ve got a second hand KDJ500 and got a bit further configuring it (thanks to Pegasus’ hints in viewtopic.php?f=1&t=945&p=4536&hilit=kdj500#p4539).

I’ve added two MIDI scripting functions to make the Jog and TrackSelectKnob work, hope someone can use this (bare in mind that the basic button/knob configuration is far from perfect/complete, but that can easily be changed in the xml or wizard/ui)

Both files (KDJ500.midi.xml and KDJ500-scripts.js) need to be placed in Mixxx/midi

I’m using Windows 7 with loopMIDI to create a virtual midi port called “KDJ500”, just make sure you use the same name as controller id in the xml to link both.

KDJ500.midi.xml:

<MixxxMIDIPreset mixxxVersion="1.10.0+" schemaVersion="1">
    <controller id="KDJ500">
        <scriptfiles>
            <file filename="KDJ500-scripts.js" functionprefix="KDJ500"/>
        </scriptfiles>
        <controls>
            <control>
                <status>0x90</status>
                <midino>0x24</midino>
                <group>[Channel2]</group>
                <key>cue_default</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x26</midino>
                <group>[Channel2]</group>
                <key>play</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x3</midino>
                <group>[Channel1]</group>
                <key>beatloop_8_toggle</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
			<control>
                <status>0x90</status>
                <midino>0x19</midino>
                <group>[Channel2]</group>
                <key>beatloop_8_toggle</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x28</midino>
                <group>[Channel2]</group>
                <key>LoadSelectedTrack</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x2c</midino>
                <group>[Channel1]</group>
                <key>pfl</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x2e</midino>
                <group>[Channel2]</group>
                <key>pfl</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x0e</midino>
                <group>[Channel1]</group>
                <key>cue_default</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x2a</midino>
                <group>[Playlist]</group>
                <key>KDJ500.track</key>
                <description></description>
                <options>
                    <Script-Binding/>
                </options>
            </control>
			<control>
                <status>0xb0</status>
                <midino>0x2e</midino>
                <group>[Playlist]</group>
                <key>KDJ500.track</key>
                <description></description>
                <options>
                    <Script-Binding/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x10</midino>
                <group>[Channel1]</group>
                <key>play</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x1</midino>
                <group>[Channel1]</group>
                <key>pregain</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x2</midino>
                <group>[Channel1]</group>
                <key>filterHigh</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x3</midino>
                <group>[Channel1]</group>
                <key>filterMid</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x28</midino>
                <group>[Channel1]</group>
                <key>KDJ500.jog</key>
                <description></description>
                <options>
                    <Script-Binding/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x4</midino>
                <group>[Channel1]</group>
                <key>filterLow</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0x90</status>
                <midino>0x14</midino>
                <group>[Channel1]</group>
                <key>LoadSelectedTrack</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x5</midino>
                <group>[Channel2]</group>
                <key>pregain</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x6</midino>
                <group>[Channel2]</group>
                <key>filterHigh</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x7</midino>
                <group>[Channel2]</group>
                <key>filterMid</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x2c</midino>
                <group>[Channel2]</group>
                <key>KDJ500.jog</key>
                <description></description>
                <options>
                    <Script-Binding/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x8</midino>
                <group>[Channel2]</group>
                <key>filterLow</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0x9</midino>
                <group>[Channel1]</group>
                <key>rate</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0xa</midino>
                <group>[Channel2]</group>
                <key>rate</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0xb</midino>
                <group>[Channel1]</group>
                <key>volume</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0xc</midino>
                <group>[Channel2]</group>
                <key>volume</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
            <control>
                <status>0xb0</status>
                <midino>0xd</midino>
                <group>[Master]</group>
                <key>crossfader</key>
                <description></description>
                <options>
                    <normal/>
                </options>
            </control>
        </controls>
        <outputs/>
    </controller>
</MixxxMIDIPreset> 

KDJ500-scripts.js:

KDJ500 = new Controller();

KDJ500.init = function (id, debugging) {
    
}

KDJ500.shutdown = function () {
    
}

KDJ500.jog = function (channel, control, value, status, group) {
    if(value==0x7F) engine.setValue(group,"jog",1);
    if(value==0x01) engine.setValue(group,"jog",-1);
}

KDJ500.track = function (channel, control, value, status, group) {
    if(value==0x7F) engine.setValue("[Playlist]","SelectTrackKnob",1); 
    if(value==0x01) engine.setValue("[Playlist]","SelectTrackKnob",-1); 
} 

KDJ500.zip (1.02 KB)

thank you ! I’ll try it as soon as possible.

I don’t get the midi virtual device thing ? Since I’m plugging my KDJ by real midi port with DIN cables (since no kdj usb driver exists for linux).

Edit : I think I get it. With your software, you replace the “kontroler” application wich translates usb signal in virtual midi notes.

I’m currently searching for a linux alternative to this software, something to map usb controllers into virtual midi. ANy help will be appreciated :wink:

thanks again

Thanks bonkhead and dnine,

I’ve added the latest version of the preset (dnine’s message from 2012/4/17) to the Mixxx 1.11.0 release.

Hi,

Digging this topic myself, does it mean that last MIXXX version has integrated support for my KDJ500 controller ?

Any idea on how to create a virtual midi port on linux (ubuntu 12lts 64bit), so I could use the kdj500 with USB instead of the old midi DIN connection I’m currently using ?

thanks

I just installed the last version, it seems that now it’s directly integrated to the software :astonished: :astonished: :astonished:

Thank you both of you !

I’ll test it and come back with results. I didn’t find any solution to use the KDJ by USB on linux like Dnine did with Loopmidi on windows, my computer skills are awfully limited :blush: But I still can connect the KDJ with DIN.

I’ll keep you informed in the next days. I’m really impressed by Mixxx evolution. Congratulations.

Hi,

I tested MIXXX today, with my KDJ500 plugged by DIN on my soundcard (so no need for drivers, wich doesn’x exist for linux), using the Dnine preset available in prefs. It’s working perfectly ! Mixxx itself works really well.

Now I need to learn how to add some complex things on my controller, like shift+button for 2nd functionality. I don’t know if it’s possible by DIN or if it’s something reserved to USB proprietary driver. I’ll take a look on the documentation.

I would also like to modify how the wheels are working. For now they work as fine pitchbend. I’d like to have a “browsing” 2nd functionality (once again, on the KDJ500 we have a 3 positions -2 fixed positions, 1 “punch” position- switch for this purpose : 1st position, 1st function for the wheel, 2nd position, 2nd function, 3d position for “punch” 2nd function).

I’ll take a look on the doc and come back here.

Here’s my first update. I added headphone volume and headphone mix settings. It’s my first result with shift functions (using a shift button + another knob/slider etc…).

Here’s the explanations of the new functionnalities (since the KDJ500 have minimal informations on the deck) :

The headphone volume function is controlled pushing left shift button + channel 1 gain knob

The headmix function is controlled pushing right shift button + channel 2 gain knob

I’ll add other functions soon. Once I’ll finish all the decks shift functions, I’ll work on the jogwheel shift functions( :confused: ).

<MixxxMIDIPreset mixxxVersion="1.10.0+" schemaVersion="1"> <info> <name>Kontrol Dj KDJ500</name> <author>bonkhead and dnine</author> <forums>http://www.mixxx.org/forums/viewtopic.php?f=7&amp;t=1609</forums> </info> <controller id="KDJ500"> <scriptfiles> <file filename="Kontrol-Dj-KDJ500-scripts.js" functionprefix="KDJ500"/> </scriptfiles> <controls> <control> <group>[Master]</group> <key>headVolume</key> <status>0xB0</status> <midino>0x1B</midino> <options> <normal/> </options> </control> <control> <group>[Master]</group> <key>headMix</key> <status>0xB0</status> <midino>0x1F</midino> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x24</midino> <group>[Channel2]</group> <key>cue_default</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x26</midino> <group>[Channel2]</group> <key>play</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x3</midino> <group>[Channel1]</group> <key>beatloop_8_toggle</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x19</midino> <group>[Channel2]</group> <key>beatloop_8_toggle</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x28</midino> <group>[Channel2]</group> <key>LoadSelectedTrack</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x2c</midino> <group>[Channel1]</group> <key>pfl</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x2e</midino> <group>[Channel2]</group> <key>pfl</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x0e</midino> <group>[Channel1]</group> <key>cue_default</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x2a</midino> <group>[Playlist]</group> <key>KDJ500.track</key> <description></description> <options> <Script-Binding/> </options> </control> <control> <status>0xb0</status> <midino>0x2e</midino> <group>[Playlist]</group> <key>KDJ500.track</key> <description></description> <options> <Script-Binding/> </options> </control> <control> <status>0x90</status> <midino>0x10</midino> <group>[Channel1]</group> <key>play</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x1</midino> <group>[Channel1]</group> <key>pregain</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x2</midino> <group>[Channel1]</group> <key>filterHigh</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x3</midino> <group>[Channel1]</group> <key>filterMid</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x28</midino> <group>[Channel1]</group> <key>KDJ500.jog</key> <description></description> <options> <Script-Binding/> </options> </control> <control> <status>0xb0</status> <midino>0x4</midino> <group>[Channel1]</group> <key>filterLow</key> <description></description> <options> <normal/> </options> </control> <control> <status>0x90</status> <midino>0x14</midino> <group>[Channel1]</group> <key>LoadSelectedTrack</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x5</midino> <group>[Channel2]</group> <key>pregain</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x6</midino> <group>[Channel2]</group> <key>filterHigh</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x7</midino> <group>[Channel2]</group> <key>filterMid</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x2c</midino> <group>[Channel2]</group> <key>KDJ500.jog</key> <description></description> <options> <Script-Binding/> </options> </control> <control> <status>0xb0</status> <midino>0x8</midino> <group>[Channel2]</group> <key>filterLow</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0x9</midino> <group>[Channel1]</group> <key>rate</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xa</midino> <group>[Channel2]</group> <key>rate</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xb</midino> <group>[Channel1]</group> <key>volume</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xc</midino> <group>[Channel2]</group> <key>volume</key> <description></description> <options> <normal/> </options> </control> <control> <status>0xb0</status> <midino>0xd</midino> <group>[Master]</group> <key>crossfader</key> <description></description> <options> <normal/> </options> </control> </controls> <outputs/> </controller> </MixxxMIDIPreset>

I’ve got a question, concerning the KDJ500 XML file : is it normal that some controls are written like this, with status and midi note first ?

<control> <status>0xb0</status> <midino>0xd</midino> <group>[Master]</group> <key>crossfader</key> <description></description> <options> <normal/> </options> </control>

Another question is about the end of the XML file :

        </controls>
        <outputs/>
    </controller>
</MixxxMIDIPreset>[/code]


Is it normal that outputs is written this way, instead of [code]
<outputs></outputs>

thanks

Hi,

Regardless the other questions I have, I 'm still fighting with the scratch mode. The “easy” javascript scripting is not that easy :laughing:

Out of box (=using Dnine script and controls), the KDJ500 jog acts in scratch mode when the deck is OFF, and slight pitch bend when the deck is playing. I’d like to have scratch mode available during play. The JS script just show a function to “read” the jogwheel, but I don’t understand how MIXX understand it. In the XML, I don’t see (or understand) the link between the JS script and the xml commands list.

Now I know how to spot the midi values and all, and add “shift” simple functions in XML. But the jogs are killing me.

Here’s what I tried :

the JS for the scratch :

KDJ500.scratch = function (channel, control, value, status, group) { if(value==0x7F) engine.setValue(group,"scratch",1); if(value==0x01) engine.setValue(group,"scratch",-1); }

the XML :

<control> <status>0xB0</status> <midino>0x29</midino> <group>[Channel1]</group> <key>KDJ500.scratch</key> <description></description> <options> <Script-Binding/> </options> </control>

Using this setting, once I turn the jog in a way of the other, the song keep running no matter play is ON or OFF.

When I push play button, the sound become weird, and the song keep running.

For information, each jog have a 2 positions switch. Using MIXXX debug mode, it appears that the switch have it own midi even number, but when it’s ON, the jog wheel midi output is the same. It’s not really a “shift” mode. I don’t know if it’s possible to set this on MIXXX.

So I decided to use the shift button + jog wheel for now. It’s simplier since the jog wheel, when shift is pushed, have a diferent midi output. Better than nothing. So my goal is to have pitch bend on 1st jog function, and scratch on shift button+jog.

For information, here’s the midi output for left jogwheel.

jogwheel : 0X28 when turned, 0x32 when stopped
switch : 0X12 (it doesn’t change the jogwheel number when activated)
left shift button : 0x0D
jogwheel with left shift pressed : 0X29 when turned, 0X33 when stopped

On tracktor, I was using 1st function : pitch bend, 2d function (switch) scratch, 3rd function (jog + shift button) fast cd-style forward/backward. If I could do the same on MIXXX, it would be really nice.

Any help will be appreciated. I read, and read again the doc, but I don’t understand what to do :blush:

Here’s my last efforts for the day :unamused:

KDJ500.wheelTouch = function (channel, control, value, status) { if (value == 0x7F) { var alpha = 1.0/8; var beta = alpha/32; engine.scratchEnable(1, 128, 33+1/3, alpha, beta); } else { // If button up engine.scratchDisable(1); } }

WIth this script, theorically shift button + jogwheel 1 should scratch. I replaced the variable “currentdeck” by a number since I didn’t achieve to define a variable. The good thing is that setting doesn’t crash the other controller settings. THe bad thing is that it works only in one direction, more or less (it acts like a vynil brake).

I’m lost. I’m not a develloper. :frowning:

thank you for your help.

It’s the one man show again :mrgreen:

Since I didn’t find any way to make the scratching mode or use the jog switch, I decided to focus myself on the fast rewind/forward mode (shift button + jog).

Here’s the codes :


KDJ500.scratch = function (channel, control, value, status, group) {
    if(value==0x7F) engine.setValue(group,"scratch",3);
    if(value==0x01) engine.setValue(group,"scratch",-3);
}
<control> 
                <group>[Channel1]</group>
                <key>KDJ500.scratch</key>
                <status>0xB0</status>
                <midino>0x29</midino>
                <options>
                    <Script-Binding/>
                </options>
            </control>

I’m using the scratch command, wich is more like a fast rewind/play function than a scratch mode.

It’s “almost” working. The problem is that the fast play/rewind doesn’t stop when I stop turning the jogwheel. Any help will be appreciated. In the mean time, I’ll continue struggle with scripting.

I think I know why the fast rewind/fwd doesn’t work : when I release the jogwheel, a new midino is sent (0x33). If I understand correctly (probably not) the solution would be mapping the midino 0x33 to stop the fast rewind/fwd behaviour. But it’s probably a more complex script with variables and all.

I give up. I spent another evening trying to figure how to create these scripted mappings. I wanted 2dn and 3rd options for jogs wheels, with scratching and rewind/fwd, I wanted BPM led blinking…Again I’m not a programmer. Documentation says it’s easy, I wonder for who :laughing: I’m probably too dumb.

If anyone want to help, I’ll be happy to give midi notes, events and all and make some tests. But spending all my evenings with something I just don’t understand is useless.

Thanks for anyone who will help.

Where does it say its easy ? :nerd: This is a scripting language that in theory we can do “anything” with Mixxx. I don’t think it’s easy ! This is a case of learning the thing step by step. I’m making a mapping for the M-Audio Oxygen 49 Silver. For a start the mappings were a nightmare as I had to go into the M-Audio Enigma software and program the keyboard controls for MIDI mapping that make sense with Mixxx. A bit of MIDI trial by fire for me as its not obvious that some MIDI controls send specialist messages, etc. Then I mapped a simple function - engine brake - to one control. Works ! Then on to the scratching. More difficult. I used the function quoted on the Mixxx wiki, and bound a button to the first function, and my pitch wheel to the second. Mixxx seg-faults when the button is pressed … “Warning [Controller]: ControlDoublePrivate::getControl returning NULL for” … a bit of research shows that an unknown engine function may be being called that has changed with the Mixxx version, although I wonder if I should be setting “.currentDeck” somewhere.

See, not exactly “easy” :confused:

However I suggest studying the other controller scripts in the “controller” directory. It also helps knowing a bit of Javascript and having done some coding before … if it comes to it maybe you can find a geek friend ?