When enabling OSC in Clockworks Viewer you will see a set of endpoints streaming data. You need to set an ip address target to send to.
/control - [FaderA, FaderB, CrossFader] - 32bit Float - 0…1
/tc - [Hours, Min, Sec, Frame] - 32bit Int
/cue - [Next Cue Seconds, String] - Int, String
/meta - [Deck Title] - String
/event - [Event Name, Value - String, Int32
There is one receive endpoint at OSC Port +1, i.e. if port is set to 8080 you can receive OSC at 8081
/deck/select - 1..4 to set active deck
The software has the ability to load in arbitrary lua functions to be made available in each execution unit. This is done via the extensions.lua file found in the viewer config folder. For example, below is the config for triggering transport in d3.
-- Assume sendOSC(address, ...) and sendOSCWithDest(ip, port, address, ...) exist
local D3Transport = {
ip = nil, -- empty by default
port = nil
}
-- Helper to route the OSC call
local function routeOSC(address, ...)
if D3Transport.ip ~= nil and D3Transport.port ~= nil then
-- Use destination-aware sender
sendOSCWithDest(D3Transport.ip, D3Transport.port, address, ...)
else
-- Use default sender
sendOSC(address, ...)
end
end
-- Setter for IP/Port (nil resets behavior)
function D3Transport.setEndpoint(ip, port)
D3Transport.ip = ip
D3Transport.port = port
end
-- Transport control (triggered commands)
function D3Transport.play()
routeOSC("/d3/showcontrol/play")
end
function D3Transport.playSection()
routeOSC("/d3/showcontrol/playsection")
end
function D3Transport.loopSection()
routeOSC("/d3/showcontrol/loop")
end
function D3Transport.stop()
routeOSC("/d3/showcontrol/stop")
end
function D3Transport.previousSection()
routeOSC("/d3/showcontrol/previoussection")
end
function D3Transport.nextSection()
routeOSC("/d3/showcontrol/nextsection")
end
function D3Transport.returnToStart()
routeOSC("/d3/showcontrol/returntostart")
end
function D3Transport.previousTrack()
routeOSC("/d3/showcontrol/previoustrack")
end
function D3Transport.nextTrack()
routeOSC("/d3/showcontrol/nexttrack")
end
-- Track selection
function D3Transport.trackName(name)
routeOSC("/d3/showcontrol/trackname", name)
end
function D3Transport.trackId(id)
routeOSC("/d3/showcontrol/trackid", id)
end
-- Cue control
function D3Transport.cue(...)
routeOSC("/d3/showcontrol/cue", ...)
end
function D3Transport.floatCue(value)
routeOSC("/d3/showcontrol/floatcue", value)
end
-- Brightness & volume / master control
function D3Transport.fadeUp()
routeOSC("/d3/showcontrol/fadeup")
end
function D3Transport.fadeDown()
routeOSC("/d3/showcontrol/fadedown")
end
function D3Transport.hold()
routeOSC("/d3/showcontrol/hold")
end
function D3Transport.volume(level)
if level == nil then level = 1.0 end
routeOSC("/d3/showcontrol/volume", level)
end
function D3Transport.brightness(level)
if level == nil then level = 1.0 end
routeOSC("/d3/showcontrol/brightness", level)
end