Midi remote mapping to Jog Wheel?

@digitallysane I played around a bit with the API and was able to successfully map an endless encoder (on a DJ TechTools MIDI Twister) to the Jog Left and Jog Right functions.
I’m posting the script as-is below if you want to have a look.
Remember you will have to make adjustments to have it work with your hardware.

JS Script
var midiremote_api = require('midiremote_api_v1')
var expectedName = "Midi Fighter Twister"
var deviceDriver = midiremote_api.makeDeviceDriver('DJ TECHTOOLS', expectedName, 'WOLAND')
var midiInput = deviceDriver.mPorts.makeMidiInput()
var midiOutput = deviceDriver.mPorts.makeMidiOutput()
deviceDriver.makeDetectionUnit().detectPortPair(midiInput, midiOutput)
    .expectInputNameEquals(expectedName)
    .expectOutputNameEquals(expectedName)
var surface = deviceDriver.mSurface

function makeJog(knobIndex, row, channel) {
    var knob = {}
    var cc = knobIndex
    knob.jogLeft = deviceDriver.mSurface.makeCustomValueVariable("JogLeft")
    knob.jogRight = deviceDriver.mSurface.makeCustomValueVariable("JogRight")
    knob.encoder = surface.makeKnob(knobIndex, row, 1, 1)
    knob.encoder.mSurfaceValue.mMidiBinding.setInputPort(midiInput).bindToControlChange(channel, cc)    
    knob.encoder.mSurfaceValue.mOnProcessValueChange = function (activeDevice, value) {
        if (value < 0.5) {
            knob.jogLeft.setProcessValue(activeDevice, 1)
        }
    }
    knob.encoder2 = surface.makeKnob(knobIndex + 1, row, 1, 1)
    knob.encoder2.mSurfaceValue.mMidiBinding.setInputPort(midiInput).bindToControlChange(channel, cc)
    knob.encoder2.mSurfaceValue.mOnProcessValueChange = function (activeDevice, value) {        
        if (value > 0.5) {            
            knob.jogRight.setProcessValue(activeDevice, 1)
        }
    }
    return knob
}

function makeSurfaceElements() {
    var surfaceElements = {}
    surfaceElements.knob = {}
    surfaceElements.knob[0] = makeJog(0, 1, 0)
    return surfaceElements
}
var SE = makeSurfaceElements()

function makeBindings() {
    var page = deviceDriver.mMapping.makePage('JOG')

    page.makeCommandBinding(SE.knob[0].jogLeft , 'Transport', 'Jog Left')
    page.makeCommandBinding(SE.knob[0].jogRight , 'Transport', 'Jog Right')
    return page
}
var page = makeBindings()
1 Like