OSC reactive Magic Sheets

Hello everyone.

I'm currently doing a deep ish dive in the whole Show Control and OSC functionality in EOS but im having some issues with syntax/workflow which i wasn't able to solve as of yet. 

My current situation is: EOS Ti >Switch > Recording PC > OSC for OBS > OBS. Im trying to build an interactive magic sheet for starting/stopping recordings with some feedback from the recording pc also being displayed in EOS. 

The Send functionality is working so far using buttons on a Magic Sheet with Command = "/startRecording" my problem here is that i would like to also have this OSC command in a Macro (which afaik can be accomplished with Send_String but right now i cant figure out the exact syntax or the necessary OSC Address/prefix)

Secondly i would like a feedback element on the sheet which reacts to a OSC input from the Recording PC, which sends a OSC confirmation command (fwict "/recording" with no extra formatting). Since we often have no direct access to the Recording PC it would be very nice to have some sort of visible feedback of the recording status without digging through diagnostics. 

I'm currently using this webinar and the EOS eManual for reference. If you have some more sources/tutorials which could get me in the right direction please let me know.  

Parents
  • the macro should look like:

    the ip address is defined in System->Show Control

    the tx ip adress can have multiple adresses and also have a port:

    192.168.1.21:8111;192.168.1.21 if no port is given, standard TX port is used

    String RX needs to be enabled if you want to listen to non /eos commands i think, be sure to have a diffrent RX Port than in OSC RX Port, but that would require you to set up events to map it to a macro

    to receive info and display it within a magicsheet, i would suggest you create a "Recording Fixture" or use a dummy channel maybe 999

    instead of sending the "/recording" string, you send this string to eos: /eos/chan/999/full

    put the channel in your magic sheet, background color to the intensity

    to turn of the indicator /eos/chan/999/out

    this will might annoy you because when working on the show, the chan 999 will always be saved tot he show. to avoid that you could set up partitions.

    another way is the have the recording pc call a makro: /eos/macro/1/fire to start  /eos/macro/1/fire to stop

    and the magicsheet should be:

Reply
  • the macro should look like:

    the ip address is defined in System->Show Control

    the tx ip adress can have multiple adresses and also have a port:

    192.168.1.21:8111;192.168.1.21 if no port is given, standard TX port is used

    String RX needs to be enabled if you want to listen to non /eos commands i think, be sure to have a diffrent RX Port than in OSC RX Port, but that would require you to set up events to map it to a macro

    to receive info and display it within a magicsheet, i would suggest you create a "Recording Fixture" or use a dummy channel maybe 999

    instead of sending the "/recording" string, you send this string to eos: /eos/chan/999/full

    put the channel in your magic sheet, background color to the intensity

    to turn of the indicator /eos/chan/999/out

    this will might annoy you because when working on the show, the chan 999 will always be saved tot he show. to avoid that you could set up partitions.

    another way is the have the recording pc call a makro: /eos/macro/1/fire to start  /eos/macro/1/fire to stop

    and the magicsheet should be:

Children
  • the label item in the last photo must be of type macro, and also have background color linked to color. then it will take color from macro

  • Thanks for the lengthy response benjaminauer!

    The software im using to control OBS via OSC (https://github.com/jshea2/OSC-for-OBS) fwict has no direct method of altering the response strings it sends out via OSC. its just always /recording, (1) or something along those lines. 

    It looks like the best option is to "remap" this response string via Show Control to a macro which changes Labels like you said. 

    I am going to try to get this working later tonight or tomorrow when im back at the desk. In the mean time here is the signal chain i currently have in my head right now. feel free to correct me if anything is wrong. 

    OSC for OBS (Configure send Port the same as UDP String TX on EOS) >
    EOS Setup/Sys/SC/UDP Strings (making sure String RX is enabled and the Port is right. Not sure if String RX Source ID/Name are relevant here) >
    Show Control List 1, Type: Network inputs, External ON >
    Event 1 Input "Input String" (This should be the OSC input right?) = "/recording, (1)", Action: Macro 1

    The only problem i see here is that ive personally never worked with the UDP Input Strings feature and it will most likely take some time to get it right but if it works like i expect it to do, this would be the optimal way IMO. 

    EDIT: I just remembered that in the webinar at approx. 47mins they talk about sending strings to Show Control via the /eos/sc/ prefix. Is it even possible to send OSC Strings to Show Control without being able to add the necessary prefixes?

  • if you are unable to change the OSC from OBS you need to use https://github.com/ETCLabs/OSCRouter

    eos does not care about anything other than /eos prefix

  • or you edit the source code for OSC4OBS, i think i did that once, pretty simple

    OSC-for-OBS/src/index.js

    line 3009 and make your changes there, if you can a bit of js...

  • Im really not trying to make this to complicated by using any more software than i actually need (its a bummer OBS fwict doesn't support OSC natively)

    I was able to edit the source code a little bit (i absolutely do not know how to code but if its just changing out text that's basic enough for me) 

    This is the OSC output im currently getting: 

    however im still not able to get show control to interact with the OSC commands.

    in sc i have the input as Input String = "recording, 1" Action = "Cue 1" but nothing is happening as i receive the OSC command back. 

    This is fwict the relevant page in the manual:

    Is the comma, The space (should it be a _) or the missing "(i)" (I assume this is just a marking for integer and not relevant for the command) a problem? This is quite the learning curve :D

  • osc command has two parts: the path /this/is/the/path
    and arguments 321(i), 0.12(f)

    ignore the arguments competly in the input (its only the path without first /)

    the arguments would be passed on to the target, but im sure its not possible to use them, because it will send the recording state as a paramter, you will have to modify the obs plugin to send you another path like /recording/stopped. eos is pretty unflexible..

  • looks like im gonna have to just run without feedback for some time and learn how to use chataigne Afterall. It has plugins for OBS and will most likely play a lot more nicely when it comes to custom OSC commands. Its a bummer that there's not much wiggle room in EOS when it comes to OSC.

  • obs.on("RecordStateChanged", data => {
    	if (data.outputActive == true){
    		recording = 1
    	} else {
    		recording = 0
    	}
    	client.send(`/recording`, recording, (err) => {
    		console.log(err)
    	})
    })

    replace this with that:

    obs.on("RecordStateChanged", data => {
    	if (data.outputActive == true){
    		client.send(`/eos/sc/recording`, 1, (err) => {
    			console.log(err)
    	} else {
    		client.send(`/eos/sc/recordingStopped`, 1, (err) => {
    			console.log(err)
    	})
    	}
    })

  • Hi benjaminauer.

    After some trial and error i was able to get the whole system working like i expect it to. I've had to modify your code slightly (there was a bracket missing :D) 

    Heres my setup for everyone to reference

    Modified Code (Line 3003 onwards, error logging removed for readability)

     

    obs.on("RecordStateChanged", data => {
                if (data.outputActive == true){
                    
                    client.send(`/eos/sc/recordingStarted`, 1,)
                } else {
                    
                    client.send(`/eos/sc/recordingStopped`, 1,)
                }
                
                })
            
    
            
     

    Show Control (Here i assume your OSC Setup is working as intended. OSC TX/RX on. UDP String TX/RX dissabled) 

    Macros (Bare with me and my German labels)

    Magic Sheet: 3 Macro Buttons. 1 for Starting. 1 for Stopping and 1 Status button (Macro 3000, making sure Field 1 is set the Macro Label)

    Thanks for the help!

  • Sorry, i never tested the code myself =)

    But nice it works, its the little things in live.

Related