Icon Platform M+ MIDI Remote - should work with any MCU based controller

Hi, in my scripts I’ve solved this by having a separate event:

 var fqcControl=page.mHostAccess.mFocusedQuickControls.getByIndex(controlIndex)
 fqcControl.mOnTitleChange=function(activeDevice,activeMapping,pluginName,paramName){
}

The con of this approach is that we have to check inside the event, whether we are in a subPage for the FQCs in order to update our controllers.

1 Like

Thanks, that helped a bit. I updated accordingly and its responding now. I need to refactor the display handling. It’s very messy and I’m still seeing some outcomes that shouldn’t occur. I think it is because of timing of events on the individual column updates - some a fader onTitleChange others FQC onTitleChange. They appear to interleave in the logs sometimes and not necessarily in the order I’m expecting so a title or value goes missing. Probably some async/thread thing going on underneath.
Javascript syntax still baffles me as well. I’m a C++/C/Python programmer normally.

Also started noodling around with the mOnIdle function in v1.1 of the MIDI Remote API. Looks like it might be possible to have it switch back and forth the display so on, say, Selected Track page you can see the Selected Track name in full for 3 seconds, then it goes back to the Fader/Pan Titles.
Whilst noodling with that it occured to me I can probably get some of the buttons to have a short press and a long press functions - so we can have more buttons to push. Perhaps even have a state that is toggled on causes buttons to flash to show additional state information.

I should probably write some music - rather than coding, perhaps my subsconcious is keeping me from inflicting bad music on the world :smiley:

1 Like

Same here :slight_smile:

Sure. Just use the Date function of js in order to keep track of the duration. Another option is the one I used extensively in a script I didn’t have many buttons as well, the double-click. Let me know if interested in this one as well, I will share a snippet. And we always have the option to turn some buttons to “state” ones. I abused this one with creating 5 states in my go-to for now controller. But, this needs a bit more of our muscle memory unfortunately, especially when there’s no display feedback.

Hey Rob,
Awesome to hear from you! The delayed reply actually worked out for me, because it gave me ample time to dive into your setup.

I’ve been Running Cubase 13, and everything’s smooth sailing.

No display on my end, so no comments there.

Your mappings have been a joy. Now that I’m accustomed to them, they make total sense, and I have fewer requests than when I first started.

About the rotary controls on the M+ in general (nothing you can do about this) but for me they felt a bit slow and unmusical, if you know what I mean so, I just prefer using the faders for everything which feel amazing.

I’ve got a Platform X, so I just mapped those faders to handle all my send levels. Works great for now.

Your M+ mappings take care of the rest, and let me tell you, it’s one heck of a fluid workflow. Kudos and many thanks.

Not much of a coder here, so even basic changes would be a bit tricky for me.

One thing I’m really missing is the touch buttons to select tracks in mixer mode.
Also, I’d absolutely LOVE your mappings to see all tracks (FX channels, etc.) represented in the mixer page.
I do like to mix my FX channels constantly. I heard someone in this thread figured it out. Any way you could implement that?

As for other ideas, I spend about 12 hours a day on cubase for my profession , so If you give me another week or so… I’ll distill my thoughts again, rather than waste your time, and feedback anything that I think might be a good idea.

Yes, the dents are one of the drawbacks of these. They are also turn rate related. So you turn them slow and you get small increments, fast you get large increments. But looking at the MIDI they produce this isn’t very well controlled (sometimes it gives a larger step than the current rate implies, and vice versa). Like you I tend not to use them for musical things - it’s one of the reasons the CC page exists.

I will modify the script to see all tracks. We have some options as we can exclude/include Inputs, Outputs, Left Zone, Right Zone. I was thinking maybe exclude the Left and Right zones, that way you can control some of what is in and out via the Cubase Mixer layout?
Also we could have a page for just say FX channels and map various other buttons to suit?

I’m not sure what you mean by “touch buttons to select tracks in mixer mode”?

I’m still thinking about the “flip faders and knobs” capability. Should be doable but my code base is a mess with all the learning I’m doing so I may refactor it to make it more manageable based on all I’ve learned so far. I’m on recreation leave now so have an opportunity to put some real time into the hobby.

