MIDIClockOut + latency

Hi, I often use MIDIClockOut linking/syncing it up with a Prophet Rev2 with success, but sometimes for some reason I get a second or so of latency, which is indeed very annoying.

Has anyone either come across this, and has a solution, or simply someone has a suggestion as to how to get on top of this annoying problem.

For your information I’m on a Mac (10.13.6).

Thanks in advance - joesh

BTW, just to give you an idea of the latency, if I wish to play and synchronise a sequence on the external synth with SC, I need to play everything an 1/8th note early.

Okay, sorted it out.

If it’s of any interest/use to anyone, Dave Smith updated the Rev2 OS with a Arp Sync Function. This made it difficult to get SCs clock and the Prophet’s time divisions to agree.

1 Like

Hi @joesh,
I’m interested in doing something similar: Using MIDIClockOut to use SuperCollider as the master clock for something else (software DAW, or hardware gear).

Could you please share some of your code for doing this?
It would be of great help for me.
Thank you so much for your kindness
bye
na

No problem, you should tell me what you’re looking for, and if I have something useful I can post something. However, what I tend to do is use SC and (in this case) a Prophet Rev2 in parallel. As an example, I might use SC for the rhythm part (drums/blips, loops, or just sampling), and play chords and other things on the Rev2. This means I rarely use SC to trigger the Rev2 synth - although I have done.

One of the problems I haven’t solved as yet is the different layers (layer A - layer B), which is a bit of a mystery. Every piece of code (no matter the midi value) tends to trigger the Layer A (below middle C).

BTW, I use SC as the master midi clock, as you might have gathered from the post title.

1 Like

Thank you @joesh,
I’m simply interested in knowing how is the correct setup to make the MIDIClockOut work properly.
I came out with this snippet

MIDIClient.init;

t = TempoClock.default;
t.tempo_(136/60) // just a test

m = MIDIClockOut(tempoClock: t); 
m.play;
m.stop;

Does it make sense to you?
Do you use something similar?
thanks you

Yes, that’s exactly what I use. I put all mine at the beginning of the program and run it immediately in a block of code:

(
s.boot;  // or reboot depending on what I'm doing. 
s.waitForBoot;
~t = TempoClock.default;
MIDIClient.init;
~clock = MIDIClockOut("Rev2", tempoClock: ~t);
s.sync;
);

~t.tempo_(75/60);
~clock.play;
~clock.stop;

Sorry I’d misunderstood your question.

1 Like

Just out of interest @moscardo, this discussion could also be useful, if you haven’t already seen it:

1 Like