Monitor the project cursor position of Cubase with OSC

I can offer assistance. What have you tried so far?


Thanks Theodor...I guess I don't even know where to begin. I was savvy enough to figure out how to get TC running to a widget, but at a loss when it comes to using a custom module, etc...


Using Cubase BTW

  1. Copy these widgets to your session.
    Bars & Beats - MCU.json (9.5 KB)

  2. Match their target to the virtual MIDI port you're using in the Mackie Control remote (it must be a separate port; one that's not used in other scenarious). If you don't work on a MAC, you need loopMIDI to create a virtual port (you probably knew that...).

  3. Install one of these two code editors (you'll need one to edit the custom module in a more peaceful way).

  4. Create a js file containing the code below. You can use any text editor, but the ones I mentioned above are more comfortable to work with. The name of the file doesn't matter.
    Note: replace SKiano-C in the code with the name of your virtual MIDI port (the one you use in the Mackie remote control as output).

module.exports = {

    oscInFilter: function(data) {

        if ( === 'midi' && data.port === 'SKiano-C') {
            var [channel, control, value] =>x.value)
            if (control > 63 && control < 74) {
                var digit = 73 - control,
                    msb = value >> 4,
                    val = value & 0xF
                if (msb >> 2) val += '.'
                if (!(msb & (1 << 1))) val = ''

                // digit -> digit
                // val -> digit's value 
                // assuming 10 text widgets with incrementing preArgs 
                receive('/timecode', digit, val)

  1. Open O-S-C and load the js file you've just created to the custom module slot.

  2. That's it!

These instructions wouldn't have been possible without @jean-emmanuel's contributions in this topic, so all credit goes to him.


Hallelujah! It worked! It didn't work at first when I used Text edit to make the js file so I used Visual and worked like a charm. Thank you so much and @jean-emmanuel. I can repay with custom icons if you ever need?? I seem to have figured that out...made the Cubase "e" amongst others. :wink:

New problem now. Running a second Mackie control in Studio Setup(remote devices) makes Cubase think I have 2 fader boards. Which then stops the one I am using from controlling half the tracks. I am already using the one in the first Mackie control. Is there anyway to get the info the widget needs from another "remote device" besides Mackie Control? Maybe Mackie HUI?

In one sentence, I would try to send the same thing to 2 devices, i.e. to the MCU device (the fader board) and O-S-C.


  1. Create a separate virtual MIDI port (only for the purpose mentioned above) using loopMIDI (if you're a Windows user) and name it MCU-OSC.
  2. In Cubase, go to "Studio / Studio Setup / Remote Devices".
  3. Make sure you have a single Mackie Control remote and then set [only] its output to the virtual MIDI port you created at step 1 (i.e. to "MCU-OSC").
  4. Use Bome Midi Translator Pro to route the signal of MCU-OSC to both the MCU unit (the fader board) and O-S-C. I don't know of any other means of routing a MIDI port to multiple ports.
1 Like

You really know you stuff my friend. That 100% worked! Thank you!

Found a free program called MidiPipe that did the same trick as Midi Translator.

1 Like

I can't figure out how to do it. Could you please explain how? I'm trying to do this with sysex that come in 3 parts.

I can't thank you enough for everything you've done!

It's what I did in this reply, the idea is to use an array to store the digits and send it when a digit is modified.


I tried this method and couldn’t get it to work with Nuendo 12. Did something change with OSC or Nuendo for this code not to display timecode ?

If you're interested only in timecode, follow these steps:

  1. Have this field start with "mtc".

  2. I don't know how it's in Nuendo 12, but in Cubase 12, you should go to:
    Transport / Project Synchronization Setup...
    Then navigate to the second tab (Destinations). Once there, activate the port that is supposed to carry timecode information to O-S-C (see below screenshot). You don't need a separate port for this. "MTC" is a different MIDI message type (i.e. it's classified in the same category as "/note" and "/control")

  3. Now all you have to do is add a text widget to your O-S-C session and make the following settings in the inspector:

  4. That's it.


Thank you for the reply. Do I still use the Beats & Bars - MCU.JSON widget from above?

I got it somewhat working. But all the displays look the same and don’t match my Nuendo timeline

Nope. Just a single text widget.

1 Like

It works :).

Thank you very much.

Sure. Good luck!

Just wanted to say thanks Theodor and Jean-Emmanuel for this thread, it was exactly what I needed, wow!

(I've just joined the wonderful world of OSC and started to play with it to create a custom control surface for Cubase on Windows: lots of studying and experimenting at the moment, but hopefully in a few weeks I'll be able to share a first draft for other newer users to reuse)




And here I am already with my first basic question/doubt :roll_eyes:
I was able to make the timecode and bars/beats/tick displays work but not at the same time, meaning: the timecode display works as long as I don't load the .js for the bars/beats/ticks as a custom module in the config, and it seems this is exactly what happened to Theodor at some point in the past, so my guess is that when you load a .js with a filter in it, it affects any other incoming data in the session, even if the widgets use different ports. Is that correct? Does this mean that, if I have a .js, it has to explicitly cater for all incoming data in the session? Thanks!

What made you say this?
I'm asking because I'm not sure I had this problem in the past.

Hi Theodor! Firstly, many thanks again for your contribution to this thread, I only managed to make this work thanks to your step-by-step guide above, much appreciated!!
I was under the impression that the text I'm quoting above hinted to my same problem, i.e. when the .js is loaded some of the widgets that used to work (like the MTC one, once again made with your great instructions!) stop working. But maybe I misinterpreted and it's just my problem :slight_smile: Anyway, reality is, this is what happens to me and I'm kind of at a loss here. But since I've found a great guide to MCU and I have MCU setup for the Bars/Beats/Ticks, I thought I'll just ditch the old MTC stuff and try to create a MTC display using MCU, hopefully that will work!
I was more curious on a general level as a newbie, whether loading a .js for a specific task has any implications on the rest of the widgets.

Thanks sharing this.

I don't have time right now to give you a more detailed answer, but it has (more or less, anyway).
I'll write this though: custom modules (.js files) are custom (they are not / shouldn't be "for a specific task"). You need to learn the structure of the code, to see where goes what, and then find what could interfere with the osc/midi messages that are generated/picked up by the widgets in the O-S-C session.

1 Like