Renoise Doesn't React On Some Iannix Osc Messages

I’m trying to control Renoise via OSC using IanniX.

The Renoise OSC server is running and it’s obvious that Renoise receives the messages, because when the IanniX script sends a wrong OSC message the OSC console prints it as REJECTED. I.e. I sent a start message with a dummy argument and Renoise reacts:

/transport/start with 1 arguments (REJECTED)

But when I send the correct transport/start OSC message there’s no reaction at all. No line print is printed in Renoise’s console (but I’m not sure if it is supposed to do so at all), but more importantly - nothing happens! The song doesn’t start. None of the other messages I tried worked too.

Any idea what I am doing wrong?

As far as i know the command doesn’t come with a parameter.
If you inspect the GlobalOSCActions.lua file you see how the transport/start message is forwarded to the play engine:

  
-- /transport/start  
  
add_global_action {   
 pattern = "/transport/start",   
 description = "Start playback or restart playing the current pattern",  
  
 arguments = nil,  
 handler = function()  
 local play_mode = renoise.Transport.PLAYMODE_RESTART_PATTERN  
 song().transport:start(play_mode)  
 end  
}  
  

If you want to debug it, then you could add some print instruction into the GlobalOSCActions.lua file that simply gives you a hint if the given message arrived in the pattern that you sended yes or no.
But better would be to program a quick server application in the Lua environment and capture what Iannix is sending. It might perhaps send along data that isn’t supposed to be send along.

Thanks, vV.

I knew the start message had no argument; it was just to force Renoise to print out an error message in the OSC console, which it did, so it was obvious the message was getting through.

I tried your suggestion and added a print in the /transport/start handler and indeed nothing got printed nowhere, so for some reason this doesn’t seem to be handled.

However this gets handled properly:

osc://127.0.0.1:8000/renoise/evaluate renoise.song().transport:start(renoise.Transport.PLAYMODE_RESTART_PATTERN)

And this basically does the same thing /transport/start is supposed to do. So the communication between IanniX and Renoise is just fine in this occasion. I tested some other messages, for example “/transport/loop/block true” works just fine. Setting edit step, octave number, etc., all these work fine. But start, stop, note_on, note_off - you know, the ones that REALLY matter - I don’t seem to be able to get them to work, and there’s no indication anywhere as to what might be wrong.

It’s my first time trying anything with OSC, first time I’ve seen IanniX, plus I’m not adept in Lua or the Renoise API at all, so I’d really appreciate some help.

I think I’m getting most of the stuff right, but seems like there’s something wrong somewhere, so any other ideas are very very welcome.

Hey subset,

could you share the IanniX patch, so that we can test this here?
On which platform are you (windows/OSX/Linux). Is this UDP or TCP?
The messages which do not work, do they never work?

Hey taktik.

It’s not much of a script really, it was just a simple test. Just circle with a cursor and a trigger somewhere along the cursor’s path that sends this OSC message:

osc://127.0.0.1:8000/renoise/transport/start

I tested this on Windows 7 and Windows XP. UDP ports used.

However, I strongly feel this must be a bug with IanniX rather than a problem with Renoise. Looking at the message log that IanniX generates it shows that this particular message never gets sent at all. However, when I add a parameter like so

osc://127.0.0.1:8000/renoise/transport/start 1

the message appears in IanniX’s list of sent messages. I updated the GlobalOscActions script and made /transport/start to support a dummy parameter and then the song started successfully.

My guess is IanniX does some sort of filtering of the messages in order to differentiate between its own actions and the actions that are intended for other OSC servers. “transport” is a message that IanniX uses, same goes for “trigger”, so perhaps this somehow matches some internal filters and gets ignored and not sent… Or it could be that messages without parameters are not OK with IanniX… I could be wrong on these assumptions but either way, it definitely looks like a IanniX problem.

P.S. You could have a look at the realtime trigger messages though. For example, this gets sent out by IanniX:

osc://127.0.0.1:8000/renoise/trigger/note_on 0 -1 60 120

but Renoise doesn’t react.

In that regard, you can solve it by adding a transport alias inside the GlobalOSCAction.lua file (instead of calling it /transport, using e.g. /tx) and simply duplicate the routine, yet it listens to a different incoming pattern.

That’s kinda what I did. Turns out IanniX doesn’t like messages without arguments so I could simply add dummy arguments to all the ones that don’t have.

However, the realtime trigger messages (like note_on) still don’t work though they seem to be sent out.

For the note on message you also need to specify a track on which you want to have the note played, it looks like you either forget to send along a track reference or an instrument reference. At least you won’t get far by sending a “-1” for it.

That’s not it, I made sure I had all the arguments correct many times.

I tested sending OSC messages (note_on and note_off included) to Renoise from a PHP script and all worked out well, so definitely a IanniX problem here, but I’ve yet to understand what’s the cause.

The problem is that IanniX tags the numbers as floats and Renoise only accepts integers for note_on and note_off events. The solution is to unpack the Osc message change the tag and then send it on to Renoise.