Cubase 12 Midi Remote - Scripting potential

By the way: I don’t know who marked this topic as solved with Jochens hint towards the scripting manual. But that was not my question. The thread is solved as soon as we definitively know wether bidirectional midi (feedback) and sending of track information to the midi device is possible or not within the java script.

The answer is: YES IT IS POSSIBLE!
Otherwise the LEDs of the Novation Launchkey couldn’t be driven. The Script API has everything you’re asking for.
But sending track names and colors means you need to know the sysex-protocol of the specific device.
If the manufacturer provides a proper programmer’s documentation for the device, it’s quite easy. If not, you would have to reverse-engineer that, but that can be a time consuming task.

8 Likes

Jochen, that is great. Thanks for making it clear. Just one more thing about the sending of track name, if I mays: So, you can already do that, too? I would have no problem sending those names as sysex packages. Sure: OSC would be easier, but the devices I am sending to will handle sysex just as well.

Yes.

Here is a pseudo-codish example:

var fader = deviceDriver.mSurface.makeFader(0, 0, 1, 3)
fader.mSurfaceValue.mMidiBinding.setInputPort(midiInput).bindToControlChange(15, 21)

var page = deviceDriver.mMapping.makePage('Default')
var selectedTrackVolume = page.mHostAccess.mTrackSelection.mMixerChannel.mValue.mVolume

fader.mSurfaceValue.mOnTitleChange = function(activeDevice, objectTitle, valueTitle) {
	midiOutput.sendMidi(activeDevice, [...SYSEX BYTES WITH objectTitle CHARS...])
}

fader.mSurfaceValue.mOnColorChange = function(activeDevice, r, g, b, a, isActive) {
	midiOutput.sendMidi(activeDevice, [...SYSEX BYTES WITH color coding...])
}

fader.mSurfaceValue.mOnDisplayValueChange = function(activeDevice, displayValue, displayUnits) {
	midiOutput.sendMidi(activeDevice, [...SYSEX BYTES WITH displayValue CHARS...])
}

page.makeValueBinding(fader.mSurfaceValue, selectedTrackVolume)
4 Likes

Important is:
You have to call setInputPort for each midibinding, so the system knows which ports to use. There are many midi controllers having multiple inputs and outputs that mustn’t get mixed up.

If you want 1:1 message transmission back to hardware you set setOutputPort that’s the equivalent of the “T”-flag in Generic Remote but with the option to choose a specific midi port if it’s a multi-port device.
If you want more control over returning messages to the hardware, you don’t set the outputport but you register those callback-function in the example above. within the callback you can use the midiOutput-object to send a plain old midi message to the hardware.

2 Likes

For sure it can send MIDI out to get feedback on buttons connected to things in the mixer.
But what I read in your post was that you wanted the MIDI CC data from the selected Track to be send to your MIDI controller to get what you called:

midi-feedback (quasi “flying faders”)

Since you were talking about it only being possible on MIDI tracks and not VST-Instruments. Maybe I misunderstood that.
Looking through the API it doesn’t seem to get the MIDI from the selected track, but I guess it’s also not really a “Hostvalue” since it happens between the track and the output port. idk.

But it’s awesome you can get the name from selected track via Sysex etc.

Best

You cannot get MIDI messages of a track here. Only from the hardware. The whole thing is for using hardware midi controllers as a remote device for Cubase. I believe you are asking for MIDI Plugins here which is a different thing.

1 Like

Ok, then I guess this is a feature request I have: countless people using large templates of virtual instruments want to use their iPads to get touch control of the parameters. Having only one-dirctional control via midi CC is getting old and is not really doing justice to the possibilities we already have with Tablets for more than 10 years, now. It is time to offer something much more elegant and that is what I hope the remote api is going to enable me to build:

Part of this is possible with automation, but using automation is for many reasons not as convenient in Cubase as using midi CC. You don’t have it visually paired with you note data in the key editor. Also, in my template, with midi cc I can just record all parameter values (I have a special command for that wich sends all CC values for a given instrument) on a track and with midi chase, these settings are recalled whenever I open that project. With automation, all settings are lost unless I specifically write a node for each parameter seperately. Also, having to enable write and read is crippling creativity with another unnecessary step.

All in all: in Cubase there is no elegant way to set, save and control instrument parameters with a modern touch screen device in a musical way. That is what I had hoped remote control would enable advanced users or even developers to build.

I will have to take time to dive into the protocol and get my hands dirty, but from what I understand, there is not way to route the recorded midi CC on a track to the hardware device (which is actually other software running on an iPad). The way automation currently works in Cubase, I prefer using midi CC instead for instruments and that is why I request the ability to route midi CC to the hardware device to display the actual values recorded on the track.

Thanks Jochen for confirming this and helping us grasp the New API :clap:

@FriFlo pretty much summed it up.
It is basically to send the CC MIDI data from the track to a hardware controller (or touch surface) just like we get to do it with QC.
It will let us know much faster the state of the instrument (is vibrato on, is the volume down etc), where now quite often you work in blind when it comes to those messages and large arrangements.

Maybe later down the line the API will support that :crossed_fingers:

Thanks again.

2 Likes

This is my unfinished script for FaderPort8 MIDI controller for Cubase using the Midi Mode setup. Put the file in (Windows 11)
C:\Users<MY USER>\Documents\Steinberg\Cubase\MIDI Remote\Driver Scripts\Local\PreSonus\FaderPort8

This website does not allow to upload js files, so I changed the extension to mid. Please change it back to js.
PreSonus_FaderPort8.mid (22.3 KB)

1 Like

+1

Steinberg, please make this a feature as soon as possible. Seems like a simple fix.

2 Likes

As a Cubase user since Cubase 3 before sx - hypercube might not be the only one who could have been offended on the forum - really could be convincing at influencing whether to upgrade to 12 though. The API should be available - and I am not going to disturb my computer system to install 12 to get it - I think you should send it to me or let me know where how to get it without installing 12.

Thanks