External USB Touchpad as XY-type Controller
Results 1 to 3 of 3
  1. #1
    Tech Guru zestoi's Avatar
    Join Date
    Mar 2011
    Location
    UK, Ukraine, Romania
    Posts
    2,836

    Default External USB Touchpad as XY-type Controller

    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

  2. #2
    Tech Guru MiL0's Avatar
    Join Date
    May 2009
    Location
    Brighton / Bangkok
    Posts
    1,386

    Default

    there's a windows driver that does specifically what you want... but you need to have a certain touchpad... synaptics I think?

    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.

  3. #3
    Tech Guru zestoi's Avatar
    Join Date
    Mar 2011
    Location
    UK, Ukraine, Romania
    Posts
    2,836

    Default

    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 think 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 thinking of buying bomes too...

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •