I’m trying to send OSC from GlobalOscActions.lua. Could anyone provide an as simple as possible example that does this? I first tried this
renoise.Osc.Message("/luck/flowers")
but it doesn’t seem to get through. Is the above really possible, just like that? If so what port is it sending over - 8000 like for reception? Are there anything prepended to this message, like if I send /renoise/stuff I have to add handler for /stuff in GlobalOscActions.lua (makes sense, but very frustrating when you don’t know it).
Ok, so I took another approach. Found some code snips and came up with this
OscMessage = renoise.Osc.Message
local client, socket_error = renoise.Socket.create_client(
"localhost", 8000, renoise.Socket.PROTOCOL_UDP)
if (socket_error) then
renoise.app():show_warning(("Failed to start the " ..
"OSC client. Error: '%s'"):format(socket_error))
return
end
and inside the handler for sending:
client:send(OscMessage("/luck/flowers"))
But I get:
Renoise LOG> Exception: wrong type of message
Renoise LOG> OSC: Error while parsing OSC message: /luck/flowers (wrong type of message)
what port is it sending over - 8000 like for reception?
Since the built-in OSC server in Renoise defaults to port 8000, you have to create your OSC client for another port than that one.
I just made a test with Renoise ↔ pure-data, basically adding the client part to GlobalOscActions.lua, like you have done, but on port 8008.
local OscMessage = renoise.Osc.Message
local OscBundle = renoise.Osc.Bundle
-- open a socket connection to the server
local client, socket_error = renoise.Socket.create_client(
"localhost", 8008, renoise.Socket.PROTOCOL_UDP)
if (socket_error) then
renoise.app():show_warning(("Failed to start the " ..
"OSC client. Error: '%s'"):format(socket_error))
return
end
add_global_action {
pattern = "/transport/custom",
description = "Custom action",
arguments = nil,
handler = function()
print("triggered custom OSC action: /transport/custom")
print("client",client)
client:send(
OscMessage("/renoise_pd/transport/bpm", {
{tag="f", value=renoise.song().transport.bpm}
})
)
end
}
On my PC, the message is now received by Renoise on port 8000, and the reply is sent on port 8008.
Then, in pure-data, I can listen for any message on port 8008 and decide which one to act on.
The following patch will print /renoise_pd/transport/bpm 110 in the PD console (a really simple patch, as it will catch any message sent to port 8008)
The “renoise_pd” prefix is just one I randomly selected, you can enter whatever pattern you want to.
Btw: printing debug messages (tracing) is easy, just enable the lua scripting console and add “print”, “rprint” (for table) statements where you need it.
I was almost there, just the port 8000 that should be 8008 + chuck silently fails if you’re listening for events like “/fromrenoise/song/number_of_tracks,” (no data send along), but in fact are receiving “/fromrenoise/song/number_of_tracks, i” (with int data send along).
Lesson learned: until you have poked a hole through OSC, take very small steps