External USB Touchpad as XY-type Controller

Home :: Reviews of DJ equipment :: External USB Touchpad as XY-type ControllerReply
External USB Touchpad as XY-type Controller
Posted on: 15.05.2011 by Chasidy Heckenbach
i've searched and found a lot of people discussing this type of thing, but not quite the same.

i wanted to use my external usb touchpad as an XY type controller while not messing with the windows mouse cursor at all - letting me use the touchpad on my laptop as normal. (so then i can buy an lpd8 and not a nanopad )

on a different thread someone mentioned some software for windows called glovepie.org that allows you to use custom scripts to do exactly what you need. i'm using loopMIDI for the virtual midi port (tho midiyoke would work too i presume).

this script assumes the virtual midi device is number 8. clicking the right touchpad button will make it reset the X and Y vals to the center after 1.5 seconds - left button click to reset that behaviour. outputs X as CC0 and Y as CC1.

it's not an overly complex script but pasting here in case it's any use to anyone. i did start out with a much simpler script but this seems to work better. i'll probably tweak it more - but this at least does work ok. i'm using it to control params 1 and 2 of a 'single' effect. it does seem to eat some cpu when i go crazy on the touchpad so might need to see if i can make more efficient.

i guess you could do some cunning bomes type translations with this glovepie software too.

Code:
if (var.XYpadInit == 0) then
   midi.DeviceOut = 8 // device number to use
   debug = midi.OutDevName // show device name in use
   midi.GeneralMidi = False
   midi.DefaultChannel = 1
   var.XYpadXres = 500
   var.XYpadYres = 320
   var.XYpadXborder = 10
   var.XYpadYborder = 10
   var.XYpadXmax = var.XYpadXres + var.XYpadXborder * 2
   var.XYpadYmax = var.XYpadYres + var.XYpadYborder * 2
   var.XYpadXmidiMin = 0
   var.XYpadXmidiMax = 100
   var.XYpadYmidiMin = 0
   var.XYpadYmidiMax = 100
   var.XYpadMode1Time = 1.5
   var.XYpadInit = 1
endif

mouse.Swallow = true
fakemouse.DirectInputX = mouse1.DirectInputX
fakemouse.DirectInputY = mouse1.DirectInputY
mouse.LeftButton = mouse1.LeftButton
mouse.RightButton = mouse1.RightButton
mouse.MiddleButton = mouse1.MiddleButton
mouse.XButton1 = mouse1.XButton1
mouse.XButton2 = mouse1.XButton2

if mouse2.present then

  if (mouse2.LeftButton) then
     var.XYpadMode = 0
  endif

  if (mouse2.RightButton) then
     var.XYpadMode = 1
  endif

  var.XYpadXdelta = Delta(mouse2.DirectInputX)
  var.XYpadYdelta = Delta(mouse2.DirectInputY)

  if (var.XYpadXdelta != 0 || var.XYpadYdelta != 0) then

     var.XYpadTime = TimeStamp()

     if (var.XYpadXdelta != 0) then
        var.XYpadX = var.XYpadX + var.XYpadXdelta

        if (var.XYpadX < 0) then var.XYpadX = 0
        if (var.XYpadX > var.XYpadXmax) then var.XYpadX = var.XYpadXmax

        if (var.XYpadX < var.XYpadXborder) then
           var.XYpadXmidiCC = var.XYpadXmidiMin
        elseif (var.XYpadX > var.XYpadXres + var.XYpadXborder) then
           var.XYpadXmidiCC = var.XYpadXmidiMax
        else
            var.XYpadXmidiCC = floor(MapRange(var.XYpadX, 0, var.XYpadXmax, var.XYpadXmidiMin, var.XYpadXmidiMax))
        endif

        midi.Control0Coarse = var.XYpadXmidiCC%
     endif

     if (var.XYpadYdelta != 0) then
        var.XYpadY = var.XYpadY - var.XYpadYdelta

        if (var.XYpadY < 0) then var.XYpadY = 0
        if (var.XYpadY > var.XYpadYmax) then var.XYpadY = var.XYpadYmax

        if (var.XYpadY < var.XYpadYborder) then
           var.XYpadYmidiCC = var.XYpadYmidiMin
        elseif (var.XYpadY > var.XYpadYres + var.XYpadYborder) then
           var.XYpadYmidiCC = var.XYpadYmidiMax
        else
            var.XYpadYmidiCC = floor(MapRange(var.XYpadY, 0, var.XYpadYmax, var.XYpadYmidiMin, var.XYpadYmidiMax))
        endif

        midi.Control1Coarse = var.XYpadYmidiCC%
     endif
  else
      if (var.XYpadMode == 1 && var.XYpadTime < TimeStamp() - var.XYpadMode1Time) then
         var.XYpadX =  floor(var.XYpadXres / 2)
         var.XYpadY =  floor(var.XYpadYres / 2)
      endif
  endif
endif
Chasidy Heckenbach
15.05.2011
i've searched and found a lot of people discussing this type of thing, but not quite the same.

i wanted to use my external usb touchpad as an XY type controller while not messing with the windows mouse cursor at all - letting me use the touchpad on my laptop as normal. (so then i can buy an lpd8 and not a nanopad )

on a different thread someone mentioned some software for windows called glovepie.org that allows you to use custom scripts to do exactly what you need. i'm using loopMIDI for the virtual midi port (tho midiyoke would work too i presume).