You are using this a lot more than me, so keep the ideas coming, more than happy to learn workflow tips from a pro.

Can anyone tell me if something like this is possible to use with the D2 Screen for the Platform? I don’t own the screen, but was considering purchasing it if it could be compatible with a custom script like this.

Hi @dylanmixer
Yes, the Icon Platform M+ MIDI Remote works with the D2 screen when using scripting with MIDI Remote. I purchased the D2 screen and wrote the MIDI remote script from this thread.

I’ve recently been reworking the Screen update related code in the script due to cubase MIDI Remote weirdness and my own “learning javascript” errors (I’m a C++ and Python coder). The latest version on the develop branch has many fixes for display weirdness. I’ll push out a new release version for download soon with some other tweaks.

Cheers,
Rob

1 Like

Excellent, thank you!

What an incredible piece of art! Awesome!
Since you mentioned different “pages” for certain tasks/ possibilities, let’s say for editing tasks… Wouldn’t it be cool to let the jogwheel do a split at cursor position, when you push it? Or is it already doable by changing some code?

Again, awesome!!

Hi Folks,
I’m taking a little longer with the new release. I was finding the javascript a tad annoying and checked out what @bjoluc had been doing using typescript in the MCU Midi remote - very clearly they know a lot more than I do about type/javascript. Having taken a very deep dive and now small amount code borrowing I’m now on the path to a v3 of the Icon Platform M+ MIDI Remote using some of his more advanced techniques. It’s taking a little while to rebuild the system but I expect more advanced features to be available as a result.

Cheers,

Rob

2 Likes

Icon Platform M+ MIDI Remote v3 BETA
Download of midiremote archive here:
Icon_Platform Mplus v3 beta.midiremote (41.8 KB)

New git repository: GitHub - woodcockr/cubase-icon-platformmplus

Breaking change - very good chance this only works correctly with Cubase 13 since it uses API v1.1 features like onIdle and Fader Touch. Might be able to back port it (probably just tweak the timer source to not use the timer API but the legacytimer module from @bjoluc - I’ve not tested it. If you want to try you will need to build from the typescript source and change utils.ts line 91 ‘let isIdleCallbackSupported = true;’ to false.)

This is a major update with a complete conversion to typescript courtesy of the excellent and open work of @bjoluc on the MCU MIDI Remote - Thank you! I’ve borrowed many of the patterns and code but since the Icon Platform M+ has fewer buttons and many more Pages to deal with as a result I’ve modified several things.

For those of you writing Midi remote scripts with a degree of complexity, once I got my head around it typescript was a lot smoother to deal with than base javascript for the more complex scenarios, and @bjoluc has created some excellent patterns and wrappers to use.

What’s New

  • Basic layout is the same for the pages and buttons. Some minor variations in how LEDs light (or don’t light to be more correct). Mostly impacts action and command related bindings because they don’t support toggle type.
  • Display updates - massive rework. Fader info in top line, Knob info in bottom line. Turn a knob and the value will display and then after a few seconds return to telling you what the knob does (courtesy of having onIdle functions). Press the Mixer button to toggle the display of Knob titles and values.
  • MIDI page now has a set of configurable values if you build from source (be nice if this could be read from a file on start up)
  • There a bunch of ugly hacks to get around problems with changing pages where the new fader/knob binding are inactive (e.g. Selected Track with no QC). These hacks will keep the scribble strip blank but it would be nice if I could get it to display the Page Name you are on so you know its active. I have a theory.)

BETA - which mean’s probably buggy so use at your own risk. Feel free to let me know about issues. New features are also possible now. onIdle opens opportunity for short and long press buttons amongst other things.

2 Likes

Perhaps I’m stupid but I can’t get v3 to work on 13.0.20 and Windows 11 :face_with_hand_over_mouth:
It says “Connected” but the screen reads MCP Mode Selected and nothing else. The faders are all down.

