Zoom and Project scroll using knobs

Here’s some working code for setting one knob to zoom and one knob to nudge (move project cursor) if it helps anyone in the future:

//-----------------------------------------------------------------------------
// 2. SURFACE LAYOUT - create control elements and midi bindings
//-----------------------------------------------------------------------------

// create control element representing your hardware's surface
var knob = deviceDriver.mSurface.makeKnob(0, 0, 1, 3)
var knob2 = deviceDriver.mSurface.makeKnob(3, 0, 1, 3)

// bind midi ports to surface elements
knob.mSurfaceValue.mMidiBinding.setInputPort(midiInput).bindToControlChange(0, 42).setTypeRelativeBinaryOffset();
knob2.mSurfaceValue.mMidiBinding.setInputPort(midiInput).bindToControlChange(0, 44).setTypeRelativeBinaryOffset();

//-----------------------------------------------------------------------------
// 3. HOST MAPPING - create mapping pages and host bindings
//-----------------------------------------------------------------------------
var page = deviceDriver.mMapping.makePage('Default')

// Nudge Knob
var nudgeLeftVariable = deviceDriver.mSurface.makeCustomValueVariable('NudgeLeft')
var nudgeRightVariable = deviceDriver.mSurface.makeCustomValueVariable('NudgeRight')

page.makeCommandBinding(nudgeLeftVariable, 'Transport', 'Nudge Cursor Left')
page.makeCommandBinding(nudgeRightVariable, 'Transport', 'Nudge Cursor Right')

createCommandKnob(knob, nudgeLeftVariable, nudgeRightVariable);

// Zoom knob
var zoomInVariable = deviceDriver.mSurface.makeCustomValueVariable('ZoomIn')
var zoomOutVariable = deviceDriver.mSurface.makeCustomValueVariable('ZoomOut')

page.makeCommandBinding(zoomInVariable, 'Zoom', 'Zoom In')
page.makeCommandBinding(zoomOutVariable, 'Zoom', 'Zoom Out')

createCommandKnob(knob2, zoomInVariable, zoomOutVariable);

/**
 * @param {MR_Knob} knob
 * @param {MR_SurfaceCustomValueVariable} commandIncrease
 * @param {MR_SurfaceCustomValueVariable} commandDecrease
 */

function createCommandKnob(knob, commandIncrease, commandDecrease) {
  knob.mSurfaceValue.mOnProcessValueChange = function(activeDevice, value) {
    if(value === 0 ) {
      commandIncrease.setProcessValue(activeDevice, 1)
    } else if (value === 1) {
      commandDecrease.setProcessValue(activeDevice, 1)
    }
  }
}
5 Likes