this script assumes the virtual midi device is number 8. clicking the right touchpad button will make it reset the X and Y vals to the center after 1.5 seconds - left button click to reset that behaviour. outputs X as CC0 and Y as CC1.

it's not an overly complex script but pasting here in case it's any use to anyone. i did start out with a much simpler script but this seems to work better. i'll probably tweak it more - but this at least does work ok. i'm using it to control params 1 and 2 of a 'single' effect. it does seem to eat some cpu when i go crazy on the touchpad so might need to see if i can make more efficient.

i guess you could do some cunning bomes type translations with this glovepie software too.

Code:
if (var.XYpadInit == 0) then
   midi.DeviceOut = 8 // device number to use
   debug = midi.OutDevName // show device name in use
   midi.GeneralMidi = False
   midi.DefaultChannel = 1
   var.XYpadXres = 500
   var.XYpadYres = 320
   var.XYpadXborder = 10
   var.XYpadYborder = 10
   var.XYpadXmax = var.XYpadXres + var.XYpadXborder * 2
   var.XYpadYmax = var.XYpadYres + var.XYpadYborder * 2
   var.XYpadXmidiMin = 0
   var.XYpadXmidiMax = 100
   var.XYpadYmidiMin = 0
   var.XYpadYmidiMax = 100
   var.XYpadMode1Time = 1.5
   var.XYpadInit = 1
endif

mouse.Swallow = true
fakemouse.DirectInputX = mouse1.DirectInputX
fakemouse.DirectInputY = mouse1.DirectInputY
mouse.LeftButton = mouse1.LeftButton
mouse.RightButton = mouse1.RightButton
mouse.MiddleButton = mouse1.MiddleButton
mouse.XButton1 = mouse1.XButton1
mouse.XButton2 = mouse1.XButton2

if mouse2.present then

  if (mouse2.LeftButton) then
     var.XYpadMode = 0
  endif

  if (mouse2.RightButton) then
     var.XYpadMode = 1
  endif

  var.XYpadXdelta = Delta(mouse2.DirectInputX)
  var.XYpadYdelta = Delta(mouse2.DirectInputY)

  if (var.XYpadXdelta != 0 || var.XYpadYdelta != 0) then

     var.XYpadTime = TimeStamp()

     if (var.XYpadXdelta != 0) then
        var.XYpadX = var.XYpadX + var.XYpadXdelta

        if (var.XYpadX < 0) then var.XYpadX = 0
        if (var.XYpadX > var.XYpadXmax) then var.XYpadX = var.XYpadXmax

        if (var.XYpadX < var.XYpadXborder) then
           var.XYpadXmidiCC = var.XYpadXmidiMin
        elseif (var.XYpadX > var.XYpadXres + var.XYpadXborder) then
           var.XYpadXmidiCC = var.XYpadXmidiMax
        else
            var.XYpadXmidiCC = floor(MapRange(var.XYpadX, 0, var.XYpadXmax, var.XYpadXmidiMin, var.XYpadXmidiMax))
        endif

        midi.Control0Coarse = var.XYpadXmidiCC%
     endif

     if (var.XYpadYdelta != 0) then
        var.XYpadY = var.XYpadY - var.XYpadYdelta

        if (var.XYpadY < 0) then var.XYpadY = 0
        if (var.XYpadY > var.XYpadYmax) then var.XYpadY = var.XYpadYmax

        if (var.XYpadY < var.XYpadYborder) then
           var.XYpadYmidiCC = var.XYpadYmidiMin
        elseif (var.XYpadY > var.XYpadYres + var.XYpadYborder) then
           var.XYpadYmidiCC = var.XYpadYmidiMax
        else
            var.XYpadYmidiCC = floor(MapRange(var.XYpadY, 0, var.XYpadYmax, var.XYpadYmidiMin, var.XYpadYmidiMax))
        endif

        midi.Control1Coarse = var.XYpadYmidiCC%
     endif
  else
      if (var.XYpadMode == 1 && var.XYpadTime < TimeStamp() - var.XYpadMode1Time) then
         var.XYpadX =  floor(var.XYpadXres / 2)
         var.XYpadY =  floor(var.XYpadYres / 2)
      endif
  endif
endif
Chasidy Heckenbach
16.05.2011
quite cunning the way Touchpad2Midi reads the raw x/y coords on the touchpad... the touchpad on my laptop is synaptics but my external one isnt - or is only recognised as a hid compliant mouse anyway...

cheers for the links - i'll definately keep that software too for experimenting.

i saw someone else mentioning that they didnt believe glovepie was all that stable. i guess that's ok for a non-mission critical controller. it does concern me relying on so many utils to get the data in and out of the software. or at would do if i ever end up playing out with controllers... i have loopMIDI+midikatapult in the mix atm and was believeing of buying bomes too...
Arcelia Siebeneck
16.05.2011
there's a windows driver that does specifically what you want... but you need to have a certain touchpad... synaptics I believe?

http://www.livelab.dk/touchpad2midi.php

use SAVIHost to turn the vst plugin into a windows exe:

http://www.hermannseib.com/english/savihost.htm

you'll also need a virtual midi port program like LoopBe.

<< Back to Reviews of DJ equipment Reply

Copyright 2012-2023
DJRANKINGS.ORG n.g.o.
Chuo-ku, Osaka, Japan

Created by Ajaxel CMS

Terms & Privacy