I kindly wanted to ask if anyone can help me with the synchronization of the MIDI clock BPM time between Song Master and GP4. Song Master as MIDI clock master and GP4 as a slave.
It doesn’t seem to me that Song Master supports ableton LINK at all, in fact even activating it in GP4 and starting a song in Song Master the BPM global time don’t change.
So excluding the LINK possibility, however, there is the OSC option. Song Master supports OSC actively and in a fairly complete way, as you know you can control from GP4 setlist song start/end and other various things through OSC commands or scripts. In fact inserting the specific GP4 OSC command for BPM tempo “/setBPM” in the external controller track of Song Master, you can change the BPM in GP4 global. Unfortunately it’s not a “real” synchronization, you can only send some specific BPM changes where you insert them and so the problem still remains of not being able to synchronize the BPM in real time during the execution of the song. Unfortunately this serves for the tempo sync of various VSTs arpeggio, delays, etc used in GP4 rackspaces.
I was wondering if it’s possible to do something from the GP4 side using an OSC script? maybe continue to auto request the BPM value from Song Master every specific milliseconds to update the BPM global value in real time. Or do you have some other solution for MIDI clock sync between Song Master and GP4. Song Master as Master MIDI clock and GP4 as slave.
What do you want to achieve:
Change the tempo in Gig Performer and Song Master should follow, or the opposite?
Maybe this gig script can help to get the tempo from Song master to GP
You have to enable OSC in Gig Performer do the correct setup in song Master and GP.
var v_bpm : double
// Called when a specific osc message is received
On OSCMessageReceived(m : OSCMessage) Matching "/bpm"
v_bpm = OSC_GetArgAsDouble(m, 0)
SetBPM(v_bpm)
End
Gig Performer tempo should follow Song Master BPM “realtime” tempo.
As I wrote I can send a specific tempo change from Song Master to Gig Performer using Song Master external control track and send the specific OSC command “/setBPM” to GP. However this is not useful to me. I need a solution more similar to LINK, where BPM change can follow the changes in the tempo song in “realtime”.
Song Master OSC implement these commands:
SND RCV Parameters Description
x /bpm request the bpm to be sent
x /bpm bpm (Double) the current bpm
x /timeSig request the Time Signature of the current song
x /timeSig time_sig (String) the current Time Signature
x /songInfo request information on the current song; this information is
returned as the /songInfo message below
song_name (String)
album name (String)
artist_name (String)
x /songInfo bpm (Double)
key (String)
timeSigNumerator (int)
timeSigDenoinator (int)
However I would like to ask, from what I can see this script change the BPM parameter in GP when the specific OSC message is received from Song Master. But how I can request the bpm to be sent (following the Song Master OSC implementation table linked above “/bpm”)? I mean request from GP the actual bpm value from Song Master? and more important how to auto continue request the value for update it during the song?
You need no request from GP
When song master sends the OSC message whenever a song is started or the tempo is changed then the callback in GP is executed and the bpm is set.
When the song is loaded or during play nothing happens. The OSC configuration is ok on both end. In fact I can control Song Master from Gig Performer (start/stop, prev, next, select playlist songs,etc) using OSC commands and scripts.Also I can receive specific OSC commands from Song Master to Gig Performer, so I think the OSC configuration is ok.
Are you sure that Song Master always send OSC bpm values at song load and during play without any request from gig performer?
From what I learned Song Master doesn’t always auto send an OSC bpm value at losd or during play but according to its OSC implementation data table it can reply to a bpm request and send the value (this is true also for time signature). So I need to use the scripting feature of Gig Performer to send the request and maybe find a way to do this recursively. I’m try but for the moment no luck. But I’m new to scripting…
var bpm : double
mOSC : OSCMessage
// Called when a specific osc message is received
On OSCMessageReceived(m : OSCMessage) Matching "/barBeat"
OSC_SetAddress(mOSC, "/bpm")
OSC_Send(mOSC)
End
On OSCMessageReceived(m : OSCMessage) Matching "/bpm"
bpm = OSC_GetArgAsDouble(m, 0)
SetBPM(bpm)
End
The trick is that Song Master sends the message /barBeat on each Beat
Now for each beat a message to Song Mager can be sent to send back the bpm
Thanks again for your help. Now the script works and I also understand its logic. I tried also using the same trick to receive the time signature but it seems to me that gig performer don’t allow to change time signature through OSC. Song Master can send the values (string value using /timesig or two integer for numerator and denoinator using /songInfo) but GP can’t use them for change the time signature value, or maybe I’m blind and I don’t see the time signature osc command on its documentation.
What’s more important however is that unfortunately seems that Song Master have a problem. It has two type of BPM values, global (average) and instantaneus (for current bar). The bpm value that it sends using OSC is the global so it can’t follow in-songs bpm changes (pretty common that there are slight variations).
So at the moment it isn’t too much useful, but it’s not a problem of gig performer, it’s Song Master that has bpm send limitations. It doesn’t have ableton link, it doesn’t send a standard midi clock and even using OSC it can send only the average bpm and not also the instantaneus bpm. It’s metronome use the instantaneus bpm…but it doesn’t have an OSC command for it so you have no hope ro really sync in realtime tempo changes.
I would like to ask, can you suggest me on windows an osc tool for “see” the OSC data in transit so I can see what data they exchange?
And I don’t think song master is capable of generating a MIDI clock signal either. But, @aurallysound, the Song Master dev, could indeed confirm this. And perhaps he could come to the idea to implement Link or a MIDI clock in Song Master
As a MIDI clock sends something like 24 0xF8 messages per quater note, I don’t think you will be able to keep GP seriously in sync with Song Master by retrieving its current tempo or a some beat messages. But, it depends from what you exactly want to achieve.
Hi @oscar, the ‘bpm’ value in the Song Master sent /barBeat OSC message is the instantaneous bpm. However, this is probably not something to use for critical MIDI sync since it is an algorithmically generated value that may fluctuate based on, for instance, drummer performance and algorithm resolution.
Song Master has been developed as a music learning/practicing tool which is why we don’t have support for ‘live’ music features such as MIDI sync and Ableton Link. Having said that, we will consider adding such features in the future.