title: General considerations for NUI/touch interface
body: <p>For the past few months I've been looking into developing a Kinect based multitouch interface for a variety of software music synthesizers.</p>
  
  <p>The overall strategy I've come up with is to create objects, either programatically or (if possible) algorithmically to represent various controls of the soft synth. These should have;</p>
  
  <ul>
  <li>X position</li>
  <li>Y position</li>
  <li>Height</li>
  <li>Width</li>
  <li>MIDI output channel</li>
  <li>MIDI data scaler (convert x-y coords to midi values)</li>
  </ul>
  
  <p>2 strategies I've considered for agorithmic creation are XML description and somehow pulling stuff right off the screen (ie given a running program, find xycoords of all controls). I have no idea how to go about that second one, which is why I express it in such specific technical language ;). I could do some intermediate solution, like using mouse clicks on the corners of controls to generate an xml file. Another thing I could do, that I've seen frequently in flash apps, is to put the screen size into a variable and use math to build all interface objects in terms of screen size. Note that it isn't strictly necessary to make  the objects the same size as onscreen controls, or to represent all onscreen objects (some are just indicators, not interactive controls)</p>
  
  <p>Other considerations;</p>
  
  <p>Given (for now) two sets of X/Y coords as input (left and right hands), what is my best option for using them? My first instinct is/was to create some kind of focus test, where if the x/y coords fall within the interface object's bounds that object becomes active, and then becomes inactive if they fall outside some other smaller bounds for some period of time. The cheap solution I found was to use the left hand as the pointer/selector and the right as a controller, but it seems like I can do more. I have a few gesture solutions (hidden markov chains) I could screw around with. Not that they'd be easy to get to work, exactly, but it's something I could see myself doing given sufficient incentive.</p>
  
  <p>So, to summarize, the problem is</p>
  
  <ul>
  <li>represent the interface (necessary because the default interface always expects mouse input)</li>
  <li>select a control</li>
  <li>manipulate it using two sets of x/y coords (rotary/continuous controller) or, in the case of switches, preferrably use a gesture to switch it without giving/taking focus.</li>
  </ul>
  
  <p>Any comments, especially from people who have worked/are working in multitouch io/NUI, are greatly appreciated. Links to existing projects and/or some good reading material (books, sites, etc) would be a big help.</p>