For example, the "/cue/1/start" message would produce something like:
2013-07-01 16:25:41.737 QLab[18716:303] [UDP socket 127.0.0.1:53001] sent OSC message: /cue/1/start
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
-- -- www.controlgeek.net
Hi John - this is an ignorance based suggestion really - so take it forwhat it's worth!But, I wonder if "09" might work instead of "9"? It seems to me I've hadsomething like that happen when trying to get an ION and Qlab to negotiate- which is completely unrelated to OSC of course, but it's the one thingthat popped into my mind when I looked at your command syntax.
Also, how would I fire a cue on a particular list? I see this method:/cue/{number}/listNameWould it be something like?/cue/{number}/listName/start
Thanks for the speedy reply!
On 7/3/2013 18:23, Christopher Ashworth wrote:The cue "number" is, as you guess, a string. In QLab the cue number can be any string, to support things like letter "numbers". In this case the cue number is part of the address of the OSC method, as that's the OSC-ish way to address an object in the program. Thus, the whole address is a string, and the string includes a portion that is interpreted as a cue number in QLab.
Cool, do you see any problems with my syntax of:
/cue!00/9!00!00!00/start!00!00!00,!0A!0D
It wasn't firing cue 9, although if I recall correctly, I was getting a "/cue" acknowledgement in the QLab logging.
Also, how would I fire a cue on a particular list? I see this method:
/cue/{number}/listName
OSC may be good for a lot of things, but it sure is awfully complicated for simple network-based remote control. :-)I wouldn't say that OSC is the pinnacle of network APIs, certainly. (The complete agnosticism about the transport layer in the 1.0 specification is especially weird.)
That said, I'm not sure it's totally fair to critique OSC based on trying to write it in raw bytes. :-)
Oh believe me, I'm not a glutton for punishment--I've been after Medialon for a while to include OSC. :-) They do have a pretty powerful "Low Level Communicator" which allows assembly of strings from variables, automated monitoring, some parsing, etc etc, which is what I'm working in. Once I get the syntax right, I can write it all into commands and then it's pretty easy to use. I can probably even automate the byte padding.The fact that one machine can control another one by sending a "/go" OSC message is, in my view, pretty darn simple network-based remote control. :-)
I guess the key part of your phrase is that one "machine" can control another :-) Of course, for a human to send "go" from any program that doesn't have OSC support they'd have to type /go!00!00,!0A!0D :-)
I've long been a fan of simple, human-typeable, ASCII based control messages, back to the days of the Pioneer Laser Disc player, which would take simple commands like "pl" for play, or "st" for still (each just followed by cr/lf). That simple protocol is very easy to test, use and program, and was a big improvement, from my perspective, over things like the then common Sony 9 Pin control scheme, a three byte binary message with a check sum. And that kind of simple human typeable control is still common today; here's an animatronic controller I just got firing from Medialon last week (I'm doing a lot of haunted house upgrades this summer):
http://controlgeek.net/blog/2013/6/28/controlling-the-weigl-procommander-2-from-medialon-manager
And a lot of systems these days basically just accept their internal scripting language controls over an IP port (these two systems--SFX and GrandMa2--have been running lighting and sound for our haunted house this way for the last few years):
http://controlgeek.net/blog/2008/10/24/in-praise-of-custom-ip-based-entertainment-control-part-2.html
http://controlgeek.net/blog/2010/10/14/controlling-a-grandma2-via-tcp-and-medialon-manager.html
All that said, going through this exercise has shown me how OSC is a great choice for something like your iPad remote, where you're managing/recalling cue lists, etc..
I've long been a fan of simple, human-typeable, ASCII based control messages
I, myself, do a fait bit of show control for different types of environments.
Nowadays almost everything is connectable to a network. This is todays most useful way of interconnecting devices (hardware and software). And this trend will probably last for quite a while!
So having the ability to talk device to device over network is very useful and pretty straight forward.
The problem is that every software and hardware have their own communication protocols. And while a decent bit of them share some of those (midi, msc, timecode, osc) not all of them do. Some support one and not the other or are specific about it. But almost all devices have a scripting language or API (which is of course different every time) but can often be received over network.
This is where the ability to send and receive commands in ASCII (plan text) over network comes in to play and I think is a very big player in the show control environment. This is because the multiples softwares and hardwares that we might use together (and there's a lot of them!) will never all speak the same language (or protocol).
The Network is the common ground for all the bits and piece so let's use it!
I think having OSC in Qlab is great but once again, not everything talks OSC.
To me, flexibility is a key factor show control and I consider Qlab as a show control software. Qlab has always had the ability to be a bridge between various pieces and I think expanding those possibilities would very helpful.
With this you could talk to many More softwares (existing ones and new custom ones), you could also talk to a lot of hardware. Things like projectors, TVs, switchers, matrixes,maybe even radio mics, processors(Audio and video), hardware controllers, consoles and the list will only grow.
And on the Qlab side of things, for receiving purposes, could you use your existing OSC commands but being able to receive it in plain text like what John is trying to do? That way you wouldn't have to write a whole new API.
In any case I think networking is the way of the future and Qlab would greatly benefit from such features.Actually I thought that it would have been part of v3 from the start. But let's not get too carried away. :P
My thoughts.
Pierre-Luc
(Just out of a plane :)
Cool, do you see any problems with my syntax of:
/cue!00/9!00!00!00/start!00!00!00,!0A!0D
It wasn't firing cue 9, although if I recall correctly, I was getting a "/cue" acknowledgement in the QLab logging.
I'll need to dig in to what they byte representation that should be; I'll be able to do that more easily later (on a plane at the moment).
As I believe luckydave mentioned, but I'll add it here to be sure:
All cue numbers in a QLab workspace are unique, so if the cue has a number it can be addressed by that number wherever it might be. The cue list it is in doesn't matter.
I find this really interesting from both a design and a philosophical standpoint. I know that I'm speaking to the master here,
so I'd like to push on this a little further as I suspect I'll learn something.
What I particularly find interesting is as follows:
I've long been a fan of simple, human-typeable, ASCII based control messages
Built in to this sentence is an assumption of what it means to be human-typeable. If you sit down to enter strings of ASCII byte values you're typing them in to something. It assumes a default way of humans talking to computers where we know how to make them send raw ASCII bytes, with some kind of easy framing mechanism to distinguish separate messages.
Is that a safe assumption? Ask an average user (heck, ask ME) to sit down at a random Mac and start sending arrays of ASCII bytes out over the network and I'm not sure they'd know how to do that.
The place my ignorance probably comes in to play is in knowing the list of devices in the show control environment that talk raw arrays of human-writeable ASCII. I bet there are a lot out there I don't know about, which would indeed be an argument for adding this kind of network API to QLab.
That said, the ways we saw people actively trying to control QLab 2 over a network were almost all based on either 1) MIDI over ethernet (between two QLab machines) or 2) OSC (from 3rd party software controlling QLab).
For (1), OSC is clearly a superior replacement. It's got all the advantages of MSC, plus can be easily (and semantically) extended. And unlike MIDI, it lives natively on an IP network.
For (2), OSC appears to be an increasingly accepted standard for this purpose. TouchOSC, for example, has become a very popular way to have a human-typeable control message sent over the network to the computer, and people found ways to use that with QLab 2, even thought QLab 2 didn't know how to talk OSC.
So, I guess that leaves me with the question: if the above analysis is fair, the key point is understanding what other stuff out there are people commonly using that knows how to talk raw ASCII bytes but doesn't know how to talk OSC?
-- -- www.controlgeek.net
Hmm, interesting. I'm a QLab noob, and I can't currently get to the only machine we have that can run V3, so let me ask a stupid question. In QLab, can I have a Q1 on list 1, and another Q1 on list 2? In our haunted hotel, for example, we have a list for the "Skullery" and another for "Tipsy's Parlour". Each has a Q1, since they are separate areas but run from the same machine completely asynchronously. I need a way to fire either one at any time.
In SFX (and Richmond Command Cue/Stage Manager/etc before that) a cuelist is a separate entity with its own clock, etc., and that's what theywere thinking of during the development of MSC.It's interesting, with that cue list structure, you can even use a listas a sort of "subroutine", where one cue in another list could send an"Open Cue List 27" command, and the first command in List 27 would startthe clock of List 27, which would then automatically fire a bunch ofcues. The last cue in the list would be "Close Cue List 27". Is thatkind of stuff possible in QLab?
I guess there's some invisible line of complexity that gets crossed with OSC for me with the abstraction in the objects (I only took C back in the day and never C++ so I'm always on thin ice any time I use the word "object" around real developers), and also the byte padding. Stuff like that means that you really need to have a pretty significant coding background to even comprehend the basic interchange process, and two strings that do the exact same thing "Go Q123" and "Go Q1234" actually would not be just one byte different ("123 0x00" vs "1234 0x00 0x00 0x00 0x00") That's a tough thing to explain to most of our students, who have only one required programming class (typically in Processing). Even for me, I had to go to Wikipedia and read up on the C string termination stuff to even get started with OSC.
The place my ignorance probably comes in to play is in knowing the list of devices in the show control environment that talk raw arrays of human-writeable ASCII. I bet there are a lot out there I don't know about, which would indeed be an argument for adding this kind of network API to QLab.
There's probably literally thousands of controlled devices that work this way. Here's a couple lists from:
http://www.medialon.com/ca/control_plugins_store.aspx
Some of these are pretty sophisticated, Here's a list of "drivers" written in the simpler "Low Level Communicator" device:
http://www.medialon.com/57/ftp/downloads/download_v6/ktor_drivers/
So in the long run it would be cool if QLab could offer some sort of outgoing ASCII cue (SFX does this over serial or telnet),
but more importantly to me is a simple way to respond to simple incoming commands. Maybe I'm the only one who wants this?
But thinking this through, though, if you were going to add something I think would second Mr. Brunet, when he suggested, "And on the Qlab side of things, for receiving purposes, could you use your existing OSC commands but being able to receive it in plain text".
Is it possible to operate QLab by typing commands on the keyboard (I ran out of time to look at this last week, and Googling didn't find it)? If so, if you could just accept and acknowledge those commands on a TCP/UPD port of your choosing then people could use that for simple control, and then use OSC when they need more sophisticated data exchange.
Thanks, it's been a fascinating conversation!
--
To me the key to this is that you're still working at the raw level. If you're dealing with OSC at the byte level (in a real show situation, rather than a learning situation) then something is wrong, since the computer should be doing all of that stuff for you.
But thinking this through, though, if you were going to add something I think would second Mr. Brunet, when he suggested, "And on the Qlab side of things, for receiving purposes, could you use your existing OSC commands but being able to receive it in plain text".
This is interesting, since we already have code (as noted above) that translates a human-written string into an OSC command. I could certainly imagine opening up another port to accept such commands, translating them to OSC, and then passing them straight into the existing OSC pipeline.
-- -- www.controlgeek.net
(although MSC is a LOT simpler than OSC, and, therefore, less powerful).
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Does this extend to some sort of embedded OSC hardware GO box? Plug it into a network switch and it fires all redundant machines at once? And I wouldn't have to use MIDI thrus and such?
That could be a very useful and simple scenario. But then would I need to have some sort of redundant network switch in case the SWITCH failed?? I've never had to do that before- if a switch or router went down, it was a major annoyance, but not a show-stopper.
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
On Mon, Jul 8, 2013 at 1:11 PM, Jeremy Lee <jer...@jjlee.com> wrote:
Does this extend to some sort of embedded OSC hardware GO box? Plug it into a network switch and it fires all redundant machines at once? And I wouldn't have to use MIDI thrus and such?<shameless plug>
Yes, and with many more useful features than that, like PoE ability for making powering it super easy, and some other goodies I won't spill just yet. Duck's Echo has one line of OSC products in final stages of pre-production, and another "premium sportster" line later in the year, some of which we previewed to folks at USITT this winter. I will be reaching out for beta testers for the first line as soon as I settle back down from the last two weeks of personal life hecticness :-)(Had planned to have beta units in testers' hands already, but ran into a small issue with one supplier's part being converted from mm to inch on their drawings just imprecisely enough to cause a problem. D'oh.)</shameless plug>
That could be a very useful and simple scenario. But then would I need to have some sort of redundant network switch in case the SWITCH failed?? I've never had to do that before- if a switch or router went down, it was a major annoyance, but not a show-stopper.Would you? Do you currently have a redundant MIDI Thru? Or MIDI I/O? There will always be some single point of failure, the best you can do is minimize that point of failure.
I don't know. But I've (touch wood) never had a simple MIDI thru box or similar go out on me, but have had routers/ switches die on me from time to time. Or forget their settings or similar. Not often, but it happens. It's just a new piece of semi-complex equipment taking the place of something that's mostly simple, and it gives me pause.