Control time from OSC


I just started playing around with Score and it looks great!

I am trying to control the parameters of an application I wrote,
and would like to sync its frame rate and Score’s.

Is there currently a way (or even a hack) to tell Score to go forward one time step through OSC?
Imagine guess this is similar to the question raised here Timecode control


Hey there,

Technically, if both your application and score are synchronized to your audio driver, they are in sync.
to set score’s clock, you can go to “Settings” and select the source and the rate in the “Audio” section.

There is no way, to my knowledge, to control score externally at the “Tic” level.

However, “Triggers” can respond to any parameters in the “Device Explorer” (from any devices: OSC, HTTP, Local …)

You can find examples in the user-library
under Scrores/Tutorials

to access the user library from score, you can download it and specifie it’s path in the “Settings”

The “Local” device also allows you, among other things, to manipulate the speed of each interval in real time.

Hi, thanks, I came across the tutorials.
Took me a bit of browsing to find them, maybe you should put the link at the start of the documentation,
as they seem to be very useful!

For my use case, I want to use Score to control a rendering engine that does not necessary run in real time, so I need to update the parameters only once a frame has been rendered.
(edited the following because my previous post was not correct)
One workaround I’ve tried is to: create a LocalDevice, and through OSC set “speed” to 0 and set the playhead position with “transport”. But while setting transport works fine, when speed is set to 0 no OSC messages are sent. Is there any trick to force Score to do so?

If i understand correctly, this would be one way I would do it


Here I trigger the loop manually but it can just as well respond to OSC messages.
when the loop is triggered, (at each generated frame), the speed of the controled interval is set to one. at the end of the little interval, it is set back to 0 (stops).
the size of the small interval inside the looped scenario defines your step-size,
it can be much finer than it is here.
you could now create an automation on the controlled interval for example and play it “bit by bit” at the rate of your frame generation.

is This the kind of things you had in mind ?

thanks for the suggestion and demo.
But I actually just need one frame at the time.
For example, In Vezer, there is an option “Process keyframe while dragging”, which will spit out OSC messages when transport changes.
So ideal scenario is something similar: Score is paused. I send a transport message from the app. Score spits the updated state once.
Shall I open a suggested-feature ticket on GitHub?

yes, please make a feature request :slight_smile:

though I’d like to know : how does Vezér handle sound in that case ?