Sounds like MIDI Remote didn’t re-connect the MIDI ports. Go to the midi remote manager and disable the script. Then re-enable. You will then need to add the Icon Platform M+ again and it should ask for two midi ports - 1 will be the Platform M+ 2 will be the MIDI CC port.

I saw something similar during development.

1 Like

Can anyone using this script that owns the D2 screen possibly capture a video of it working with the script? Still on the fence about buying the display, and I can’t find any videos of the display working with anything other than standard Mackie settings.

I’ve tried out the script (both v2 and v3beta), but I’m having trouble with the midi page. I did setup a virtual port (which is active in All Midi) and the cc-data does get to my instrument. It works until I try to record, then the cc-data still gets to the instrument, but doesn’t get recorded in the midi clip. When I enable Read Write somehow the volume of my instrument track sets itself to minus infinity all the time. Am I doing it wrong? Is there a Cubase setting I overlooked? (Im on cubase 13.0.20)

Hi @Joshua_Reiners
I just double checked on my rig and cc data is definitely recording when the track is record enabled and the Icon Platform M+ is on the MIDI CC Page.
image

The setting in my midi remote manager look like this for the midi ports (the Icon CC one is the virtual midi port):
image

Only a couple of things I can suggest to double check are:
These are my Studio Setup → MIDI Port Setup for the Icon CC (In “All MIDI In”)

Anything being filtered in the Preference MIDI Filter section?
image

Hi @dylanmixer
Not a video but some quick photos of v3 use of the Display:

This is the Mixer page - top row abbreviated track names (on faders), bottom row current control title for the knobs.

20240107_005538192_iOS (Small)

When you turn a knob it temporarily shows the value changing:
20240107_005543326_iOS (Small)

Next we have the Selected Channel page:
Top tow is the current Focus Quick Control names on the faders (abbreviated of course)
Second Row is the Send number as the volume controls value as before the display will change to the actual value when knob is turned and then go back to the send number when finished.

20240107_005559869_iOS (Small)

Next we have the channel strip page:
Top row is the name of the control on the Fader - in this case its on the sub-page for the Gate so the names are the controls for the gate (abbreviated)
No mappings on the knobs in this one so they are blank.

20240107_005638801_iOS (Small)

Next up control room - self explanatory:
20240107_005646153_iOS (Small)

And MIDI CC Page (the names here are embedded in the script):
20240107_005649941_iOS (Small)

Finally the “M” Fader on the right is set so that when Touch it display the full name of whatever AI parameter it is controlling.

20240107_010907310_iOS (Small)

V2 had some other pages with Full screen length naming that could be brought into V3 alongside the “when I stop changing it go back to abbreviated form” to support navigation. Not to sure how useful that is in practice.

Open to suggestions on how to improve the display feedback. I’ve been considering hooking up a raspberry pi or arduino as a MIDI merge + High resolution compact display combo to augment the system (and eliminate the D2 display). There are a very narrow but wide displays that might keep a similar form factor (and for that matter could add touch screen buttons for additional control). But that is a longer term project.

2 Likes

The rpi idea could be implemented with an app like touchOSC. It runs well on Rpi 4 and above. Also it is cross platform and could be used with android tablet or ipad instead.

I am developping a template that is intended to be used in extension to a MCU style controller. My aim is to display/control the full channel as well as give access to shortcuts like loading plug-ins…

I should make a short video to show how it works.

Thomas

Hi, I’ve been in a similar track, and at the end I didn’t go for an external device, but a single display that receives from an app on our PC (I used Java but it can be anything really). A bit later I found out that the advantages of creating a utility to show parameters was not even something important, since we can design the MIDI Remote’s UI in a way to almost perfectly fit the display. Anyway, here’s a photo of my setup with the display I’m talking about:

And here’s a photo where we can easily have other stuff as well (in this case the track presets browser):

I just found it more handy to use the native windows of Cubase, instead of getting into using my external app.

My settings here:




Everything looks ok to me, but it still doesnt work.
Here is a video of what’s happening:

But I kind of feel like this is a probleme with my cubase and not the script. Btw your script is awesome, thanks for sharing your incredible work.