Jump to content

autonic

Member
  • Posts

    11
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

autonic's Achievements

(2/3)

  1. My suggestions is some be able to fade only the intensity channels of a recorded DMX-universe, when doing fades on DMX-data, which would mean we would have to be able to identify / mark which channels in a given universe that are intensity channels. A simple text box that pops up when you double click the DMX-data in the timeline, filled in with comma separated values indicating the intensity channels, and a simple checkbox: "fade these channels only" would suffice. Right now, when you fade DMX-data, you fade all channel values. When applying a fade to a whole universe of complex fixtures (basically all fixtures on the market today), you also fade the pan/tilt motors, rgb-mix e.t.c, which means that as soon as you want to fade out your lights, they not only fade out, but they also start moving all over the place and doing all kinds of wierd looking stuff. Sure, you could record a separate "fade out intensity" dmx-stream for that universe, and jump to that stream with a control cue - but that wont work if any effects in the light software are running (you would have to synchronize all effects to end on the same time, and that's not practically feasible when you are programming DMX-lights - also it will not allow you to abort a DMX-sequence at will, without the end result being jittery). My suggestion as a mockup:
  2. If anyone is interested I found a fairly simple way to send OSC commands from WatchOut 6.6. Use the attached google sheet to input the target OSC adress (and any neccessary arguments) and the script will format the string into UDP-messages that are recognized as valid OSC commands. Just create a String Output, set it to UDP network data and set the target IP and adress. Then use this form to generate valid OSC-commands and paste them in the string field. In case the google sheet doesnt export/import the custom function I'll paste the javascript code for the function here: function stringToHex(str){ string = str.split(':') const typeTags = [','] var oscAddress = '' const arguments = [] for (let i = 0; i <= string.length-1; i++) { // encode osc address if (i == 0) { oscAddress = addPadding(hexEncodeString(string[i])) // handle optional arguments } else if (i > 0 && !isEmpty(string[i])) { // determine argument type if (isNaN(string[i])) { type = 's' arguments.push(addPadding(hexEncodeString(string[i]) + '$00')) } else if (isInteger(parseInt(string[i]))) { type = 'i' arguments.push(addPadding(hexEncodeInt(parseInt(string[i])))) } else if (isFloat(parseFloat(string[i]))) { type = 'f' arguments.push(addPadding(hexEncodeFloat(string[i]))) } // push osc type tag array typeTags.push(type) } } // return output if (string.length == 1) return oscAddress + addPadding(hexEncodeString(typeTags.join(''))) if (string.length > 1) return oscAddress + addPadding(hexEncodeString(typeTags.join(''))) + arguments.join('') return 'incorrect string input format' } function hexEncodeString(string) { try{ hex = unescape(encodeURIComponent(string)) .split('').map(function(v){ return v.charCodeAt(0).toString(16) }).join('$') } catch(e){ hex = string[i] console.log('invalid text input: ' + string) return 'error' } return '$' + hex } function hexEncodeInt(s) { var a = s.toString(16); if ((a.length % 2) > 0) { a = "0" + a; } hexString = a.padStart(8, '0'); return '$' + addItemEvery(hexString, '$', 2) } function hexEncodeFloat(number) { const getHex = i => ('00' + i.toString(16)).slice(-2); var view = new DataView(new ArrayBuffer(4)), result; view.setFloat32(0, number); result = Array .apply(null, { length: 4 }) .map((_, i) => getHex(view.getUint8(i))) .join(''); return '$' + addItemEvery(result, '$', 2) } function addItemEvery (str, item, every){ for(let i = 0; i < str.length; i++){ if(!(i % (every + 1))){ str = str.substring(0, i) + item + str.substring(i); } } return str.substring(1); } function addPadding(byteString) { addressLength = byteString.split('$').length - 1 // string is divisible by 4 if(addressLength % 4 === 0) { byteString = byteString // string is not divisible by 4, needs padding } else { var padding = '' divisibleBy = '' + addressLength / 4 decimals = divisibleBy.split('.') if (decimals[1] == '25') padding = '$00$00$00' if (decimals[1] == '5') padding = '$00$00' if (decimals[1] == '75') padding = '$00' byteString = byteString + padding } return byteString } function isFloat(n) { return n === +n && n !== (n|0); } function isInteger(n) { return n % 1 === 0; } function isEmpty(str) { return (!str || /^\s*$/.test(str)); } OSC to UDP-string converter.xlsx
  3. I found the solution in another forum (if anyone is interested): https://community.troikatronix.com/topic/2214/receive-tcp-messages-from-watchout/4
  4. I'm trying this same command but I get a parsing OSC error on the recieving application. Do you have any other example of the strings you are successfully sending?
  5. Well, I am using MIDI, but it's only MIDI notes (touch interface). I need to be able to fadeout + stop a timeline with a button press... (for when a timeline has to be faded out prematurely).
  6. Ok, so now I noticed that generic outputs also can be faded... (good to not bloat the network with unecessary data). However, fading the values of a generic output does not seem to change the value of the generic input with the same name. Is this by design? Can it be solved some other way? (if generic inputs cant be set using generic outputs - what are their intended usage?) Am I stuck using DMX-outputs as variables?
  7. I am using the same universe. However I found the solution: You need to be "online" with the watchpax for this to work! (I thought all DMX-data was streamed from the production machine?) Thanks for all your help.
  8. Ok... I did actually manage to achieve many nights ago using your idea with the DMX-channels. However, now I seem to have forgotten how I did it =\ I can only drag DMX outputs into timelines (to perform fade)... but when I try to bind the Opacity tween to the DMX-channel, It will only bind to the DMX-inputs (which are not affected when I perform fades on Outputs). What am I missing here?
  9. Yea... but the thing is im sending midi notes generated by an application in another computer (and not actually moving a MIDI-fader somewhere). So I need to trigger some kind of sequence that preforms a fade of a specific timeline...
  10. I use MIDI-input (via rtpMIDI over network) to trigger the changes. Still image is perhaps doable, but not an optimal solution, since it requires me to "go to black", stop the neccesary timelines, and then fade back to previous timeline. It would be much nicer if I could just fade out the incorrectly triggered timeline directly onto the previous timeline. (I plan on triggering overlays onto a live camera feed - and giving the end user the option to gracefully correct a misclick)
  11. So, I need to fade out a timeline using a MIDI trigger. I've figured out how to use the MIDI-trigger to stop a specific timeline, but I can't figure out how to fade it... The thing is, it's not a looping timeline that needs to be faded. The function is for when the user starts the wrong timeline by mistake, and whishes to "undo" the button click without an abrupt exit (stopping the timeline). Has anyone any ideas?
×
×
  • Create New...