@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()