I'm using Lemur Controller on an iPad 1 for controlling many of the audio applications that I run on my Linux machine. It's easier to use a touch screen device to control a mixer (and effects) than use the mouse. I decided to use OSC protocol instead of MIDI because I believe that sooner or later it will become the standard for controlling audio devices, as MIDI is now. Also because parameters are more accurate (MIDI sends 7 bit numbers) and it's easier to understand/implement.
NOTE1: I'm doing some research to connect my iPad with an Ethernet cable instead of using WiFi. I'll let you know if I can do it.
The interface has 3 main areas: mixer, global controls and master control.
The mixer is basically a container with 16 track controllers. Each track controller has gain, mute, solo and record and there is more room for adding more controls in the future. You can move them by using the horizontal scroll at the bottom. Double click a gain and it goes to 0dB. "Remote IDs" and "track names" are automatically assigned to each track controller so copy, paste and delete controllers is very easy. It's just necessary to modify the IDs and names arrays if controller are modified. All this information is updated every 10 seconds. On the other hand, the horizontal fader is in charge of automatically reposition all track controllers.
This area includes: play, stop, record, metronome and more. These controls require OSC messages with NO argument but Lemur Controller ALWAYS sends messages with at least one argument (a blank argument is sent as a space). Ardour3 is unable to understand these messages directly. To solve this problem I used Pure Data Extended to create a bridge that basically receives OSC messages from Lemur, removes any argument and sends messages back to Ardour3.
This is simply another channel with ‘Remote ID' = 318. It will not be affected by the horizontal scroll.
NOTE2: Remote ID is the way to identify a track in Ardour when an external controller is used. Master track always has Remote ID 318.
NOTE3: This is the first mixer layout that I created. After using it for a while I found that the horizontal scroll is not very handy so I'm creating a new layout. Instead, I will have a few mixer layers that I can show/hide using a switch controller. I'm also making some other changes to the code, simplifying it and making it more meaningful in terms of objects and functions.
NOTE4: Most of the information that I used is here.
Some observations about Ardour3 and OSC: