This How To will show you how to use an Apple iOS device such as an iPhone, iPad or iPod Touch as a custom remote control for a Ventuz scene.
With large public installations in particular, often the situation arises that two channels of communication are required. For one, the audience views the scene on the main output device (for example a wall of LCD displays) and may or may not have a form of interacting with the scene (let's say a joystick). The other channel is that of the operator running the show. This can be as simple as a panic button that resets the scene in case of problems or as sophisticated as an additional input device that allows the operator to influence the experience the audience has.
While there are many ways to remote control Ventuz (see OSC, Remoting, ...), a particular simple and elegant one is to use a small, unobtrusive touch device such as an iPod Touch. The following will show you how to create a simple scene switcher using OSC.
Open Sound Control is an network protocol that has originally been designed as a replacement for the antiquated MIDI protocol which is still the standard for communication between music devices. Due to its simple and extensive nature, OSC has been used in various contexts to establish a simple communication between different pieces of hardware and/or software.
OSC uses so called OSC messages to send commands over the network. Each message contains an OSC address, a textual representation that specifies the name of the command, as well as a list of parameter values. Which message names a device or application uses is usually stated in the specification or documentation of that device or piece of software.
OSC does not contain any form of authentication. Keep in mind that anyone connected to the same wireless network could potentially send OSC messages to your Ventuz machine and use the same control mechanisms as you.
One (of many) OSC applications for iOS devices is OSCemote, available in the Apple AppStore. We are not specifically recommending it, but it will do as a good example. This How To will use OSCemote to show you how to trigger events in Ventuz but based on the specific requirements, a different App such as TouchOSC or ControlOSC, or any other, might be more suitable for you.
OSCemote is split into multiple views of which we will use the 5x3 grid of buttons. As can be found in the developer documentation, the first button sends the following OSC message if it is pressed:
/button/A1 1
We'll add an OSC Input Node to our scene so that a Ventuz event is fired whenever that button is pressed.
First, make sure that both the Ventuz machine and the iOS device are connected to the same wireless network. Start the CMD program on the Ventuz machine and type ipconfig to get the current IP-address of that machine in the network. In OSCemote, go to More/Settings and enter that IP-address.
Set the port to some number that is currently not used (don't use 3333 as that is usually used by TUIO). Also make sure that the port is not blocked by any firewall. Often using a high port number such as 19500 will decrease the chances of a potential conflict, though not eliminate them completely.
In Ventuz, create a new scene. Add a Layer Switch and add a Scene Layer to each output of the Switch. Set each Scene Port to a different scene you want to show. This will be the Ventuz functionality we want to remote control.
To iterate through the different cases, add a Counter Node, set its End Input Property to the number of the last Switch Output and activate the Loop Property. Bind the Switch's Case Property to the Value output property of the Counter. Try clicking on the plus next to the Counter's Forward Input Property to verify that the switcher is working correctly.
To "connect" the forward method to the OSCemote button, add an OSC Input Node to the scene. Change its port to the port set in OSCemote and set the Address property to /button/A1. Hit Edit Custom Model and add a new int output named buttonstate. Make sure to activate Monitor Values in the Property Editor and see the Message event flash red whenever the button is pressed.
We could now bind the Counter's Forward property to the OSC Input Node's message event but that event is also triggered when the button is released. Instead, add an Event Node and bind it's Shot property to the OSC Input Node's buttonstate output. The Event node will automatically reinterpret the int value such that the event fires whenever the input value changes to non-zero.
Pressing the touch button in OSCemote will now make the Switch go to its next case, rendering the respective scene.
This concludes this How To and we leave it up to the reader to check out the OSC documentation and integrate other controls like sliders and of course come up with interesting things to remote control in a scene.