# Open Stage Control (Tutorial) - An alternative to Lemur and TouchOSC



## Manaberry

Hi everyone! I've been using Open Stage Control for almost two years now (jeez, time flies). This application really improved my workflow as a composer. It’s an alternative to Lemur/TouchOSC. This is a free software developed by Jean-Emmanuel, available on Windows, OSX, Linux. It's quite a long post, so get some coffee!

For *Mac users*, Brian Rivlin made a fantastic video about O-S-C, and how to set up the software. For Windows user, stay with me and follow this thread 




_____________________________​


Welcome to this tutorial (for Windows 10) to set up and use Open Stage Control as a MIDI/OSC controller using your web browser. It is similar to Lemur or TouchOSC, but in order to work, it requires some configuration.


*Introduction to Open Stage Control*​

Open Stage Control is a desktop OSC bi-directional control surface application. It's built on web technologies and runs as an Electron web server that accepts any number of clients.
​*What are you able to do with Open Stage Control?*

You can use it to create your own mixing table with endless tracks. You can create a modal window that pops up for your articulation to save room. You can set a single input field and spread the value with a variable through the whole thing (devs know). You can just do all of the previous things within a single one screen area. There are similarities to Lemur on the script side. It’s javascript.



I'm using a Dell P2418HT screen.
​

A bit of programming and it does work perfectly with Cubase, Dorico (with Bome Midi Translator), and Ableton.

I also created my own color palette - there are some CSS (Cascade Style Sheet, the common way to controls the appearance of elements in a front-end web environment) fields so, there are no limits here. You can create something that looks like Tony Stark’s suit if you want.



I have information stored in a javascript file, which is imported into OSC when the software starts(custom-module field.) Those data are about articulations mostly. It does look like that:



> {'name':'Marimba','color':'47bbff','background':'1b1d20',
> 'articulationsLong':['Fingers','Hard','Soft','Muted'],
> articulationsShort':[],
> 'articulationsDeco':[]
> }


It's an improved version of a code from Mihkel Zilmer. Thanks to him for sharing it here in this thread!

*Name *is displayed in a text area.
*Color *refers to the text color.
*Background *refers to the background color of the button.
*Articulations *are split into 3 sections: *Long*, *Short*, *Deco*.

Of course, this is how I did my template and how I organize the data. You are free to do differently 

The more you work on your Open Stage Control template, the more you can do sophisticated things.

But first, we have to install the server!

​





My template (Cubase)



*Step 1: Core installation (obsolete since version 1.70)*​
Since 1.7.0, you don't have to install python and rtmidi anymore. If you still want to use an earlier version of Open Stage Control, the instructions are available in the following spoiler container.

If you want to continue the installation of OSC 1.7.0 (or above), please go to Step 2 "Midi Setup".


Spoiler: Click to open instructions for earlier versions of OSC.



Libraries are needed to make this work. Let’s install them. Nothing complicated. First, we need Python on the computer. (_obsolete since version 1.70)_


*1. Install python *_(obsolete since version 1.70)_

https://www.python.org/downloads/release/python-365/

*2. Install rtmidi python package (command prompt) *_(obsolete since version 1.70)_


*Step 1: Run the Command prompt as Administrator:*​Search for “cmd”, right-click, Run as Administrator.​​​*Step 2: Go to the Scripts directory *_(grey color = command/response in the command prompt)_​Use the following command to access python directory. (“cd” means, Change Directory). You can also go to the parent folder by using “cd ..”​
cd C:\Users\YOURUSERNAME\AppData\Local\Programs\Python36​
*Step 3: Run the python-rtmidi command to install the package*​Enter the following command in the command prompt and let the magic happen.​​pip install python-rtmidi​
​(If you have an error: LINK: fatal error LNK1181: cannot open input file ‘python34.lib’, go to libs folder in the python install directory; duplicate python36.lib and rename it to python34.lib. Now go back to step 3. It’s looking for an older version of python lib.​
***​
*Important*: To avoid any error, please update “pip”. If there is no error, we are good to go!

Now, we need to create a virtual midi port in order to initialize our little server. In my case, I’m using rtpMidi. The next step of this tutorial is featuring screenshots of this software.




*Step 2: MIDI Setup*​

Open Stage Control is not that hard to set up. It’s pretty easy, to be honest, but follow the next steps carefully; it will be helpful for further maintenance if something went wrong.


*Virtual MIDI port*
Open Stage Control needs a free midi port to work with. If you want to run the server on your working computer, then loopMidi is enough.


*Single computer *(loopMidi)
Just create a midi port. In this tutorial, It will be named “VIControl”. (_avoid using "space" in the name_)​




*Two computers (network) *(rtpMidi)
For clarity, *MC *stands for Master Computer (the one receiving MIDI). And *SC *for Slave Computer (the one running the server and sending MIDI to *MC*).​

*1.1* On the slave computer (*SC*) that will run the server, let’s create a new session named “*toVIControl*” on rtpMidi. (_avoid using "space" in the name_)




​*1.2* On the master computer (*MC*), let’s create “*VIControl*” session.




​
*MC* We already see the session from the slave computer (_toVIControl_). Press “*Connect*” to add this one to the list of Participants.
*SC *Same step, connect “*VIControl*” from the Directory list to the participant's list in the “toVIControl” session.


rtpMidi should ping and connect both computers on their mutual sessions. You should see some latency value as proof of a successful pairing.


OK, the virtual MIDI port is created. You can already add *VIControl *as a new midi controller in your favorite DAW on the *MC*. The *MC *part is done.

Now let’s run the server on the *SC*.


----------



## Manaberry

*Step 3: Configuration/Initialization*​
You have downloaded Open Stage Control and you just extracted all the files. Great! Now, once you launched the soft, you should see this:



​

So many fields, so many options. For now, only two of them are mandatory for this tutorial: *send *and *midi*.

For additional information, please check the https://openstagecontrol.ammd.net/docs/getting-started/introduction/ (official documentation.)


In the *MIDI *field, we tell Open Stage Control to use our virtual MIDI freshly created with rtpMIDI. The command looks like that:


MIDIPORTNAME:INPUTPORT,OUTPUTPORT​

*!* If you remember well the MIDI session on *SC*: it will be only *VIControl *for the single computer solution.


toVIControl:INPUTPORT,OUTPUTPORT​

_TIPS: You can add as many MIDI Virtual devices as you want. Just add a space between each of them._

We don’t know the input/output port number for *toVIControl*. Don't panic, there is a simple button for that! First, start Open Stage Control.

Then *click* on the 3 vertical dots located at the top left of Open Stage Control window. Then click on* List MIDI Devices*.


Some information should appear in the console like below:







​

Perfect! Input port 49, output port 19. We can complete the command line:

toVIControl:49,19​
We have all we need to start the server. You should have both MC IP and midi command line set.


We can now start Open Stage Control by pressing the Play icon. A new window should appear as shown below.​




​
Congrats! Open Stage Control is now launched on *SC*. Now we can spend countless amounts of time making a nice GUI for our DAW and libraries!

You can now access Open Stage Control with a compatible web browser (chromium-based) anywhere on the network just by using the IP of the machine running the server (*SC*) and the port 8080 (by default).
The IP should be shown in the same window used to display the MIDI Devices list.


 (INFO) Server started, app available at 
xxx.xxx.xxx.xxx:8080
127.0.0.1:8080


*Step 4: a GUI to rule them all*
​Welcome to Open Stage Control. Now, I have to tell you that you will spend a lot of time on this editor view... Because there are so many things to do! If you are new to that kind of tool, consider grabbing a beer along with a bucket of ice. It will take time to build a complete template, you have been warned!

Before I let you go do some experiments, there is one last thing you should know. To send a MIDI message correctly, you have to tell your widget where to send the data, and how. It means that setting properly the first button and make it fully functional is primordial in order to duplicate it afterward to save time.



Let’s create a regular button. *Right-click* on the grid *> Add widget > Basics > Button*.

Click on the button freshly created. In the right panel “*Inspector*”, you should see fields spread across multiple categories. Scroll down to the "*Button*" and “*OSC*” ones and open them.

In this example, we will configure the button to send a MIDI note: (from official documentation)

- Button

on: 100 (1 to 127, define the velocity of the note)
off: 0 (note Off)
- osc

address: /note
preArgs: [1, 60] _(for MIDI channel 1, and note 60 / C3)_
target: midi:deviceName (_deviceName being one of the declared MIDI devices defined during the Step 2, so in this tutorial: toVIControl_)

You should have something like this:




​
Remember: you have to fill the *target *field with *midi:toVIControl* on every widget you create!


Decimals will round numbers. Higher the number, the higher the number of digits after the decimal place. ​Note that numbers are rounded anyway by OSC when converted to MIDI.​

If you did follow everything correctly, you should have a MIDI input signal received on the *MC *when pressing the button.

In addition to Cubase Generic Remote Control, I’m using Bome MIDI Translator to convert MIDI msgs to emulate keystrokes. It’s easy to use and powerful! It has to be installed on the *MC*.​There is also Midikey2key, which is free.​
You have everything in your hands to create your own GUI on Open Stage Control.
The last part is some CSS code and tips to help you in the creation process. Good luck and have fun!


*Step 5: Tricks and CSS code*


Here is a Spreadsheet with some CSS codes and base64 images for your template.​
If you have any questions or if you need help, feel free to ask on this thread! I will help as much as I can!

The Open Stage Control developer is highly active. If you have some errors, bugs, or even features ideas; feel free to help him by posting on the project GitHub. For other requests or discussions about OSC, please join the brand new discussion group.

Thank you so much for reading. I hope you enjoyed this tutorial and this software!

Manaberry


----------



## wst3

WOW! Thanks for all of that!


----------



## Manaberry

My pleasure!


----------



## bryla

I don’t think I’ll need this in my workflow any time soon but that is a great post! Thank you!


----------



## Shad0wLandsUK

I am getting an error on installing pip rtmidi, but not the one you have listed. Also you put that you can forget the update pip part, but I do not see that in your walk-through either :/

As I am trying to do that


----------



## Manaberry

Shad0wLandsUK said:


> I am getting an error on installing pip rtmidi, but not the one you have listed. Also you put that you can forget the update pip part, but I do not see that in your walk-through either :/
> 
> As I am trying to do that



If the python build has the updated pip version, you will not get the message.
Can you please post the error message? We will find a way to make it work


----------



## Shad0wLandsUK

Manaberry said:


> If the python build has the updated pip version, you will not get the message.
> Can you please post the error message? We will find a way to make it work


Ok man,

I have installed:
Python 3.6 (all options)
vs Build-tools (made selection of just VS 2017 options under install tab)
Was not sure if I was meant to install the full 4GB?

Here you go (see attached)


----------



## Manaberry

Shad0wLandsUK said:


> Ok man,
> 
> I have installed:
> Python 3.6 (all options)
> vs Build-tools (made selection of just VS 2017 options under install tab)
> Was not sure if I was meant to install the full 4GB?
> 
> Here you go (see attached)



You have to install the Visual Studio Build Tools. It's 1Gb download but indeed, it is 4GB of space required. 
If you have not installed it that way, it's maybe the problem. 
If some part of my tutorial is unclear, I will improve it of course


----------



## Shad0wLandsUK

Manaberry said:


> You have to install the Visual Studio Build Tools. It's 1Gb download but indeed, it is 4GB of space required.
> If you have not installed it that way, it's maybe the problem.
> If some part of my tutorial is unclear, I will improve it of course


So you want us to install the whole of the vs Build Tools?
Just that from your instructions you put '2017' in brackets, so I removed all the 'extras' 

But no matter, adding the rest now


----------



## Manaberry

Shad0wLandsUK said:


> So you want us to install the whole of the vs Build Tools?
> Just that from your instructions you put '2017' in brackets, so I removed all the 'extras'
> 
> But no matter, adding the rest now



Yes, in order to use O-S-C, this is needed files for Windows : <

You should have this installed:






(Visual C++ Build Tools core features and Visual C++ 2017 Redistributable Update).
Optional = Windows 10 Sdk and Testing tools core

I'm uninstalling it to reinstall it to capture screenshots of the process for the tutorial.


----------



## Shad0wLandsUK

Manaberry said:


> Yes, in order to use O-S-C, this is needed files for Windows : <
> 
> You should have this installed:
> 
> 
> 
> 
> 
> 
> (Visual C++ Build Tools core features and Visual C++ 2017 Redistributable Update).
> Optional = not needed
> 
> I'm uninstalling it to reinstall it to capture screenshots of the process for the tutorial.


Ok, so I installed all of Build Tools and now it has worked, after copying and renaming python36.lib and then making python34.lib too

Before that I got the 1181 error, but remembered the steps you mentioned 

All installed successfully now
Unsure how to update pip though :/


----------



## Manaberry

Wonderful!
You don't have to update pip (but if you want to, there is the command in the command prompt: see the screen you captured). Pip is usually used to install packages. You did install the package (rtmidi) we want to install. The *command prompt* part is done, so you can leave pip alone :D


----------



## Manaberry

Just to let you guys know, I'm working on releasing my template (still few things to fix). I'm also making vector icons for my daw (Live). If you want some for your specific DAW, tell me on the thread! I will try to do something 

On the dev side, the developer released nice new versions. You can now use icons (with 700+ icons font). You can also use your own with base64 method. A dark version is also available directly with a command line, based on my UI work.
You can ask for your own features on the github if needed.


----------



## jadedsean

Is it possible to use this template within a different DAW? I'm using Reaper


----------



## Manaberry

jadedsean said:


> Is it possible to use this template within a different DAW? I'm using Reaper


My template is using channel 16, and I've made a quick Python remote control to make it work with Ableton. But the template itself can be rearranged based on what you need.
You can try the reaper template first, and once you get familiar with the software, you merge both. 

Here is the thing for Reaper.


----------



## jadedsean

Manaberry said:


> My template is using channel 16, and I've made a quick Python remote control to make it work with Ableton. But the template itself can be rearranged based on what you need.
> You can try the reaper template first, and once you get familiar with the software, you merge both.
> 
> Here is the thing for Reaper.


Oh that's cool thank you so much, really appreciate it.


----------



## Gaijin14

When I run the '--midi list' message I get these error codes. Any idea what I have done wrong? 

A JavaScript error occurred in the main process: Uncaught Exception: Error: spawn python ENOENT at exports._errnoException (util.js:1024:11) at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19) at onErrorNT (internal/child_process.js:374:16) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9)

[Renderer process error] TypeError: null is not an object (evaluating 'e.socket.send') at http://192.168.1.215:8080/browser/scripts.js:414:1449 (no stacktrace available)

No worries if you don't!


----------



## Manaberry

I'm investigating your issue to see if I find any solution.
Have you reported this on the github directly to the developer?

Does the error occur even without the --midi list line?

EDIT:

Okay, I had the same issue. You are running the wrong version of Python.
Be sure to run the x64 version of Python if you are on 64 bit OS.

Tell me if it solves the problem :>


----------



## Gaijin14

Manaberry said:


> I'm investigating your issue to see if I find any solution.
> Have you reported this on the github directly to the developer?
> 
> Does the error occur even without the --midi list line?
> 
> EDIT:
> 
> Okay, I had the same issue. You are running the wrong version of Python.
> Be sure to run the x64 version of Python if you are on 64 bit OS.
> 
> Tell me if it solves the problem :>




You were right about the wrong version; however, when I run the RTmidi command I get this:

C:\Users\david\AppData\Local\Programs\Python36\Scripts>pip install rtmidi
Traceback (most recent call last):
File "c:\users\david\appdata\local\programs\python\python36\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\david\appdata\local\programs\python\python36\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\david\AppData\Local\Programs\Python36\Scripts\pip.exe\__main__.py", line 5, in <module>
ModuleNotFoundError: No module named 'pip._internal'


Any ideas what I have done wrong this time around?


----------



## Manaberry

In the command prompt, try to force pip to reinstall using the following command:

_sudo easy_install pip_

and try the rtmidi command.
We will find a way to make it work  
Usually there is no problems (like my tutorial), but all systems are different.


----------



## Gaijin14

Thanks for getting back to me. Managed to get one step forward (I think). RTmidi downloaded when I rant the command; however, the install process then generated a load of code stating 'the function or variable maybe unsafe. Consider using sprintf_s instead' followed by this explanation at end: 

'Command "c:\users\david\appdata\local\programs\python\python36\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\david\\AppData\\Local\\Temp\\pip-build-qdqk3eo2\\rtmidi\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\david\AppData\Local\Temp\pip-o48u1m33-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\david\AppData\Local\Temp\pip-build-qdqk3eo2\rtmidi\
You are using pip version 9.0.3, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.'

Any ideas what I am doing wrong now?


----------



## Manaberry

Gaijin14 said:


> Thanks for getting back to me. Managed to get one step forward (I think). RTmidi downloaded when I rant the command; however, the install process then generated a load of code stating 'the function or variable maybe unsafe. Consider using sprintf_s instead' followed by this explanation at end:
> 
> 'Command "c:\users\david\appdata\local\programs\python\python36\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\david\\AppData\\Local\\Temp\\pip-build-qdqk3eo2\\rtmidi\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\david\AppData\Local\Temp\pip-o48u1m33-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\david\AppData\Local\Temp\pip-build-qdqk3eo2\rtmidi\
> You are using pip version 9.0.3, however version 18.0 is available.
> You should consider upgrading via the 'python -m pip install --upgrade pip' command.'
> 
> Any ideas what I am doing wrong now?



Jesus, this is crazy how many errors you've got. Usually the installation goes well xD
Did you run the command prompt as administrator? (just to be sure)
I assume O-S-C doesn't work yet?

*Please tell me if you see any "rtmidi" folders (or with rtmidi name) in*

_C:\Users\david\AppData\Local\Programs\Python\Python36\Lib\site-packages_


----------



## Gaijin14

Manaberry said:


> Jesus, this is crazy how many errors you've got. Usually the installation goes well xD
> Did you run the command prompt as administrator? (just to be sure)
> I assume O-S-C doesn't work yet?
> 
> *Please tell me if you see any "rtmidi" folders (or with rtmidi name) in*
> 
> _C:\Users\david\AppData\Local\Programs\Python\Python36\Lib\site-packages_



I have a suspicion that a previous python installation left some files behind. Going to uninstall all versions, clean up files / registry etcc, then try again. Will let you know if I make any progress


----------



## Manaberry

Gaijin14 said:


> I have a suspicion that a previous python installation left some files behind. Going to uninstall all versions, clean up files / registry etcc, then try again. Will let you know if I make any progress



Good idea! Looking forward to fix all the problems then you can enjoy the software!


----------



## Gaijin14

Got it working! seems like clearing out the registry / uninstalling all versions of python did the job! glad I persisted as the software / display works great with Bitwig. Thanks for all your help. Will be back if I hit any more bumps.


----------



## Manaberry

Gaijin14 said:


> Got it working! seems like clearing out the registry / uninstalling all versions of python did the job! glad I persisted as the software / display works great with Bitwig. Thanks for all your help. Will be back if I hit any more bumps.



Splendid! I'm pleased you finally have the software fully operational. Enjoy!


----------



## Manaberry

Hi there! I'm about to move to Cubase in few days. I will upload the UI for Ableton and the Remote Control script. I will also show off the Cubase template once I've done it (probably for next year).


----------



## Akarin

Thanks for the awesome post... but the install steps gave me a headache (and I'm a Python/JS dev by trade!) I'll keep using TouchOSC for the foreseeable future


----------



## Manaberry

Akarin said:


> Thanks for the awesome post... but the install steps gave me a headache (and I'm a Python/JS dev by trade!) I'll keep using TouchOSC for the foreseeable future


Haha yes, I know that feel. It was tricky to make this tutorial and try out all the possibilities to be sure everything works fine at the end. But yeah, I fell in love for this python thing :D


----------



## wickedw

I also want to say thanks for pointing this one out. I had been looking for something like this for a while, not a fan of lemur & alternatives. 

I'm using it in my workflow with cubase and was actually very easy to get going with it.


----------



## Akarin

Manaberry said:


> Haha yes, I know that feel. It was tricky to make this tutorial and try out all the possibilities to be sure everything works fine at the end. But yeah, I fell in love for this python thing :D



I get that... but after 20 years of coding, I want to do some music not IT stuff so I'm happy to pay for something that has an installer built in :-p


----------



## Manaberry

wickedw said:


> I also want to say thanks for pointing this one out. I had been looking for something like this for a while, not a fan of lemur & alternatives.
> 
> I'm using it in my workflow with cubase and was actually very easy to get going with it.



Happy you are enjoying this little soft! Feel free to share your setup with it 

Best


----------



## lucor

Using Cubase, is it possible to make Open Stage Control react to your currently selected track. So for example, if I select my CSS Violins 1 in my template, it will automatically jump to a page dedicated to that instrument, with all its articulations and controls?


----------



## Manaberry

lucor said:


> Using Cubase, is it possible to make Open Stage Control react to your currently selected track. So for example, if I select my CSS Violins 1 in my template, it will automatically jump to a page dedicated to that instrument, with all its articulations and controls?



I'm quite sure there is some state field for that. I'm still working on it to explore all the possibilities with Cubase. I will post once I've done something very smooth and well implanted.


----------



## Manaberry

@lucor I did try with a small @{widgetvalue} and CSS. It does detect if the value is 1 or 0 (so activated or not), and then display the block or not. 
Just have to add articulations I want in each block (maybe one per section).


----------



## lucor

Manaberry said:


> @lucor I did try with a small @{widgetvalue} and CSS. It does detect if the value is 1 or 0 (so activated or not), and then display the block or not.
> Just have to add articulations I want in each block (maybe one per section).


Nice! I haven't dove into the software yet, but this may have been the last push I needed. Thanks!


----------



## lucor

Unfortunately I'm already running into problems. I got everything installed before, but in OSC itself I ran into the same problem as @Gaijin14 with the '--midi list' command not working. I had the 64bit version of Python installed, but I thought it may be because I didn't have 3.6.5 but 3.7.1 installed. So I uninstalled 3.7 and installed 3.6, but now whenever I try to install rtmidi I get this message. Any idea what's causing this?


Code:


C:\Users\DAW\AppData\Local\Programs\Python\Python36\Scripts>pip install rtmidi
Collecting rtmidi
  Using cached https://files.pythonhosted.org/packages/80/a6/23e6fdbede1914bc1a12e3e5cdc97c3de7fccc1507126a0736dd741f0a81/rtmidi-2.3.4.tar.gz
Installing collected packages: rtmidi
  Running setup.py install for rtmidi ... error
Exception:
Traceback (most recent call last):
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 93: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\commands\install.py", line 342, in run
    prefix=options.prefix_path,
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_set.py", line 784, in install
    **kwargs
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_install.py", line 878, in install
    spinner=spinner,
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess
    line = console_to_str(proc.stdout.readline())
  File "c:\users\daw\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str
    return s.decode('utf_8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 93: invalid start byte
You are using pip version 9.0.3, however version 18.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.


----------



## Manaberry

Hummm, Have you tried to update pip? (I didn't mention that in my tutorial, but it seems it's the cause of the problem).


----------



## lucor

Ok, nice that worked! Now I'm back to the same problem though. Firstly I'm not sure I did the right thing regarding my IP address for the "send" section: I typed in 'ipconfig' into the command prompt, copied my IPv4 adress from there into the "Send" section of OSC and added :8000 at the end. Is that correct?
Now with the '--midi list' command in "Midi" I get this message after pressing start:


Code:


A JavaScript error occurred in the main process: Uncaught Exception: Error: spawn python ENOENT 
at exports._errnoException (util.js:1024:11) 
at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19) 
at onErrorNT (internal/child_process.js:374:16) 
at _combinedTickCallback (internal/process/next_tick.js:138:11) 
at process._tickCallback (internal/process/next_tick.js:180:9)


----------



## Manaberry

lucor said:


> Ok, nice that worked! Now I'm back to the same problem though. Firstly I'm not sure I did the right thing regarding my IP address for the "send" section: I typed in 'ipconfig' into the command prompt, copied my IPv4 adress from there into the "Send" section of OSC and added :8000 at the end. Is that correct?
> Now with the '--midi list' command in "Midi" I get this message after pressing start:
> 
> 
> Code:
> 
> 
> A JavaScript error occurred in the main process: Uncaught Exception: Error: spawn python ENOENT
> at exports._errnoException (util.js:1024:11)
> at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
> at onErrorNT (internal/child_process.js:374:16)
> at _combinedTickCallback (internal/process/next_tick.js:138:11)
> at process._tickCallback (internal/process/next_tick.js:180:9)



It seems it's the exact same issue as ealier yep. Are you certain you got the 64 bit python installer?

For the ip, it should be the IP of the machine you want to send message to. So yeah, it should be the IPv4 one.


----------



## lucor

I used 'Windows x86-64 web-based installer' from https://www.python.org/downloads/release/python-365/ at the bottom of the page, which should be correct? (Unless I'm an idiot, which very well may be the case  )


----------



## Manaberry

Please go for the Windows x86-64 executable installer instead of the web based installer. We'll see :3


----------



## lucor

Nope, unfortunately still the same error message. :(


----------



## Manaberry

lucor said:


> Nope, unfortunately still the same error message. :(


Sweet jesus. Do you have any Discord account or something I can talk to you directly? might be faster


----------



## lucor

No, unfortunately not. I also am gonna have to call it a day for now anyway, my dog is already getting antsy and that whole thing was pretty exhausting.  I'll try to approach it with some fresh energy again tomorrow.
Thanks for your help and patience so far!


----------



## Manaberry

lucor said:


> No, unfortunately not. I also am gonna have to call it a day for now anyway, my dog is already getting antsy and that whole thing was pretty exhausting.  I'll try to approach it with some fresh energy again tomorrow.
> Thanks for your help and patience so far!



Okay! Feel free to come back for some friendly help


----------



## lucor

Quick update: after another reinstall and deleting all Python folders I also cleaned the registry with CCleaner this time, and now it works! 
Now to dive into actually creating my own setup. I have so many ideas and things I want to put in there, let's see how far I'll get...


----------



## Manaberry

lucor said:


> Quick update: after another reinstall and deleting all Python folders I also cleaned the registry with CCleaner this time, and now it works!
> Now to dive into actually creating my own setup. I have so many ideas and things I want to put in there, let's see how far I'll get...



Splendid! Happy you fixed it. Looking forward to see your touchscreen template


----------



## Manaberry

@lucor I found a way to easily change the articulation set (up to 16 different set of articulations). I do the trick with css (display:none/block based on the value sent by the DAW (I set a specific id to each track).

Quick video:


----------



## lucor

Nice! I'll look into that soon, at the moment I'm still in the process of setting all my visibility controls up in OSC. It's taking ages, but well worth it. 
Will this only work with 16 'sets', or is it possible to achieve something like this for literally every single track in a template (so in my case 1000+ different articulation and mic controller pages). I've done something like that in Lemur, but Lemur came with other problems which is why I'd much prefer to work with OSC from now on.


----------



## Manaberry

I'm sure there is a way to have way more "sets". I just have to find the right Cubase's unused setting to do this. (for now I'm just checking if there is a midi insert (slot 4) and get the channel number of this midi insert.


----------



## lucor

The solution with Lemur went like this:
- you set up a Generic Remote in Cubase so that every time you select a track, Cubase sends out a specific Midi CC (for example CC126) to Lemur
- when Lemur receives CC126 it will immediately send back another specific CC (CC127) directly back to Cubase
- in Cubase every track has a 'transformer' on it, which converts the received CC127 into a very specific Poly Pressure CC with a specific value and sends that back Lemur. That way Lemur gets a very specific identifier and knows what Track is currently selected

So CC126 from Cubase to Lemur -> CC127 from Lemur to Cubase -> a specific Poly Pressure value back to Lemur

I don't know if something like this is possible in OSC?

(This video probably explains it better than me: )


----------



## Manaberry

There is a way to run script in O-S-C when a specific value is received. So yes, we should be able to do that


----------



## Manaberry

I'm using Remote Control Editor now. There is 512 slots so large enough for what I'm looking for. I don't use it on VEP yet. No needs to send something to Cubase etc... It does check the value every time I select a track.

EDIT: Actually, it's 127 the limit because of midi. But there is 8 slots in the Quick Controls. Just have to create more "check". It should be something like 8x127 possibilities.


----------



## lucor

Nice!! 8x127 should be plenty enough.  It would great if you could someday share your project file so I can just reverse engineer / steal how to do this, because right now I literally haven't got a single clue. Creating buttons and make them send midi and control visibility is all I achieved so far.


----------



## Manaberry

lucor said:


> It would great if you could someday share your project file so I can just reverse engineer / steal how to do this, because right now I literally haven't got a single clue.



Here you go: Cubase Generic Remote *.xml and Open Stage Control template to load.
Beware: I'm using the same network as my previous template for Ableton. So every button as the target "midi:ableton" because of the rtpMidi slave name.


----------



## lucor

Fantastic, I'll give this a try as soon as I'm back home at the studio in a few days. Thank you!


----------



## Grizzlymv

lucor said:


> Ok, nice that worked! Now I'm back to the same problem though. Firstly I'm not sure I did the right thing regarding my IP address for the "send" section: I typed in 'ipconfig' into the command prompt, copied my IPv4 adress from there into the "Send" section of OSC and added :8000 at the end. Is that correct?
> Now with the '--midi list' command in "Midi" I get this message after pressing start:
> 
> 
> Code:
> 
> 
> A JavaScript error occurred in the main process: Uncaught Exception: Error: spawn python ENOENT
> at exports._errnoException (util.js:1024:11)
> at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
> at onErrorNT (internal/child_process.js:374:16)
> at _combinedTickCallback (internal/process/next_tick.js:138:11)
> at process._tickCallback (internal/process/next_tick.js:180:9)


I too get the same error when I try to start Open Stage Control with the --midi list command. connection with rtpMIDI is working fine, installation of Python worked as well. I even did a full re-install as Lucor did, but no luck here. I used the Python 3.6.5 (Windows x86-64 executable installer) from the web site. I also had to copy/rename the python36.lib to python34.lib as stated in your doc as it was giving me an error. Once renamed, all good. But when I get in Open Stage, it end up with the error above. Any idea of what could be wrong? I'm running it on the latest version of Windows 10 Pro.


----------



## lucor

Grizzlymv said:


> I too get the same error when I try to start Open Stage Control with the --midi list command. connection with rtpMIDI is working fine, installation of Python worked as well. I even did a full re-install as Lucor did, but no luck here. I used the Python 3.6.5 (Windows x86-64 executable installer) from the web site. I also had to copy/rename the python36.lib to python34.lib as stated in your doc as it was giving me an error. Once renamed, all good. But when I get in Open Stage, it end up with the error above. Any idea of what could be wrong? I'm running it on the latest version of Windows 10 Pro.


Did you do the whole thing like me, with uninstalling python, deleting all the python folders and cleaning your registry with CCleaner?


----------



## Manaberry

I would also recommend cleaning everything and start over the installation.


----------



## lucor

Ok, I'm back and spend a good chunk of time trying to figure this out, but I'm struggling to grasp how it all works.
First of all regarding the overall concept, did I get this right: in Cubase I set up each track with a specific CC126 value in a specific quick controls slot (let's say 1st QC slot, CC126 with a value of 12). Cubase then communicates that value of 12 to OSC and if a push button has _#{@{Received} == 12 ? "display:flex;" : "display:none;"}_ in the CSS box, it will show up?
Because if so the concept would already not work for me, since after disabling the track (I'm running a disabled template) and re-enabling it it will lose the set value. Or am I completely wrong?


----------



## Grizzlymv

lucor said:


> Did you do the whole thing like me, with uninstalling python, deleting all the python folders and cleaning your registry with CCleaner?


I did uninstall from add/remove programs .Then I went in user/xxx/appears/local/programs and deleted python folder and then I search in the registry to remove python entries. Didn't try with cccleaner but I'll give it a shot.


----------



## Grizzlymv

Alright so I did the full cleanup and re-install, but same result. :(


----------



## Manaberry

lucor said:


> Ok, I'm back and spend a good chunk of time trying to figure this out, but I'm struggling to grasp how it all works.
> First of all regarding the overall concept, did I get this right: in Cubase I set up each track with a specific CC126 value in a specific quick controls slot (let's say 1st QC slot, CC126 with a value of 12). Cubase then communicates that value of 12 to OSC and if a push button has _#{@{Received} == 12 ? "display:flex;" : "display:none;"}_ in the CSS box, it will show up?
> Because if so the concept would already not work for me, since after disabling the track (I'm running a disabled template) and re-enabling it it will lose the set value. Or am I completely wrong?



I haven't try with disabled track yet. I will test this. 
For the overall yes, you get it right. The widget "*Received*" get the number, and the CSS read the widget's value. If the value hit the equal (==) number, then display.

I'm sure there is another solution to avoid reset value from enabling/disabling track, but I'm still learning Cubase. I have to try by myself on my free time to find a way to do.

@Grizzlymv I can't figure it out for now sorry, but feel free to report the error on the Github project issues page. Jean-Emmanuel knows way more than me about python and stuff. He's the guy behind the software. He does respond quickly and very friendly.


----------



## Grizzlymv

well...so I did reinstall Python, checked to add modify the PATH and to pre-compile binaries. Then I re-did the following steps (and also updated PIP to the latest) and it worked.  so not a so straight forward install, it is more for techsavvy people but at least it works now. Thx for the help.  Now let's see what I can do with it compared to my TouchOSC setup.  Excited!!


----------



## Manaberry

@Grizzlymv Splendid! Thanks for reporting that pip needed to be updated to fixed the whole thing. I updated the original post to clarify this 
Have fun using the software!


----------



## DenisT

Wow, looks really cool! Just installed TouchOSC on my iPad and then I find this haha. Seems much more flexible. Love the UI as well!

Stupid question : how do you send OSC to Cubase once you have a template? I just learned how to link TouchOSC to Cubase using the Generic Remote, but is this similar?

Is there an "easy way" to display a mixer with all your tracks automatically, like you show us in your first video with the names and colors? Or do we have to create each individual track in Open Stage Control and link it manually to Cubase? Cause I have a template of approximately 3000 tracks


----------



## Manaberry

DenisT said:


> Wow, looks really cool! Just installed TouchOSC on my iPad and then I find this haha. Seems much more flexible. Love the UI as well!
> 
> Stupid question : how do you send OSC to Cubase once you have a template? I just learned how to link TouchOSC to Cubase using the Generic Remote, but is this similar?
> 
> Is there an "easy way" to display a mixer with all your tracks automatically, like you show us in your first video with the names and colors? Or do we have to create each individual track in Open Stage Control and link it manually to Cubase? Cause I have a template of approximately 3000 tracks



There is no stupid questions 

I'm using a Generic Remote profile yes. I do use midi with O-S-C.
And no, there is no easy way to display a mixer for now. Maybe there is, but I don't know how :D
I know O-S-C can replicate faders in a specific windows based a an input number, but a Generic Remote from Cubase doesn't behave the same..


----------



## DenisT

Alright then, so that's probably a bad idea for me so I'll keep the "ugly" mixer of cubase on my touch screen


----------



## Luke Davoll

Great stuff. Just for education purposes, would you please explain why we need to install Visual Studio Build tools? I get why we need python and rtmidi...but I'm just not seeing the connection to Visual Studio. Cheers


----------



## Manaberry

Luke Davoll said:


> Great stuff. Just for education purposes, would you please explain why we need to install Visual Studio Build tools? I get why we need python and rtmidi...but I'm just not seeing the connection to Visual Studio. Cheers



We need the tools from Microsoft to properly install and run O-S-C (if not, you can't even install rtmidi in the command prompt). 

It's not Visual Studio itself, it's to connect the software to Microsoft's environment. I hope i'm right on that point but I'm sure Jean-Emmanuel know the answer better than me.


----------



## Grizzlymv

@Manaberry quick question for you. I started to play with the template last night and was trying to set a few keys to manage my expression maps and those are triggered from C-2 to B-1, which are below the C0 mark. 

I started from your template to get a better understanding of the key mapping (thanks a lot for sharing btw) and I'm able to have the keys working fine (Play, Stop, record, etc) so the connection works and the Generic Remote mapping works too (used mine though, as I had a template in TouchOSC and wanted to recreate/expand it with Open Stage Control. 

I first tried with the Keyboard plugin, hoping it would send the midi note as the output, but given my notes are below C0, doesn't seems to work. If i set the Keyboard plugin to start below 0, it doesn't behave well. I was then considering doing it through buttons, but then again, the midi note needs to be specified and according to our friend Google, if C3 is note 48, technically C-2 is -12 which doesn't seem to work. I also tried with 0 and 12, no luck. Have you tried such with your full template? Or do you have an idea on how I could address this? Thinking of it, I should validate with a note covered by the instrument in kontakt (such as C4) to see if I hear a sound. 

This is the info I got on the help site.
A push button might be configured as follows in order to send a MIDI note whose velocity is defined by the button's on/off value:


address: /note
preArgs: [1, 60] (for MIDI channel 1, and note 60 / C3)
on: 100 (for noteOn velocity of 100 on button push)
off: 0 (to send a noteOff on button release)
target: ["midi:device_name"] (where device_name is one of the declared midi devices defined during setup)
And the reference web site I found: http://www.inspiredacoustics.com/en/MIDI_note_numbers_and_center_frequencies

Thanks. Otherwise I really like it MUCH more than TouchOSC. It's a lot more work to set up though. But much more flexible!! Thanks again for this great discovery!


----------



## Grizzlymv

nevermind. I can't manage to have it work with the keyboard, but it does work with push buttons instead. Gonna do it that way, which might be a better choice given not all lib have the same arts. Still trying to get my way around how it could get feedback based on the expression map though. So when I'm on track X, it knows which arts are available, if any, and list them accordingly.


----------



## Manaberry

Hi @Grizzlymv !
On my side I use Pprogram Change on Cubase instead of Keyswitches to manage my expression maps. 

I just use push button with a specific Program Change number. A lot of articulations on my touchscreen use the same Program Change number, but I only show them based on the selected track. Technically, we can set 127 Program Change push buttons per track using that method (and manage them in the Expression Map Setup to convert into CC32 or Note)

Happy you are enjoying this software!


----------



## Grizzlymv

Manaberry said:


> Hi @Grizzlymv !
> On my side I use Pprogram Change on Cubase instead of Keyswitches to manage my expression maps.
> 
> I just use push button with a specific Program Change number. A lot of articulations on my touchscreen use the same Program Change number, but I only show them based on the selected track. Technically, we can set 127 Program Change push buttons per track using that method (and manage them in the Expression Map Setup to convert into CC32 or Note)
> 
> Happy you are enjoying this software!


Well, I forgot about the keyboard plugin, and just relying on button instead. Seems to work great so far. Adapting / improving my TouchOSC template for Open Stage Control which is quite an improvement over TouchOSC. With a more easier installation process, I'm sure that jewel would get broader usage.  

I'll post the end result here once it's done.


----------



## Luke Davoll

@Manaberry
2 thoughts/questions. Is it possible to compile rtpmidi and have it as a download that users can drop into the right folder, thereby bypassing the headaches of the install process? Just thinking this may help with wider adoption.

Secondly, would you please detail the process for having just your articulations appear on a second dedicated screen. How does one use two screens with open stage control? 

Thanks for your time!


----------



## Manaberry

@Luke Davoll Hi Luke! Good question for the compilation. I'll ask Jean-Emmanuel about that, he knows his stuff, I don't. But it would be very nice to have a "one click ready to use" exe indeed.

Imagine O-S-C as a workspace. You run a server that send data to an IP address. If you load two different template on two devices, all the data will be manage by one server. You just have to make a template with only articulations for your tablet, and another template with the control buttons on your main touchscreen. You can even do a third template with a Play/Stop button for your smartphone if you want. Just make sure to have the template file accessible online to load them easily (I upload them on my Cloud).

Last November, I created a quick template for a friend so he was able to change the instrument by himself when playing midi keyboard (3 tracks to arm). As the same time I was using another template to manage the record session.

I have to take the time to update properly the tutorial and explain more of my process yes. Maybe for spring, I still have work until then.


----------



## Manaberry

Grizzlymv said:


> I'll post the end result here once it's done.



Looking forward to see your template and how you used O-S-C!


----------



## Grizzlymv

Manaberry said:


> Looking forward to see your template and how you used O-S-C!


Quick question for you. Have you ever manage to have a Fader display the Meter value? ie, the selected track, or let say I want to have my main out (master) displayed. I can control it easily, but can't manage to have the current output value to display in the meter bar. There isn't much doc so I'm wondering if I'm missinf something..


----------



## Luke Davoll

Manaberry said:


> I'm using Remote Control Editor now. There is 512 slots so large enough for what I'm looking for. I don't use it on VEP yet. No needs to send something to Cubase etc... It does check the value every time I select a track.
> 
> EDIT: Actually, it's 127 the limit because of midi. But there is 8 slots in the Quick Controls. Just have to create more "check". It should be something like 8x127 possibilities.



Thanks so much for your previous reply. Would you please add some more details how you get cubase to send a message to osc when a certain track is selected? Is it quick controls? What kind of parameter is needed? Do I need a transformer on my midi track? Or what do I do with the remote control editor!? A little confusing! But I thank you for taking the time to help us all out. This looks like metagrid on steroids!


----------



## Luke Davoll

Ok, so I realised I have to make cc 126 in the quick controls and can then choose a value for the cc which will allow an articulation page to be shown in open stage control. (e.g. 20)

2 problems:

1)Does this limit us to only 127 pages of articulations? Is there a way to get more? 

2) for some strange reason, as I click on the midi track after selecting a different one, the selected cc 126 value (e.g. 20) keeps being reduced by increments of 1. Very strange... 

Thanks for your help. I won't give up on this!


----------



## Manaberry

Grizzlymv said:


> Quick question for you. Have you ever manage to have a Fader display the Meter value? ie, the selected track, or let say I want to have my main out (master) displayed. I can control it easily, but can't manage to have the current output value to display in the meter bar. There isn't much doc so I'm wondering if I'm missinf something..



I haven't look yet into meter value yet, I can't be helpful for this sorry : <

@Luke Davoll Here is how I achieve the "id by track". Should be easier for you to understand the process (a bit tricky at first sight I have to admit).

_(Values on the screens are wrong, don't pay attention to them)_







Params value goes from 00 to 1.00. It's 101 units instead of 127. Sometimes O-S-C round the number up or down if the value is decimal. To make it right, be sure to set max value to 101 in Cubase (second window in the screen).


----------



## Grizzlymv

Alright. So I finally managed to complete it. I replicated (albeit bonified it a bit) my old TouchOSC into Open Stage Control, and I must say it is MUCH of an improvement. I wished Cubase would be more friendly with OSC protocol though. Some things are 2 way conversation, but sadly some are one way so no way of getting feedback from the DAW. :(

Also, I had to poke the creator of the product to get some hints on how to use some of the widgets. For intance, if you want to use the XY pad (quite useful for CSS to control instensity + vibrato, or for Embertone intimate strings to control Vibrato speed and amount), it work a bit differently than the others. In my case, I used faders for CC1, CC11, CC14 and CC2 (as well as the pitch). Then I added a PadXY which replicate CC1 (X) and CC2 (Y). To achieve this, it is quite simple, but not that obvious. 

So, to get the CC faders be updated by the PadXY value, you'll have to reference it in each. So, the value field for fader_cc1 would get #{@{padxy}[0]} for the first value, which is X axis. Then for fader_cc2, I'd have #{@{padxy}[1]}. That's it. Then, to get the other way around (have the pad being updated by moving the faders), you'll have to reference them in the pad value by doing so: [@{fader_cc1},@{fader_cc2}] that's it. Then I use the preArgs only on the faders so they each update their appropriate CC value. 

Now, I need to figure out how to get feedback from Cubase to know which expresion maps are available on the selected track. For now, I show all articulation predefined, but would be great to only show supported (ie, the Bass on CSS doesn't have harmonic, but the rest does. so would be great to hide it when I'm on the Bass track). 

If anybody have any idea how to achieve that, would be great. 

And what do you guys think about asking for a double-tap default action for the knob and faders (maybe other controls would benefits too?). For instance, if you play with a knob, that is assigned to a Pan value, you'd want the middle to be the Center, so double-tapping it would send the specific value rather than fiddling arount. As of now, I created a button beside it to do that specifically. I would think the same with a fader, especially one used for volume where it could go to 100 (0), or any CC could get to your defined value on double tap (some kind of initialization). Or maybe it aready work, but if so I haven't found it. 

Here's what it looks like (still need some polish tough).


----------



## Manaberry

Nice template @Grizzlymv ! Looks full or shortcuts and features. Very well done. I have to add more buttons on mine.
For the articulations thing, have you tried what I have done? (see previous messages)
Of course this is a bit of configuration to set every articulation for every track with the specific ID but it does the job on my side.


----------



## Grizzlymv

Manaberry said:


> Nice template @Grizzlymv ! Looks full or shortcuts and features. Very well done. I have to add more buttons on mine.
> For the articulations thing, have you tried what I have done? (see previous messages)
> Of course this is a bit of configuration to set every articulation for every track with the specific ID but it does the job on my side.


Yes I did try it out. But since my expressions maps were already all set up, it represented quite a lot of work to adapt it, if I got it right. I was hoping for a simpler way, but as Cubase is already limited in it's support for Oscar, I wasn't setting my expectations too high. I guess I can manage around it since most libraries are using similar set of articulation. Or, alternatively, I could duplicate what I did for cinematic studio series so far, and replicate it in different tabs so I can adjust specifically per library . But that would involve more tap on usage. I'll see how it goes .


----------



## Grizzlymv

So here's what I did for cinematic studio series. In brown, what's common with all. In Red, what's for brass only, and in blue, what's for strings only. So the downside is that only in some specific cases (ie, basses doesn't have harmonics) so it would still show up, but I can live with that.

In any case, thanks a ton for your assistance and for providing your template. Helped quite a bit to figure out how it works.


----------



## zig

Hello I try to make it work on mac and I am not sure I understood the installation process.

Is there a specific setting to make in the midi & audio setup panel? for the moment I create a bus "VIcontrol" in IAC. Any other setup to make in the network panel from midi setup?
I think the problem comes probably from a bad python installation on my part.
I get this message error 

A mac user could help me solve that.
Thanks
Z


----------



## Manaberry

zig said:


> Hello I try to make it work on mac and I am not sure I understood the installation process.
> 
> Is there a specific setting to make in the midi & audio setup panel? for the moment I create a bus "VIcontrol" in IAC. Any other setup to make in the network panel from midi setup?
> I think the problem comes probably from a bad python installation on my part.
> I get this message error
> 
> A mac user could help me solve that.
> Thanks
> Z



Hi. 

Indeed, Python is making an error here. Make sure to uninstall and clean every python related folders and registey. I don't know anything about Mac environment so I can't redirect you to some specific manipulations to do. Feel free to contact the dev of O-S-C on the Github project by adding an issue post.



Grizzlymv said:


> So here's what I did for cinematic studio series. In brown, what's common with all. In Red, what's for brass only, and in blue, what's for strings only. So the downside is that only in some specific cases (ie, basses doesn't have harmonics) so it would still show up, but I can live with that.
> 
> In any case, thanks a ton for your assistance and for providing your template. Helped quite a bit to figure out how it works.



Very smart way to filter articulations! Might steal the idea at some point 
Always here to help people if I can


----------



## Harald Salaun

Hi Manaberry!

Thanks a lot for your very useful post! As i'm working on an o-s-c session for communicating with ableton live and starting to dig deeper, i'm wondering if there are some tutorials for getting more insight on how to use o-s-c? 

E.g. how can I dynamically create faders by receiving an osc message? I already managed to send sysex message from my ableton remote script and convert it to osc messages via a custom-module to send track names to o-s-c widgets but now i'm stuck ... I read about /EDIT/GET but I have no clue where and how to implement this.

Do you have by chance any idea where i could find more in depth tutorials? The documentation on Jean-Emmanuels website ist great but maybe i'm not skilled enough yet to get everything right. 

Also if you have any tips for detailed infos, tutorials or documentation on midi remote script i would be very grateful!

Thanks!!!


----------



## Manaberry

Hi @Harald Salaun !

Unfortunately, there is no tutorial to get this easy. The docs from Jean-Emmanuel is very useful but yeah you have to get used to that kind of software/code/logical math to be friendly with O-S-C.

I've been using remotify.io to generate Ableton Remote script. Now they just published a brand new software to create a whole script based on an easy-to-use controller creator.

It's kinda pricey, but I'm sure it's very useful if you are looking for some serious template with O-S-C and Ableton.

(You can still use the limited version web based app for free)


----------



## Harald Salaun

Hi @Manaberry !

I won't give up so fast and keep giving o-s-c a try. (remotify is indeed kinda pricey)  Maybe there is still hope for some video tutorials by Jean-Emmanuel or some other expert in the near future.

Thanks a lot for your quick reply!! )


----------



## Luke Davoll

Hi @Manaberry

Would you please add some detail to the articulation set up. Your instructions were crystal clear and it is working, but I'm just not understanding. I've tried reading through the documentation, but it is not geared toward noobs.

The line @{Received ==3} I understand. If osc receives quick control parameter 125 with a value of 3, set the display etc. But is this all being set up in the generic remote in cubase? If I wanted to use a second slot to get more pages of articulations, is this set up in the generic remote too? How is the "check selected" part in the generic remote communicating with open stage control?

Is there a script running in open stage control? Or is it all rather simple osc messages and I'm missing something? 

I'm a bit confused and would value some insight. Thanks so much.


----------



## Mihkel Zilmer

Thanks for the tutorial @Manaberry!

I just spent a bit of time looking at O-S-C and it's pretty impressive. I have some questions though, perhaps you'll be able to help? I'll also reach out to the developer to get his opinion.

Regarding responsive articulation set up - my Lemur setup relies on hundreds of strings of data, each describing which articulation names are available per instrument. 

Is there an option in O-S-C to either:
- Do something similar and store strings of data and assign them to button labels dynamically?
- or alternatively, is there a way to dynamically change top / left positions depending on how many other elements are displayed? This way one could have each button label set to a specific articulation name and respond to multiple different input signals, but unless layout is somehow managed dynamically this would be a nightmare to set up. 

If neither is possible then it brings me to a final question - is there an upper limit to how many widgets you can have? I'm looking at thousands of articulations, if each needs a separate button could this be too much for O-S-C?


----------



## Mihkel Zilmer

Luke Davoll said:


> The line @{Received ==3} I understand. If osc receives quick control parameter 125 with a value of 3, set the display etc. But is this all being set up in the generic remote in cubase? If I wanted to use a second slot to get more pages of articulations, is this set up in the generic remote too? How is the "check selected" part in the generic remote communicating with open stage control?



Each Quick Control slot would need a new line (and new CC number) in the generic remote. "Check selected" responds when QC slot 1 has a value, when you start using a QC slot 2, you'll want a unique CC number for it and new lines in the generic remote referring to QC slot 2. 

I'm new to O-S-C so not sure if there is a more elegant way to handle it on the other end, but it looks like you would also need a new widget per quick control, set to receive the value of that CC. For that you can use PreArgs [channelNumber,CCnumber]

In script @{Received ==3} - "Received" refers to the widget name and its value. Make a new widget, call it Received2 or whatever and use its name in the script.

There might be a more streamlined solution, though..


----------



## Luke Davoll

Mihkel Zilmer said:


> Each Quick Control slot would need a new line (and new CC number) in the generic remote. "Check selected" responds when QC slot 1 has a value, when you start using a QC slot 2, you'll want a unique CC number for it and new lines in the generic remote referring to QC slot 2.
> 
> I'm new to O-S-C so not sure if there is a more elegant way to handle it on the other end, but it looks like you would also need a new widget per quick control, set to receive the value of that CC. For that you can use PreArgs [channelNumber,CCnumber]
> 
> In script @{Received ==3} - "Received" refers to the widget name and its value. Make a new widget, call it Received2 or whatever and use its name in the script.
> 
> There might be a more streamlined solution, though..



Amazing. Will look at trying it out later on. Thanks so much for your insight. It's starting to make sense. I'd be interested to see a screenshot of your osc layout...


----------



## Manaberry

@Mihkel Zilmer I'm pretty sure there is a way to do what you want (like the top/left position stuff) but not sure how yet. 
I guess there is no limit of widgets, but like everything: the more you have, more power is needed to make it run/load.

To be honest, the CSS Display method rightnow is okay (33 sets on my side), but now perfect indeed.
I really love O-S-C and what it brings to my workflow. I'm sure we can create here, on this thread, a conceptual widget to achieve articulations work and then submit to Jean-Emmanuel to see if he can do something with it. I'm sure he would like to help us if we bring something relevant 

What would be the best articulations widget for you? (I guess a simple "table/node" system with few inputs like ID, name, cc value, category should do the job).

@Grizzlymv any input for a conceptual articulations widget?

Thanks guys for your interest into my tutorial and this software. Happy to see I did right sharing this to you!


----------



## Mihkel Zilmer

The ideal articulation widget.. hmm...

- An array of buttons, dynamically displayed based on MIDI received from DAW. 
Personally I use up to 60 buttons per instrument. 
- Labels for these buttons are also dynamically displayed, and contain articulation names, which are different for each instrument. 
- A clever method of storing the names. Something that's fast to create and edit (not 60 individual text fields, maybe a string with separators instead?)
- Subcategories? To divide the articulation button array into short / long for example? Subcategory labels should respond dynamically. 
- Individual colour options per button, also dynamically changed. 
- MIDI output on button pressed. Note On, Program Change and CC to cover all cases. 

That's about it


----------



## Grizzlymv

Mihkel Zilmer said:


> The ideal articulation widget.. hmm...
> 
> - An array of buttons, dynamically displayed based on MIDI received from DAW.
> Personally I use up to 60 buttons per instrument.
> - Labels for these buttons are also dynamically displayed, and contain articulation names, which are different for each instrument.
> - A clever method of storing the names. Something that's fast to create and edit (not 60 individual text fields, maybe a string with separators instead?)
> - Subcategories? To divide the articulation button array into short / long for example? Subcategory labels should respond dynamically.
> - Individual colour options per button, also dynamically changed.
> - MIDI output on button pressed. Note On, Program Change and CC to cover all cases.
> 
> That's about it


All great ideas there. Love that list!. However while this would be the dream setup, I wonder how much of this is achievable. Not just from O-S-C perspective, but from the DAW itself. For instance, I'm using Cubase and I already hit the wall on a few things with OSC. For instance, I can mute or solo a track and Cubase Will send back the signal to O-S-C perfectly, but then if I want to arm a track or monitor it, then it just received the signal. Never send it back to O-S-C, because cubase doesn't support it. So I'm sure O-S-C could do a lot of things, but in the end we have to play with the DAW's limitations... 

So, are we looking with what would be the ideal process, or what is technically possible? . Also I'm guessing each DAW support osc up to a different level, which won't make things easier .


----------



## vewilya

Would love to try and set this up for Logic on OSX! Any hints or links on how to do that?


----------



## Manaberry

Mihkel Zilmer said:


> The ideal articulation widget.. hmm...
> 
> - An array of buttons, dynamically displayed based on MIDI received from DAW.
> Personally I use up to 60 buttons per instrument.
> - Labels for these buttons are also dynamically displayed, and contain articulation names, which are different for each instrument.
> - A clever method of storing the names. Something that's fast to create and edit (not 60 individual text fields, maybe a string with separators instead?)
> - Subcategories? To divide the articulation button array into short / long for example? Subcategory labels should respond dynamically.
> - Individual colour options per button, also dynamically changed.
> - MIDI output on button pressed. Note On, Program Change and CC to cover all cases.
> 
> That's about it



Thanks for your input! I'm gonna try to create a visual concept later this month.

@Grizzlymv Sadly yes, we do have limits because of the DAW :<

@vewilya Hey! I have no idea how Logic works. If there is anything like the "Generic remote" editor of Cubase, you should be able to use OSC easily as soon as your Mac and your daw receive the midi signal from the network.


----------



## vewilya

Manaberry said:


> Thanks for your input! I'm gonna try to create a visual concept later this month.
> 
> @Grizzlymv Sadly yes, we do have limits because of the DAW :<
> 
> @vewilya Hey! I have no idea how Logic works. If there is anything like the "Generic remote" editor of Cubase, you should be able to use OSC easily as soon as your Mac and your daw receive the midi signal from the network.


Alright. Thx. I’ll do some research...


----------



## Luke Davoll

Hey everyone,

I have an idea for a widget. I've looked around in the documentation, but if it's there, I couldn't find it. Perhaps @Manaberry you could have a word with the creator if you guys think it'd be a good idea. My idea is this (hope this comes across in text ok)

We probably don't need to display every quantise/grid division on our touch screens. Or every marker. Or countless other things. I've seen the dropdown widget, and the modal window, but there's too much tapping/clicking. However, imagine a button that when held down brings up a grid of hidden buttons to the left and/or right or above or below with these grid values for example...but ONLY while the button is held down. Then you drag your finger over to the value, release and then the message is sent. Could be a great way of saving screen real estate. Think of it like an expanding button. I've seen something similar on lemur templates. What are your thoughts?


----------



## Manaberry

Luke Davoll said:


> Hey everyone,
> 
> I have an idea for a widget. I've looked around in the documentation, but if it's there, I couldn't find it. Perhaps @Manaberry you could have a word with the creator if you guys think it'd be a good idea. My idea is this (hope this comes across in text ok)
> 
> We probably don't need to display every quantise/grid division on our touch screens. Or every marker. Or countless other things. I've seen the dropdown widget, and the modal window, but there's too much tapping/clicking. However, imagine a button that when held down brings up a grid of hidden buttons to the left and/or right or above or below with these grid values for example...but ONLY while the button is held down. Then you drag your finger over to the value, release and then the message is sent. Could be a great way of saving screen real estate. Think of it like an expanding button. I've seen something similar on lemur templates. What are your thoughts?



You refer to a commo rose system. Very smart indeed, I love that idea. I created a feature ticket, maybe the dev will enjoy this idea too!


----------



## Grizzlymv

Luke Davoll said:


> Hey everyone,
> 
> I have an idea for a widget. I've looked around in the documentation, but if it's there, I couldn't find it. Perhaps @Manaberry you could have a word with the creator if you guys think it'd be a good idea. My idea is this (hope this comes across in text ok)
> 
> We probably don't need to display every quantise/grid division on our touch screens. Or every marker. Or countless other things. I've seen the dropdown widget, and the modal window, but there's too much tapping/clicking. However, imagine a button that when held down brings up a grid of hidden buttons to the left and/or right or above or below with these grid values for example...but ONLY while the button is held down. Then you drag your finger over to the value, release and then the message is sent. Could be a great way of saving screen real estate. Think of it like an expanding button. I've seen something similar on lemur templates. What are your thoughts?


Nice idea. Although, the modal window should be able to give you an almost equivalent today. That's what I did on my template. I mean, you can place it to appear just below,beside or above a button on screen. Personally, I trust more the behavior of 2 taps on 2 buttons rather than sliding over a few button and hoping none will be activated by accident.  

One cool thing I'd like to see though, is to have multiple actions with dropdown. So, each items in the dropdown would have it's own OSC section, so for instance, using the example above, instead of modal window, a simple drowpdown could be used and each entry would send its own info to the DAW.


----------



## Luke Davoll

Manaberry said:


> You refer to a commo rose system. Very smart indeed, I love that idea. I created a feature ticket, maybe the dev will enjoy this idea too!



Awesome, the developer is up for it. I read through your ticket, I'm not sure about the circular idea, but we'll see what he comes up with. My idea was more or less like this (2 minute mark) :



Hope I'm allowed to post that here. In no way am I suggesting ripping off Michael's intellectual property. Just wondering if that functionality is possible in osc.

Also, I read through the comments on github re: articulation switching. Would it be possible to draft together a custom script and see how that would work? I have really very little experience with scripting/coding but I love diving in and learning!

Peace.


----------



## Grizzlymv

Luke Davoll said:


> Awesome, the developer is up for it. I read through your ticket, I'm not sure about the circular idea, but we'll see what he comes up with. My idea was more or less like this (2 minute mark) :
> 
> 
> 
> Hope I'm allowed to post that here. In no way am I suggesting ripping off Michael's intellectual property. Just wondering if that functionality is possible in osc.
> 
> Also, I read through the comments on github re: articulation switching. Would it be possible to draft together a custom script and see how that would work? I have really very little experience with scripting/coding but I love diving in and learning!
> 
> Peace.



seeing it in action make a lot more sense. I do like it. My concerns are still there though, as to ensure the touch screen won't lose the touch while sliding and therefore select the wrong thing. But otherwise, quick as shown the in the video, it's indeed more functional than the drop-down or modal. Hopefully though, each item could have it's own set of OSC value. But I second that idea!


----------



## Grizzlymv

Hey guys, wierd one. Anybody experienced similar behavior? I have my template setup in O.S.C. Which talks to a Generic Remote in Cubase, all on the same machine using loopMidi as per the tutorial on the 1st page. Now, if the Midi Input and Midi Output are set to my device set in LoopMIDI, I get a bunch of random midi data send to Cubase every move I do. Ie, If I switch track, the volume will change, the panning will change, etc. Funny fact, if I keep only the midi Input in the Generic Control and set Midi Output to None, works fine. Then if I do the inverse, in Generic Remote, keep only the MIDI output to my LoopMIDI device, and set the MIDI Input to none, it also works fine. 

I'm trying to isolate which command is causing the issue, but it's not easy given the amount I've configured. Setting up a default Generic Remote set to both my LoopMIDI device in Input and Output works fine too. So it's definitely something in my Generic Remote, but I was just wondering if anybody noticed similar behavior on their side before I start destroying my config too much!


----------



## Luke Davoll

Grizzlymv said:


> Hey guys, wierd one. Anybody experienced similar behavior? I have my template setup in O.S.C. Which talks to a Generic Remote in Cubase, all on the same machine using loopMidi as per the tutorial on the 1st page. Now, if the Midi Input and Midi Output are set to my device set in LoopMIDI, I get a bunch of random midi data send to Cubase every move I do. Ie, If I switch track, the volume will change, the panning will change, etc. Funny fact, if I keep only the midi Input in the Generic Control and set Midi Output to None, works fine. Then if I do the inverse, in Generic Remote, keep only the MIDI output to my LoopMIDI device, and set the MIDI Input to none, it also works fine.
> 
> I'm trying to isolate which command is causing the issue, but it's not easy given the amount I've configured. Setting up a default Generic Remote set to both my LoopMIDI device in Input and Output works fine too. So it's definitely something in my Generic Remote, but I was just wondering if anybody noticed similar behavior on their side before I start destroying my config too much!



Hey mate. When I first loaded Manaberry's template in to have a look and see what was going on, I got very odd behaviour (tracks not arming properly, a lot of strangeness). So you're not alone! But as I'm only interested in articulations at the moment, I just got rid of all the other stuff in the generic remote and filed it away for after when I finally sort these articulations out first. But something in there was messed up for sure.

On another note, are you a programmer by any chance? I need a bit of help. Maybe @Manaberry could take a quick look too if he has time. Anyway, I want to load in a custom script which makes creating articulations and showing buttons way easier. Take a look here:

https://github.com/jean-emmanuel/open-stage-control/issues/461#issuecomment-459716548

As cubase doesn't send track names over OSC, we have to do it using an input widget like has already been discussed. But I don't know how to modify the script. Any ideas?


----------



## Grizzlymv

Glad to see I'm not the only one with issue. I guess I'll start doing it from scratch and try to isolate which command is causing the issue. 

As for the script, what do you need help with? Have you tried with the script yet? I'll have to check with O.S.C. how we should load custom script as I haven't tried that yet.


----------



## Grizzlymv

ok, so, so far I've noticed that if you use a Fader (ie, the selected track volume) in O.S.C., whether it is set to VST Mixer or Mixer / Selected / Volume in the Generic Remote, there's no wierd behavior in Cubase if you only use Transmit flag, but the second you add a Receive flag as well, then the volume will randomly decrease every time you come back to the track. So set 2 instrument tracks, set a fader in O.S.C. then in Cubase Generic Remote, configure one to Receive and Transmit as the flags in the upper window, and Mixer / Selected / Volume (or VST Mixer) and switch back and forth between the 2 tracks and you'll see what I mean. 

So it's broken as soon as I say to Cubase to receive signal from O.S.C. Now I'm not sure if it's O.S.C. who is sending crap to Cubase, or if it's the VST Mixer / Selected / Volume which create noise when it's told to listen. I no longer have my TouchOSC device to compare. Can anyone confirm if it's a Cubase or O.S.C. issue? Haven't tested all other controls yet, but the Fader is definitely an issue with the track volume at the moment. I also tried from a new Fader, just to ensure nothing from @Manaberry template would interfere, but same result. And I can't set it to 0. If I try 0, it force it to 0.03, which is odd.


----------



## Grizzlymv

Alright, so everything works now, beside the Fader and Knob. So apparently, I can't find a way to have the fader (map to selected track volume) and the Knob (map to selected track panning) properly interact with Cubase. As soon as it is binded, then a bunch of random values start being added as soon as the track is selected. I'll have to reinstall TouchOSC and compare (if TouchOSC can accomodate such feature, I don't remember) to see if it's Cubase related, or O.S.C. related. Unless someone else can test it out? 

Easy to reproduce:
- Add a Fader to O.S.C.
- MAx Value to 127. Min to 0
- Address: /Control
- Preargs (whaveter you set in Generic Remote. ex: 
[
4,
2
]
- Address to your port. ex: midi:toPCStudio

Then in Cubase:
- create a Generic Remote
- set MIDI Input to your midi port (ex: toPCStudio)
- set MIDI Output to your midi port (ex: toPCStudio)
- Add a control and name it Volume
- Set the midi channel and address to what you specified in the preargs above (ex, 4 / 2)
- set Max value to 127 (should be by default)
- Set flags to Receive and Transmit (R,T)
- in the bottom pane, set the device to VST Mixer (or Mixer)
- set the channel to Selected
- set the Value/Action to Volume All

Then create 2 instruments tracks
And then alternate a few time between the 2 tracks, and you'll notice that the MIDI volume will start to randomly decrease instead of staying to 0 (or whatever default value you have on your track). 

At least, all the other functions works for now, so it's not a so big deal to have to manually set the panning and volume with the mouse in Cubase. But would be nice to have it working properly. Maybe I did something wrong somewhere...


----------



## Manaberry

Sorry I'm very busy for now. I will try to help you guys once I'm more available to. 
@Grizzlymv did you report this to Jean-Emmanuel? Maybe it's a software bug. It should not decrease like that. What's the *precision *value on your OSC fader widget? Try 0 instead of 1 or 2.


----------



## Grizzlymv

Manaberry said:


> Sorry I'm very busy for now. I will try to help you guys once I'm more available to.
> @Grizzlymv did you report this to Jean-Emmanuel? Maybe it's a software bug. It should not decrease like that. What's the *precision *value on your OSC fader widget? Try 0 instead of 1 or 2.


It is set to 0. It does the same even at 2. So it's not related to that. I'll submit the bug to Jean-Emmanuel.


----------



## Grizzlymv

actually I think I found the problem. In O.S.C. , you need to have /control as the address to have interraction with the DAW otherwise it doesn't work. But if you do, the second parameter of the preArgs seems to be sent to the DAW as a regular CC. 

So, to easily reproduce it. First of all, go in the Generic Remote and disconnect both In and Out to ensure there's no interference. Then create a toggle button in O.S.C. set the address to /control, preArgs to [8,1] (or 9,1, 6,1 etc, as long as the second is 1 for this example), and the target needs to match your midiport, so midi:tomyport. The On value should be set to 127. The Off to 60. 

Then add an instrument track in Cubase. Load Kontakt with a patch, make sure to show the keyboard in the Kontakt instance. 

Then tap on the button, you'll see the modwheel going to the top. Then tap again, it will go to the middle. Now if you change the second argument of the pre-args from 1 to 7 and do it again, you'll see that it's the volume that gets affected. 

I submitted it as a bug to Jean-Emmanuel, but I suspect this is the reason of our strange behavior. As soon as we use a common midi CC value as the second argument (1-modwheel, 2-breath, 7-volume, 10-pan, 11-expression, 64-sustain, etc) and we activate a button which have one of those set as the second parameter in the pre-args (7,1 or 9,7 or 3,11 etc) you'll end up with wierd problems. 

Hope this brings some clarifications. So the workaround for now would be to use non standard CC value for the second argument, so you won't interfere.


----------



## Grizzlymv

alright. so for those interested, I opened a case with Jean-Emmanuel. What I discover is that no matter what MIDI channel is specified, the DAW (in this case, Cubase) will receive the signal no matter what MIDI channel you specified on your track. For instance, if you set an instrument track to Kontakt, set it to MIDI channel 1. Then in your Generic Remote, you set a function to record when Controller is set to Channel 9, address 7, and in OSC you a button that have /control as the address, [9,7] as the preargs, as soon as you'll hit the button in OSC, Cubase will record the Midi CC7 value despite not being on the same channel (track at 1, button at 9). This seems like a bug to me. We'll see what Jean-Emmanuel answer.

In the meantime, I remapped my Generic Remote to use the unmapped Midi CC according to this http://nickfever.com/music/midi-cc-list, so the good news is that there's no more interference with the DAW. The bad news is that I get a lot of garbage CC info on my track which I have to clean after each recording. 

This did not happen with TouchOSC, so it's really an O.S.C. issue. Will report back when I have more to share.


----------



## Luke Davoll

Grizzlymv said:


> alright. so for those interested, I opened a case with Jean-Emmanuel. What I discover is that no matter what MIDI channel is specified, the DAW (in this case, Cubase) will receive the signal no matter what MIDI channel you specified on your track. For instance, if you set an instrument track to Kontakt, set it to MIDI channel 1. Then in your Generic Remote, you set a function to record when Controller is set to Channel 9, address 7, and in OSC you a button that have /control as the address, [9,7] as the preargs, as soon as you'll hit the button in OSC, Cubase will record the Midi CC7 value despite not being on the same channel (track at 1, button at 9). This seems like a bug to me. We'll see what Jean-Emmanuel answer.
> 
> In the meantime, I remapped my Generic Remote to use the unmapped Midi CC according to this http://nickfever.com/music/midi-cc-list, so the good news is that there's no more interference with the DAW. The bad news is that I get a lot of garbage CC info on my track which I have to clean after each recording.
> 
> This did not happen with TouchOSC, so it's really an O.S.C. issue. Will report back when I have more to share.


For some reason, I didn't get an alert for these new messages :(
Very interesting what you've discovered. I'll try to reproduce the issue and let you know that at least I can reproduce it too.


----------



## Grizzlymv

Well, I'd be interrested to hear about your findings. Further discussions with Jean-Emmanuel ended up with a conclusion that O.S.C. does what it is expected, but Cubase is apparently the one having issues dealing with multiple CC sent over different midi channels. Here's an example: https://www.steinberg.net/forums/viewtopic.php?t=78411

Not sure yet what will be the best approach. My instrument tracks uses midi channel 1, so I could only listen to channel 1 for those and exclude all others. But I also have a bunch of MIDI tracks that work with VEP, and those uses between channels 1 and 16, so obviously would conflict. I did try to switch into Program Changes, but it didn't work for me (wasn't able to get the action triggered in Cubase). Unless someone have a better idea?


----------



## Luke Davoll

Grizzlymv said:


> Well, I'd be interrested to hear about your findings. Further discussions with Jean-Emmanuel ended up with a conclusion that O.S.C. does what it is expected, but Cubase is apparently the one having issues dealing with multiple CC sent over different midi channels. Here's an example: https://www.steinberg.net/forums/viewtopic.php?t=78411
> 
> Not sure yet what will be the best approach. My instrument tracks uses midi channel 1, so I could only listen to channel 1 for those and exclude all others. But I also have a bunch of MIDI tracks that work with VEP, and those uses between channels 1 and 16, so obviously would conflict. I did try to switch into Program Changes, but it didn't work for me (wasn't able to get the action triggered in Cubase). Unless someone have a better idea?


I couldn't get program changes working either. Using a midi monitor insert, I was able to see that program change messages were sent from o-s-c, but I never got it actually changing articulations etc. It didn't work with expressions maps at all...


----------



## Grizzlymv

Luke Davoll said:


> I couldn't get program changes working either. Using a midi monitor insert, I was able to see that program change messages were sent from o-s-c, but I never got it actually changing articulations etc. It didn't work with expressions maps at all...


The only other thing I could think of, is to filter out every CC value above 102. Following my tests over the weekend, now I'm only using 102-127 from midi channel 1-16 which aren't supposed to be used by anything. Otherwise I'm not too sure.


----------



## Grizzlymv

Alright.... so. Here's what I did. everything is still to Control because I can't find a way to have Program Change work properly. Then I moved remapped the PreArgs values to use values between 102 and 127 as the second value (not used in CC standard). the first value is one of the 16 midi channel. 

So, this fixes the wierd behavior I was having in Cubase. BUT, it records junk in the midi track to their CC values (102 and above). In order to clean that, I managed to create a preset in the Logical Editor and it works beautifully. Now, the Logical Editor is a manual thing that you apply. Can't find a way to automate that. Then I found that a Transformer can be applied in the mIDI Insert of a track, using the same preset I made in the Logical Editor. That works. BUT, it needs to be done on each and every tracks. Given I have several hundreds in my template, that's not something I'd like to consider. 

So, I'm not sure what's next on this. I asked the question about the logical preset in a different thread. Hopefully someone will have an idea, but I'm about to give up on controlling Cubase with a touch control. At least until they better support OSC protocol. It's sad though. :(


----------



## Grizzlymv

Alright. So, with some help and a bunch of tests, I finally figured out how to make it work properly in Cubase. 

That's something others might want to know too. So, the trick is, you'd have to create 2 MIDI ports instead of one. One would receive all regular CCs (1, 2, 7, 10, 11, 64, etc) (let's say we name it ToPCStudioCC) and one would receive any other commands in the Generic Control (let's name it ToPCStudio). 

- In Cubase, in the Studio Setup screen, under the MIDI Port Setup, you'll have to untick the in 'ALL MIDI Inputs' for the second port that will handle all other commands (ToPCStudio). 
- You leave the tick on for the other port (ToPCStudioCC). 
- Then in O.S.C. any controls for regular CC would point to the CC port you created (target Midi:ToPCStudioCC), 
- and all other controls will points to the second port (target midi:ToPCStudio). 
- Then when we load O.S.C. the midi line just need to contain both ports infos and voila (--midi ToPCStudio:x,y toPCStudioCC:y,z). 

A bit tricky, but work as a charm. No more junk CC data in the recording, or wierd Cubase behavior. Let me know if you have any questions. 

Cheers


----------



## Luke Davoll

Grizzlymv said:


> Alright. So, with some help and a bunch of tests, I finally figured out how to make it work properly in Cubase.
> 
> That's something others might want to know too. So, the trick is, you'd have to create 2 MIDI ports instead of one. One would receive all regular CCs (1, 2, 7, 10, 11, 64, etc) (let's say we name it ToPCStudioCC) and one would receive any other commands in the Generic Control (let's name it ToPCStudio).
> 
> - In Cubase, in the Studio Setup screen, under the MIDI Port Setup, you'll have to untick the in 'ALL MIDI Inputs' for the second port that will handle all other commands (ToPCStudio).
> - You leave the tick on for the other port (ToPCStudioCC).
> - Then in O.S.C. any controls for regular CC would point to the CC port you created (target Midi:ToPCStudioCC),
> - and all other controls will points to the second port (target midi:ToPCStudio).
> - Then when we load O.S.C. the midi line just need to contain both ports infos and voila (--midi ToPCStudio:x,y toPCStudioCC:y,z).
> 
> A bit tricky, but work as a charm. No more junk CC data in the recording, or wierd Cubase behavior. Let me know if you have any questions.
> 
> Cheers


That's freakin awesome you figured it out. Congrats! 

Any chance of having a sneak peek at your template?


----------



## Grizzlymv

Sure. I was just thinking at revisiting a bit the screen layout as I find it less functional to have the expression maps loaded in a pop-up. But anyway, I'll post it as it is now, and post the update later on. 

But for now, if you want to run OSC on the same Windows machine who run Cubase, and interact from a tablet (in my case a Surface Pro), here's the instructions and files. This is assuming you already have the pre-requisites installed from @Manaberry document in the first post. I may revisit my pdf file to include those steps in the future. Instructions should be similar if you run it on Mac. 

Let me know if you have any questions.


----------



## Luke Davoll

Grizzlymv said:


> Sure. I was just thinking at revisiting a bit the screen layout as I find it less functional to have the expression maps loaded in a pop-up. But anyway, I'll post it as it is now, and post the update later on.
> 
> But for now, if you want to run OSC on the same Windows machine who run Cubase, and interact from a tablet (in my case a Surface Pro), here's the instructions and files. This is assuming you already have the pre-requisites installed from @Manaberry document in the first post. I may revisit my pdf file to include those steps in the future. Instructions should be similar if you run it on Mac.
> 
> Let me know if you have any questions.


Fantastic. I'll check this out later on. Cheers.


----------



## Luke Davoll

Hey guys, on another note, I'm playing with using o-s-c to send out program change messages to cubase and having them play nice with expression maps. Is it just me or does cubase make the first program change number 1, and o-s-c make the first program change 0? Try this:

Send program change number 5 out of o-s-c, and in the expression maps, create an articulation using remote program change 6! Try an few others and see if it's the same for you! 

Could someone verify that I'm not insane (not an easy task!)


----------



## Grizzlymv

Hi guys. So I've played a bit more with the template over the weekend and I changed a bit of things, both in Cubase and OSC. The workflow is better now (at least to me), and I fixed a few issue in how I built the Generic Remote which made my Cubase Freeze (I realize that you don't need to specify flags for the bottom pane. Here it is for those who are interested. 

@Luke Davoll I did try to reproduce your problem, but wasn't able to. Actually Cubase received the proper value as specified in OSC, but wasn't able to get the exp. map to change (never was in the past either, that's why I use CC instead).


----------



## Luke Davoll

Grizzlymv said:


> Hi guys. So I've played a bit more with the template over the weekend and I changed a bit of things, both in Cubase and OSC. The workflow is better now (at least to me), and I fixed a few issue in how I built the Generic Remote which made my Cubase Freeze (I realize that you don't need to specify flags for the bottom pane. Here it is for those who are interested.
> 
> @Luke Davoll I did try to reproduce your problem, but wasn't able to. Actually Cubase received the proper value as specified in OSC, but wasn't able to get the exp. map to change (never was in the past either, that's why I use CC instead).


Gotta say, that's is a great template. You've done well mate. Good stuff indeed.


----------



## Manaberry

Splendid work @Grizzlymv !


----------



## Manaberry

*Important update: *

The dev behind the soft (Jean-Emmanuel) sent me a message regarding an upcoming version of O-S-C. This next build will comes with some library modifications, making easier the installation process for Windows users.
That means it might not work on your actual setup if you update. To avoid any mistake, keep using O-S-C 43.0 until I've rewrite all the tutorial with the new installation steps.


----------



## Grizzlymv

Manaberry said:


> *Important update: *
> 
> The dev behind the soft (Jean-Emmanuel) sent me a message regarding an upcoming version of O-S-C. This next build will comes with some library modifications, making easier the installation process for Windows users.
> That means it might not work on your actual setup if you update. To avoid any mistake, keep using O-S-C 43.0 until I've rewrite all the tutorial with the new installation steps.


Thanks for the heads-up. Looking forward to it.


----------



## Manaberry

@Grizzlymv You'r welcome! Kinda excited to clean the whole tutorial and bring a fresh post.. less scary :D

@everyone
There is a community platform (forum) recently created by the developer : https://openstagecontrol.discourse.group/ 
If you need anything regarding the software (issue to report, installation help, etc...) feel free to use it


----------



## Grizzlymv

Manaberry said:


> @Grizzlymv You'r welcome! Kinda excited to clean the whole tutorial and bring a fresh post.. less scary :D


Yeah. Can't wait to see it. Let me know if you need an hand on doing it again. I'd be glad to help out.


----------



## Manaberry

Ok. It's very easy to install the new version! _I will update the main post this week._


Version 44.0 needs python-rtmidi to work.
First: we need to remove the previous *rtmidi*. To do so, we just have to run this command line in the Command Prompt (launch it as admin):​

pip uninstall rtmidi​





(I choose to go in my python folder by doing a "cd" command)

I installed O-S-C 44.0 to check what it needs.





Python-midi as expected. Let go then:


pip install python-rtmidi



​
And voila (you can update pip also). Everything went smoothly and it remained simple. O-S-C 44.0 detect the *python-rtmidi* on the next launch and I can use it right away. I expected something more difficult (like the main tutorial haha) to be honest but Jean-Emmanuel removed one of the most boring installation phase of this software needs. Thanks to him!

For the main tutorial update, I would like to feature some of your work. If you are interested, feel free to respond with a picture of your template or a photo in a "studio situation".


Enjoy!


----------



## lucor

So, has anyone figured out another good way for a dynamic keyswitch page yet, one that changes with your track selection? @Manaberry's way with QuickControls unfortunately doesn't work with a disabled template.


----------



## Mihkel Zilmer

lucor said:


> So, has anyone figured out another good way for a dynamic keyswitch page yet, one that changes with your track selection? @Manaberry's way with QuickControls unfortunately doesn't work with a disabled template.



Yes, I have one up and running using a custom module javascript (I am completely inexperienced with javascript so I am sure there are much more efficient ways to code it - but this works). You need to add this file to the custom-module line in OSC.

I am using MIDI tracks with MIDI sends just like I did with Lemur.. But you could set up a plugin for sending MIDI.

Will attach the js and project file here. The custom module file has articulation lists for strings, brass etc. included.

EDIT: forgot to add - I have a generic remote set for transit CC 127 on track selection (VST Mixer - Selected - Selected), OSC receives this, custom module ignores CC value 127 for articulation display - bounces back CC 126. Next I have transformers on MIDI tracks just like I did with Lemur - these transform the incoming CC 126 from OSC to CC 117-125, value 0-127 and send it back to OSC, which in turn hides/shows buttons and loads correct labels.

All buttons are set to send PC 1-55.


----------



## Mihkel Zilmer

PS My stuff is all pretty basic - but I saw someone asking for advice on official OSC forums - and from a quick read there I figured it would not be too hard to add custom colours and custom layout based on articulation type (longs, shorts etc), which would be pretty cool visually. Anyway - basic text in an ordinary grid works just fine for me for the moment, so I am not in a rush to try out those things, but maybe one day when I am bored 

Here's a screenshot of what I have right now (from the project files in the previous post):


----------



## lucor

Awesome, thank you!! 
Do I have to do something special with the Java script? Running it doesn't work, it just gives me an error message.
Edit: Nevermind I just saw that you already wrote to add it to the custom module line in OSC. I'll try to figure out how to do that.


----------



## Mihkel Zilmer

lucor said:


> Awesome, thank you!!
> Do I have to do something special with the Java script? Running it doesn't work, it just gives me an error message.
> Edit: Nevermind I just saw that you already wrote to add it to the custom module line in OSC. I'll try to figure out how to do that.



The first window that pops up when you open the OSC app - that has the MIDI port setup etc. - that also has a line for custom module - load the file there.


----------



## lucor

Just did!  Unfortunately, after setting everything up in Cubase, I get the following error message whenever I select a track. Any idea what might cause this?


----------



## Mihkel Zilmer

I am not 100% sure, but I have a hunch that the MIDI it receives might be outside of the range I use, which might case this error? Working fine over here... Try CC117, value 1 for starters.


----------



## lucor

Mihkel Zilmer said:


> I am not 100% sure, but I have a hunch that the MIDI it receives might be outside of the range I use, which might case this error? Working fine over here... Try CC117, value 1 for starters.



That's actually what I had when I tested it. 





Do I maybe have to change the name of the midi target somewhere in OSC? Since yours seems to be called "oscIn", while mine is called "OpenStageControl".


----------



## Mihkel Zilmer

Yes, that's worth a try.. sorry can't be very helpful here - still very new to OSC and javascript.. 

For reference - I use 2 ports, because I was getting MIDI feedback with just one.
oscIn is for CC and PC messages going OSC->Cubase
oscOut is for returning messages (CC127, CC117-125) from Cubase. This port is the one that the transformer and the generic remote are sending on.


----------



## Luke Davoll

Mihkel Zilmer said:


> Yes, that's worth a try.. sorry can't be very helpful here - still very new to OSC and javascript..
> 
> For reference - I use 2 ports, because I was getting MIDI feedback with just one.
> oscIn is for CC and PC messages going OSC->Cubase
> oscOut is for returning messages (CC127, CC117-125) from Cubase. This port is the one that the transformer and the generic remote are sending on.


Are you using expression maps? Did you find a discrepancy between o-s-c's program change values and cubase's? (I think cubase numbering starts at 1, and o-s-c at 0...not 100% sure though)


----------



## Mihkel Zilmer

Luke Davoll said:


> Are you using expression maps? Did you find a discrepancy between o-s-c's program change values and cubase's? (I think cubase numbering starts at 1, and o-s-c at 0...not 100% sure though)



Yes and yes. OSC PC 0 = Cubase PC 1.


----------



## Luke Davoll

Mihkel Zilmer said:


> Yes and yes. OSC PC 0 = Cubase PC 1.


OK. I thought as much. Cheers


----------



## lucor

Ok, I'm unfortunately still not able to make it work. I'm gonna list all the steps I took here, if someone can spot a mistake in there please let me know!

1) I created 2 ports in loopMidi with the exact same name as Mihkel, to make things easier. 




2) Created the following Generic Remote




3) Created an empty project with 2 midi tracks for testing purposes, with the following 'Midi Input Transformer' and 'Midi Send' settings (CC117 value 1 for Track 1, CC117 value 2 for Track 2)








4) In OSC i added the Java Script to the Custom Module and added the 2 midi ports to the "midi" entry.





With all that done, I only get the aforementioned error message in OSC, while in loopMidi I can see some sort of feedback happening which I can't quite figure out the root of.
If anyone has any idea, I'd be very grateful!


----------



## Luke Davoll

var buttonGrid = instrument[instrNumber].length

This is undefined. Cubase is not sending the track data correctly to the custom module. If you enable debug in osc, can you see if the cc127 is being sent from cubase on track selection? I think your generic remote is not quite right, but I don't don't time right now to dig deeper...


----------



## lucor

Luke Davoll said:


> var buttonGrid = instrument[instrNumber].length
> 
> This is undefined. Cubase is not sending the track data correctly to the custom module. If you enable debug in osc, can you see if the cc127 is being sent from cubase on track selection? I think your generic remote is not quite right, but I don't don't time right now to dig deeper...



When I disable the Midi Send on the Midi Track I get this:





With the Midi Send enabled the console goes completely nuts and it's kinda buggy to scroll through it. Looks like this though: 
https://www.dropbox.com/s/ma5dfi9ruf9e39f/26-04-_2019_16-28-31.mp4?dl=0


----------



## Mihkel Zilmer

lucor said:


> Ok, I'm unfortunately still not able to make it work. I'm gonna list all the steps I took here, if someone can spot a mistake in there please let me know!



You're getting MIDI feedback. Disable oscIn input and oscOut output (sorry for the backwards and confusing naming, I was thinking of Cubase signal flow...)

Mine looks like this: *--midi oscIn:-1,3 oscOut:3,-1 *
So oscIn can only send to Cubase and oscOut can only receive from cubase, value of -1 disables their inputs & outputs.

The only other differences with my setup are as follows:

Generic Remote: "Max Value" = 1
Device: VST Mixer (this should not make any difference)

Midi Input Transformer is not necessary, get rid of it.
Only use a Transformer in MIDI Send, set it to these settings (Function - Insert Inclusive)





At that point your setup should be identical to mine - and I just tested once more to make sure - I am not seeing any errors...


----------



## lucor

Great, seems to be almost there now, no more errors and feedback! Only problem left is that in the actual OSC project nothing changes when selecting a track

This is what I get in the debug console when selecting a track, that would correspond to a CSS patch. It seems to receive all the necessary info, but doesn't process it to change the names of the articulation buttons in OSC?



Code:


 OSC received: { address: '/control', args: [ 1, 127, 0 ] } From : midi:oscOut
MIDI received:
MIDI sent:
OSC received: { address: '/control', args: [ 1, 127, 1 ] } From : midi:oscOut
MIDI received:
MIDI sent:
OSC received: { address: '/b1/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b1/label', args: 'Sustain' } From : undefined:undefined
OSC received: { address: '/b2/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b2/label', args: 'Tremolo' } From : undefined:undefined
OSC received: { address: '/b3/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b3/label', args: 'Measured tremolo' } From : undefined:undefined
OSC received: { address: '/b4/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b4/label', args: 'Trills' } From : undefined:undefined
OSC received: { address: '/b5/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b5/label', args: 'Harmonic' } From : undefined:undefined
OSC received: { address: '/b6/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b6/label', args: 'Staccato Sfz' } From : undefined:undefined
OSC received: { address: '/b7/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b7/label', args: 'Staccato' } From : undefined:undefined
OSC received: { address: '/b8/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b8/label', args: 'Staccatissimo' } From : undefined:undefined
OSC received: { address: '/b9/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b9/label', args: 'Spiccato' } From : undefined:undefined
OSC received: { address: '/b10/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b10/label', args: 'Marcato' } From : undefined:undefined
OSC received: { address: '/b11/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b11/label', args: 'Marcato spicc' } From : undefined:undefined
OSC received: { address: '/b12/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b12/label', args: 'Col Legno' } From : undefined:undefined
OSC received: { address: '/b13/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b13/label', args: 'Bartok pizz' } From : undefined:undefined
OSC received: { address: '/b14/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b14/label', args: 'Pizzicato' } From : undefined:undefined
OSC received: { address: '/b15/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b15/label', args: 'Legato On' } From : undefined:undefined
OSC received: { address: '/b16/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b16/label', args: 'Legato Off' } From : undefined:undefined
OSC received: { address: '/b17/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b17/label', args: 'Con Sordino On' } From : undefined:undefined
OSC received: { address: '/b18/show', args: 1 } From : undefined:undefined
OSC received: { address: '/b18/label', args: 'Con Sordino Off' } From : undefined:undefined
OSC received: { address: '/b19/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b20/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b21/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b22/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b23/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b24/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b25/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b26/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b27/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b28/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b29/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b30/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b31/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b32/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b33/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b34/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b35/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b36/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b37/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b38/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b39/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b40/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b41/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b42/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b43/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b44/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b45/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b46/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b47/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b48/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b49/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b50/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b51/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b52/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b53/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b54/show', args: 0 } From : undefined:undefined
OSC received: { address: '/b55/show', args: 0 } From : undefined:undefined
OSC received: { address: '/control', args: [ 1, 117, 0 ] } From : midi:oscOut
MIDI received:


Thanks again for all of your help Mihkel, I owe you a beer (actually a lot of beer by now )!


----------



## Mihkel Zilmer

lucor said:


> Great, seems to be almost there now, no more errors and feedback! Only problem left is that in the actual OSC project nothing changes when selecting a track



Hmmm.. Yes - that is the exact incoming data that I see. 

Just curious - when you load my OSC project, is the left side completely blank or does it have a grid of 55 empty buttons? 

Also what version of OSC are you running? The project was created on 0.45.5 or 0.45.6.


----------



## lucor

Yes, that finally did it!! I was still on 0.41.7, now that I updated to 0.45.7 it works!  Thanks again!
Now all that's left is to make this whole thing work with Instrument Tracks instead of just Midi Tracks. I remember something about using plugins to do this from your Lemur Template thread, I'll give that a try tomorrow after a good night's sleep!


----------



## Mihkel Zilmer

lucor said:


> Yes, that finally did it!! I was still on 0.41.7, now that I updated to 0.45.7 it works!  Thanks again!
> Now all that's left is to make this whole thing work with Instrument Tracks instead of just Midi Tracks. I remember something about using plugins to do this from your Lemur Template thread, I'll give that a try tomorrow after a good night's sleep!



Great! Yeah, using a basic MIDI plugin like was suggested in the Lemur thread should work just fine on instrument tracks.


----------



## Luke Davoll

Mihkel Zilmer said:


> Great! Yeah, using a basic MIDI plugin like was suggested in the Lemur thread should work just fine on instrument tracks.


Would you please link to that thread. I'm also interested in instrument tracks...


----------



## lucor

Luke Davoll said:


> Would you please link to that thread. I'm also interested in instrument tracks...


https://vi-control.net/community/th...pression-maps-added.65157/page-3#post-4182733


----------



## lucor

Nice, got it working pretty much immediately! 
Now I just gotta find a plugin with lots of dials and that basically doesn't use any resources whatsoever. The Cubase Tremolo has only 4 knobs which would result in 'only' 512 possible articulation sets. Should be enough, but I'd like to be future proof.

Also I wonder how hard it would be to make a bespoke plugin for this? You'd basically only need a VST with a bunch of knobs, that don't even really have to do anything, no? Mhh...


----------



## lucor

Well, I (of course) spoke too soon. Sorry, but I have to annoy you all again. 

First off, I didn't really get how using the tremolo plugin like @pilgrim explained would work for more than 128 articulations. If you'd use each of the 4 knobs in the tremolo plugin for CC117, CC118, CC119 and CC120 respectively, Cubase would have no way to know which of the 4 CC's is the relevant one, or am I wrong? So it would just do CC117 first, then 118, 119 and finally 120, so you'd always end up with 120 if it goes through all the knobs one by one. That's why I thought about having a plugin in a different insert slot for every CC, so that it's easy for Cubase to differentiate.

Now my plan was like this: I wanted to use a simple gain plugin with just one fader (the freebie 'DeeGain') and have it in a different insert slot for each CC. The Generic Remote looks like this:




In Cubase I set up 4 tracks like this:





Moving the DeeGain faders works just as expected. The fader on Track CC117 scrolls through all the strings articulations, the fader on Track CC118 scrolls through all of Mihkel's brass articulations, etc. The problem however is that whatever I dialed in doesn't get remembered, as soon as the track gets deselected and reselected OSC defaults back to one specific articulation setup (the one that corresponds to CC120, value 1 ('Harmonium ARK2')).
I also tried to set the correct gain value with automation, but that also doesn't seem to work.

If anyone has any smart ideas left that would be great, I've been at this for hours but no luck. Maybe I completely misunderstood how this is supposed to work?

Edit: I also just had the idea of using the level of a Send to a dummie FX track as the 'trigger' instead of a plugin, which I'd find even better. But that also doesn't work, as soon as I reselect the track it doesn't recall the setting. So the problem definitely lies somewhere in Cubase communicating to OSC on track selection.


----------



## lucor

Another update: it works fine if I have just a single entry in the Generic Remote. Like this:




But as soon as I add another entry for CC118, CC117 stops working while CC118 now works. So it's always the last entry in that list, that works. I guess that's working as intended but how to circumvent it? I tried creating a separate Generic Remote for every CC, but no luck there.


----------



## Manaberry

@Mihkel Zilmer I tried a sample of your code with my method (I do not disable any tracks in my case).
Works very nicely! I improved the json to add section name, color, background color, and 3 categories of articulations. I like having specific articulations in a specific area.

It does look like this:



> {'name':'SSB Horns a2','color':'ff8a01','background':'201d1b',
> 'articulationsLong':['Legato','Long','Long Cuivre','Long Stopped','Multitongued'],
> 'articulationsShort':['Marcato','Tenuto','Staccato','BU Stacc','BU Quaver','BU Crotchet'],
> 'articulationsDeco':['Trill Minor 2nd','Trill Major 2nd','Rip','Fall']
> }



Very cool!


----------



## Mihkel Zilmer

lucor said:


> Another update: it works fine if I have just a single entry in the Generic Remote. Like this:
> 
> 
> 
> 
> But as soon as I add another entry for CC118, CC117 stops working while CC118 now works. So it's always the last entry in that list, that works. I guess that's working as intended but how to circumvent it? I tried creating a separate Generic Remote for every CC, but no luck there.



I think the issue here is the way I wrote the custom module. It's really waiting to receive only one CC in the range of 117-125 at one time while your Generic Remote sends all 4 together. The reason you always see CC120 value 1 displayed is because it is the last one sent to OSC.

A re-write of some of the code would be necessary to get it to work with sending multiple CCs at once, but in that case I could see the Tremolo plugin method working quite well. Sending two CCs at once could mean one is a bank number and the other instrument number. So 128x128 instruments - all you ever need. But yes, you would need to change the custom module for this kind of behaviour. 

I might have a bit of time to look into it later this week, but can't make any promises!


----------



## Manaberry

Ok guys, the post has been updated. I'm cleaning the spreadsheet to add some base64 gems to it! (I'm gonna create Cubase most used tools icon later this spring.)


----------



## lucor

Mihkel Zilmer said:


> I think the issue here is the way I wrote the custom module. It's really waiting to receive only one CC in the range of 117-125 at one time while your Generic Remote sends all 4 together. The reason you always see CC120 value 1 displayed is because it is the last one sent to OSC.
> 
> A re-write of some of the code would be necessary to get it to work with sending multiple CCs at once, but in that case I could see the Tremolo plugin method working quite well. Sending two CCs at once could mean one is a bank number and the other instrument number. So 128x128 instruments - all you ever need. But yes, you would need to change the custom module for this kind of behaviour.
> 
> I might have a bit of time to look into it later this week, but can't make any promises!


That would be beyond fantastic, but it really is no problem at all if you don't find the time, you already helped so much...
I'll also try to take a look at it with my non-existent coding knowledge.


----------



## lucor

Ok I tried but unfortunately failed completely.  I'm also a bit lost on how to get a better idea of how things work.

What would I actually have to learn to understand the OSC documentation (which right now doesn't make any sense to me whatsoever) and be able to write a custom module after my own preferences? Right now I mainly want to make instrument tracks work and then expand on it by also adding sliders and knobs that change with the track selection, for mic positions and other instrument
Do I 'just' have to learn javascript to learn how to do that and actually understand the contents of the documentation? Any pointers are appreciated! 

BTW please don't take this as a subliminal 'please do it for me' request, I'm absolutely willing to put in the time and energy to learn and do this myself!


----------



## DMDComposer

Can OSC send an actual text command like "123" or only through using a 3rd party like BOME Midi Translator?

If the latter, can you send a sequence of of CC commands through OSC so it can spell things with BOME?

For example ask OSC with one button to send a sequence of 

"CC14, Channel 16, Value 01" then
"CC14, Channel 16, Value 02" then
"CC14, Channel 16, Value 03".

To have BOME spell out for example "123". Is this possible?


----------



## Manaberry

OSC (Software) handle scripts. So yes, you can write a script that send a sequence of MIDI or OSC messages.

3rd party software is needed when you want to map specific action on midi messages. It will be useful to trigger actions on your computer that is not part of OSC/MIDI environment (such as keystroke for instance.)

*example of BOME action:*


> "Keydown: shift" when incoming trigger midi message is: BF 0D 69 _(ch 16, #13, 105)_



You can also execute file, script, timer, etc in BOME.


----------



## FriFlo

Open Stage Control looks really great and I am always fond of open source alternatives to commercial software! It would also be great to be able to use windows 10 touchscreens vs Lemur which ties the use to iOS and restricted Android devices ... However, I heavily rely on some features of Lemur, which is primarily to dynamicaly change the properties of control objects via Midi or OSC! 
E.g., you can hide/show a fader, change the text of a label, change the color of an object, ... with a script added to your patch that reacts on Midi/OSC input.
Is that supported for Open Stage Control?


----------



## Shad0wLandsUK

I have setup this up on my machine again and I am running into some issues with regards to the 'midi router settings'.

You explain that if you are only using one machine you need loopmidi, so I have that, but I do not see where you explain how to configure it for one machine :/
Or does this not need any data input into the OSC Control Panel for a single host?

I am running the server on my Windows 10 DAW machine and want to configure it for Cubase.
I will access the server through my DELL 5285 2in1 tablet through the browser

I also have a iConnectMIDI4+ which would be great to setup with this, however since that would use rtpmidi I am not sure what process that would entail...

Any help would be appreciated

Thanks


----------



## Manaberry

@Shad0wLandsUK 
Usually with loopmidi you just have to create the midi port that will be used by both OSC and Cubase. Because it's on the same computer, there is no need to create a "session". It's already there by default I would say.
For dual computer settings (you have to create a session on each and connect them together in order to send midi accross the network). Loopmidi doesn't provide such a feature.

For single computer, you just have to use the local IP of your computer in OSC. It should work.


----------



## DMDComposer

Is there anyway to auto-size to fit IPAD or different screens?

If can't be done via OSC maybe using CSS can shrink or help fit the ipad? Basically, trying to go from a "demo template" instead of building from scratch. So wondering if I can shrink it to fit since alot of the templates are huge! on the IPAD.


----------



## Jorge Vargas

Hello Guys, I know that this post is about windows but I have a problem in my Mac, I followed step by step the documentation in OSC Site but I didn't get any solution.

If I launch OSC using node, when I ask for the midi list, it doesn't show any information, if I launch the Mac OS version, it launch some error.









A JavaScript error occurred in the main process: Uncaught Exception: Error: spawn python3 ENOENT at exports._errnoException (util.js:1024:11) at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19) at onErrorNT (internal/child_process.js:374:16) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9)

Using the terminal I tried a lot of commands to change and install python and some else like rtmidi, I used brew to change something about the python version and nothing work, I have installed the last python's version and it show it.








I have formatted my Mac a lot of times, downloaded severals python versions, I tried to run with node running from sources, and building from sources and..... nothing works, the worst thing is that I couldn't find any post with the same situation using MAC, can somebody help me?


----------



## zig

Hi Jorge,
I have exactly the same error message (mac os 10.11.5).
Is there a python master on mac here that could help us install properly?


----------



## Jorge Vargas

zig said:


> Hi Jorge,
> I have exactly the same error message (mac os 10.11.5).
> Is there a python master on mac here that could help us install properly?


 I opened a post on the OSC Forum too.


----------



## Manaberry

Sorry guys, I was not available for few days.
I will get a proper look at your issues tomorrow.


----------



## Manaberry

@Jorge Vargas It seems you've got exactly the same error as someone else on Windows. Usually this issue occurs if you have footprint of a previous version of Python (32 or 64 bit)
I suggest you to clean all pythons presence and reinstall the good one properly.


----------



## Jorge Vargas

Manaberry said:


> @Jorge Vargas It seems you've got exactly the same error as someone else on Windows. Usually this issue occurs if you have footprint of a previous version of Python (32 or 64 bit)
> I suggest you to clean all pythons presence and reinstall the good one properly.



I tried to install several versions of Python but not one work, which one is the correct one? because I download 64 version the last one.


----------



## Jorge Vargas

zig said:


> Hi Jorge,
> I have exactly the same error message (mac os 10.11.5).
> Is there a python master on mac here that could help us install properly?



Hi brother, I was asking a lot of thinks to the developer and he found an error, he teach me some tips, I will to make a tutorial doing all from scratch.


----------



## Jorge Vargas

Jorge Vargas said:


> Hi brother, I was asking a lot of thinks to the developer and he found an error, he teach me some tips, I will to make a tutorial doing all from scratch.


It has some errors but it works


----------



## Manaberry

I saw your post on the community board. On windows, cleaning the registry and reinstalling python does fix the problem. But yes, on mac it's not that easy it seems. Glad you fixed your issue @Jorge Vargas !


----------



## zig

@Jorge Vargas
I saw your post on the osc forum, very impatient to test your solution. Python drives me crazy!


----------



## Jorge Vargas

zig said:


> @Jorge Vargas
> I saw your post on the osc forum, very impatient to test your solution. Python drives me crazy!



Hello guys, here I uploaded my solution in a video.


----------



## zig

Thankyou so much!
I'm going to test this morning.


----------



## Manaberry

Thanks for the video! I added a link to this post on the original one for Mac OSX users.


----------



## zig

@Jorge Vargas
Step by step I do tests to understand how it works on Mac, your tutorial was very helpfull.
I have strange behaviors and I'm a bit confused with the syntax and midi ports routing ... but it's a good challenge!
Did you tried to use Mihkel Zilmer's templates and Grizzlymv's one? Does it work for you?


----------



## Jorge Vargas

zig said:


> @Jorge Vargas
> Step by step I do tests to understand how it works on Mac, your tutorial was very helpfull.
> I have strange behaviors and I'm a bit confused with the syntax and midi ports routing ... but it's a good challenge!
> Did you tried to use Mihkel Zilmer's templates and Grizzlymv's one? Does it work for you?



No, I didn't, I'm making a custom template for using with MainStage


----------



## Audio Birdi

Hey all,

I was wondering how I'd go about setting up / scripting something like the video below in Open Stage Control?

Thank you in advance for the help!


----------



## Manaberry

Audio Birdi said:


> Hey all,
> 
> I was wondering how I'd go about setting up / scripting something like the video below in Open Stage Control?
> 
> Thank you in advance for the help!




Populate articulations based on the selected track? Of course. I'm also doing it that way (module imported in O-S-C, heavily modified but the base one was from @Mihkel Zilmer)
See page 7 of this thread to get more information about it and there is also an official doc page about custom modules.


----------



## Audio Birdi

Manaberry said:


> Populate articulations based on the selected track? Of course. I'm also doing it that way (module imported in O-S-C, heavily modified but the base one was from @Mihkel Zilmer)
> See page 7 of this thread to get more information about it and there is also an official doc page about custom modules.


Thank you for then links and info @Manaberry! will look more into this and see how to go about receiving CC 32 and CC0 at the same time based on the PC Button Number.

@Mihkel Zilmer could your script be edited in a way that receives MIDI CC 32 and CC 0 at the same time and auto-populate articulations?


----------



## Mihkel Zilmer

Audio Birdi said:


> Thank you for then links and info @Manaberry! will look more into this and see how to go about receiving CC 32 and CC0 at the same time based on the PC Button Number.
> 
> @Mihkel Zilmer could your script be edited in a way that receives MIDI CC 32 and CC 0 at the same time and auto-populate articulations?



I wrote the script to receive multiple CCs - CC117 to CC127, each containing 128 unique articulation lists. Bringing the total potential limit of instruments to just over 1400. Essentially the CC number defines which bank is being pulled from, and the CC value will determine which list will get chosen from that bank. Adjusting this to use a combination of just 2 CCs instead of my CC+value should not be a problem, as the basic principle of using a combination of two CCs to define the instrument is already in there.


----------



## pmcrockett

I've successfully configured an 800 MHz touchscreen cash register terminal to run Open Stage Control from a network. The GUI lags pretty hard because the system is so slow, but it actually works.


----------



## Manaberry

pmcrockett said:


> I've successfully configured an 800 MHz touchscreen cash register terminal to run Open Stage Control from a network. The GUI lags pretty hard because the system is so slow, but it actually works.



Very nice achievement! I can confirm that Open Stage Control UI require some power to run smoothly, but I'm pretty impressed that you transformed a cash register terminal to a touch screen for music production! Feel free to share a picture, I'm very curious about it 

Again, well done!


----------



## pmcrockett

Manaberry said:


> Very nice achievement! I can confirm that Open Stage Control UI require some power to run smoothly, but I'm pretty impressed that you transformed a cash register terminal to a touch screen for music production! Feel free to share a picture, I'm very curious about it
> 
> Again, well done!







It's running Linux from a USB flash drive, although now that I have things working it might be worth repartitioning the internal drive and installing there. The hardest part of setup was configuring the touchscreen -- Linux had working drivers, but the cursor initially didn't map to the touchscreen properly so I had to muck around in the config files a bit. (And yes, that's a credit card reader on the right side )


----------



## Jorge Vargas

pmcrockett said:


> It's running Linux from a USB flash drive, although now that I have things working it might be worth repartitioning the internal drive and installing there. The hardest part of setup was configuring the touchscreen -- Linux had working drivers, but the cursor initially didn't map to the touchscreen properly so I had to muck around in the config files a bit. (And yes, that's a credit card reader on the right side )



You blew my mind friend! you can be the next president if you want XD.

-musitian: Hey pmcrockett, why do these instruments stoped working?
-pmcrockett: oh yes, you need to transfer some money to my account.
-musitian: but I don't have cash and the bank is far away.
-pmcrokett: don't worry, you can use my credit card reader on the right side of my OSC interface.

It's so funny because usually don't think to use some gear like this but we have a lot of tools in our hands that we don't use and that is one of the reason why we invest a lot of money buying tools of all kinds.


----------



## Manaberry

Next step: a calculator


----------



## pmcrockett

I don't own a Nintendo Switch, but Googling tells me it'll run Chromium, so Open Stage Control on Switch should be pretty straightforward.


----------



## JoeHidden

Hello, everybody,

I'm also working on an OSC project at the moment. It runs on a Hans-G 22" touch, controls Cubase and replaces my Lemur Ipad interface.

As Merton said "on the shoulders of giants", my project contains many ideas from this thread, like @Manaberry Design as a starting point. The Selector popup is a replica of the selector concept in C_Brains, which I liked to use on the Ipad. There is still a lot to do, when it is finished I will make it available here. Best regards Joe












Best regards Joe


----------



## Manaberry

Nice work Joe! Looks clean and clear.
Feel free to share a pic of your whole setup. It would be cool to see how everything look! (even if you don't stand a chance against the cash register terminal)


----------



## JoeHidden

@Manaberry - Your wish is my command


----------



## Manaberry

Superb!


----------



## JoeHidden

Thanks! Your work and the work of all the other guys here was a really good starting point.


----------



## Jonathan Moray

JoeHidden said:


> Hello, everybody,
> 
> I'm also working on an OSC project at the moment. It runs on a Hans-G 22" touch, controls Cubase and replaces my Lemur Ipad interface.
> 
> As Merton said "on the shoulders of giants", my project contains many ideas from this thread, like @Manaberry Design as a starting point. The Selector popup is a replica of the selector concept in C_Brains, which I liked to use on the Ipad. There is still a lot to do, when it is finished I will make it available here. Best regards Joe
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Best regards Joe



This is great, Joe. I've been eyeing a Hanns-G 22" for a while now. Was first planing to use an Android Box hooked up to it and run Lemur with C_Brains but then I found Open Stage Control and got a change of heart. I set up Open Stage Control and used it with my phone a few months ago and it worked great. The only thing I missed was C_Brains, and especially the selector part. So this is really good news. Looking forward to seeing more.

While I'm here I also would like to thank @Manaberry for his dedication to this thread and his help in setting up OSC. I wouldn't have been able to do it without his tutorial, thanks.


----------



## JoeHidden

Yeah, I like the Hanns-G. Not too small not too big. Suits perfect on my desk. Regarding to “selector”. It works but there is still a lot to do. I implemented 2/2 (8th, Triplets) and 4/4 (16th, Triplets) yet. The other rhythms are still on my todo list... 🤓


----------



## Jonathan Moray

JoeHidden said:


> Yeah, I like the Hanns-G. Not too small not too big. Suits perfect on my desk. Regarding to “selector”. It works but there is still a lot to do. I implemented 2/2 (8th, Triplets) and 4/4 (16th, Triplets) yet. The other rhythms are still on my todo list... 🤓



Yes, that's what I'm thinking. I didn't want to have a 27" screen in front of me because that would literally give me no room for my computer keyboard. Also the price for the Hanns-G is really nice. I've never used the brand before but this might just solidify my decision and I might order one next week.

The GUI for your note selector looks very sleek. Does it work the same way that C_Brains does? Where you can just click the note on GUI?


----------



## JoeHidden

Yes, exactly the same behavior like C_Brains. You can see the selected note (green overlay) on the second bar of the upper row.


----------



## Manaberry

Jonathan Moray said:


> While I'm here I also would like to thank @Manaberry for his dedication to this thread and his help in setting up OSC. I wouldn't have been able to do it without his tutorial, thanks.



Pleased to see you are enjoying this software and my tutorial! Jean-Emmanuel's work is stunning, I'm just spreading the word about his amazing app!


----------



## JoeHidden

100% agree 🙏


----------



## Luke Davoll

Hi Joe, there are a few of us here who use c_brains. Perhaps you could share a part of your project and we could all work on implementing c_brains together?? Divide up the work and get it happening quicker? Just a thought...


----------



## JoeHidden

Yes, why not. I am on a business trip this week and can share the selector as standalone part with a few explanations on the weekend.


----------



## JoeHidden

Hi everybody,

I put the selector and the velocity control modal in a handy package with a few aditional informations. If i forgot something - please let me know. #HappyCoding

Joe

EDIT: Attachment removed - See Post from 2019-09-15


----------



## DMDComposer

JoeHidden said:


> Hi everybody,
> 
> I put the selector and the velocity control modal in a handy package with a few aditional informations. If i forgot something - please let me know. #HappyCoding
> 
> Joe



Thanks for sharing Joe. This is actually incredible work. Congrats!

Maybe it's just on my end, but the titles of the selectors like "Select." or "Vel." are not showing when everything is connected? It seems to function in Cubase fine with selecting and velocities, but for some reason the titles don't like to appear.


----------



## JoeHidden

Thank you for your kind words. Can you share a screenshot?
The modal popups, did not show any titlebar.


----------



## DMDComposer

Hi,

I was referring to the labels in your select and vel modal selectors.






After messing with your color selector I got them to appear. I'm not sure why my OSC wasn't showing them with the default colors you had though. Still trying to debug.

It seems that on my server-side it doesn't like operating with the On/Off active status color switch. Trying to figure out why. I think it's my error and not yours haha.

Here is the server side of the same image

*



*


----------



## JoeHidden

Hmm That looks a bit ... "special"  I try to avoid hard coded colors as much as possible. Maybe there is a problem with the theme of osc itself. Try to set the dark theme on the osc server window. Maybe that helps to figure it out.


----------



## JoeHidden

@DMDComposer Ok, there is something wrong with with the combination external client and color. I tried the template on my ipad and had the same color issue here. My Hanns-G is directly connected to my working horse (which is also running OSC). So in my case, Server and Client is on the same machine.


----------



## JoeHidden

@DMDComposer Can you please try to do the following. Select the modal "modal_more". Right mouse click "cut". Right click "paste". Then it look, as it should. crazy...


----------



## DMDComposer

@JoeHidden
Thank you for your suggestions. That's very interesting. Let me try the switching to dark theme in the OSC window server. However, the cutting/paste works until it reloads/resaves. Strange...

Edit: Dark theme did not help. 

I wonder why cutting and pasting it seems to fix it until it reloads? Can it be the order in which it is being called?


----------



## JoeHidden

Ok, found it. I updated the rar file and added my statefile. Please download it again. Then load the state file and it should work. Seems that the color variable are not initializied on the client without the state file.


----------



## DMDComposer

Hmm, everytime I reload it bugs out and I have to reload state. This is not an end of the world situation. But just keeping you updated. I'm not fussy about having to reload state everytime I make a new edit/save. lol

Edit: Your new update removing all color variables fixed it. Thanks!


----------



## JoeHidden

@DMDComposer I am rewriting all the css stuff and put the color to an external template file. I guess i am able to upload a full fixed version in the evening. Maybe you did not invest to much time in copying thing until then


----------



## JoeHidden

Hey there, 

this variant works without color variables and is more customizeable via the css file. Not perfect yet, but a better starting point to build more time signature on that base.






BR Joe


----------



## JoeHidden

Hey there,

small update. Not so much time this week. But I finished the Transpose and Nudge module today.







BR Joe


----------



## DMDComposer

JoeHidden said:


> Hey there,
> 
> small update. Not so much time this week. But I finished the Transpose and Nudge module today.



That looks fantastic Joe! I love your compact but visually clean design.

Did you update the link with the transpose/nudge?


----------



## JoeHidden

No, I will share the full template with all modules in a while. I will implement a few more things and fix some bugs.


----------



## Manaberry

Awesome job Joe!


----------



## JoeHidden

Hey folks,

I think i am nearly through my todo list. The Version 0.4.5 works well and I really hope I forgot nothing in the Rar archive

I added a set of Cubase tracks. It is easier to figure out how the track switching an articulation management works if you have an working example. Just follow the readme.

Let me know what you think - i am happy for feedback and new ideas. I guess there is lot more possible


----------



## Jonathan Moray

JoeHidden said:


> Hey folks,
> 
> I think i am nearly through my todo list. The Version 0.4.5 works well and I really hope I forgot nothing in the Rar archive
> 
> I added a set of Cubase tracks. It is easier to figure out how the track switching an articulation management works if you have an working example. Just follow the readme.
> 
> Let me know what you think - i am happy for feedback and new ideas. I guess there is lot more possible



Amazing work. I will take a look when I get the time, but it looks really good so far.


----------



## DMDComposer

Joe, what an amazing job. I'm just playing through some of it now.

What does the X|G|D|P|A buttons do on the visibility control?

Also, did you just set up in your Generic Remotes the following?








Just trying to copy what you did and follow your notes so I can fully test what you created. Trying to get your "selected" tracks and visibility control to function. 

Thanks Joe.


----------



## JoeHidden

Hey @DMDComposer,

you're welcome 

The XGDPA is for the VSL Dimension Libraries. You can choose what Tracks are visible in Cubase - X=None, G=Groups, D=Desks, P=Player, A=All 

You need the two generics remotes configured like this:










Code:


--midi oscTraVisIn:3,-1 oscTraVisOut:-1,2 oscTraCtrlIn:5,-1 oscTraCtrlOut:-1,4 oscInstIn:9,-1 oscInstOut:-1,8 oscRecallIn:7,-1 oscRecallOut:-1,6


The oscInstr is the third port, which should be included in All Midi. All Messages that needs to reach the instrument, vep, vst are send through this port.

The reason for individual In and Out loopback ports is to prevent feedback loops. So all ports are named from the osc perspective. That means, that the oscOut is an cubaseIn. And only the oscInstOut should and oscTraCtrlIn be in 'All Midi'. oscTraCtrlIn is needed for the fact that cubase needs to see a message to transform it. A little weird, but that's how it is. In Cubase it should look like this:






In the debug log from Osc you should see the two messages after switching the track:



Code:


MIDI received: CONTROL_CHANGE: channel=1, cc=126, value=127 From: midi:oscTraCtrlIn
...
MIDI received: CONTROL_CHANGE: channel=1, cc=117, value=4 From: midi:oscRecallIn


The first message is the track change message from Cubase before the transformation on the individual track. The second message cc117 is the track change to value 4 message out of the midi transform. That leads us to this track definition from the custom module:


Code:


4: { 'trackname': 'VSL - Synchron Strings - Cellos', 'trackarticulations': [] },


The visibility control is a bit more complex then normal, since the "all, none and default" button change a lot of the other buttons.

BR Joe


----------



## DMDComposer

Perfect mate!. Everythings up and running and almost working to what I believe you play around with. One last question I believe is what ports am I missing here? So the select visibility will function I imagine?
I understand the first port is "oscRecallIn" however, where is your second "Input 1 or 2" coming from?


----------



## JoeHidden

Good morning, 

that is another special thing for the dimension libraries from vsl. The big picture is:

These buttons are used to enable or disable instruments / plugins inside of Vienna Ensemble Pro. It it quite cool to have a fast loading and large template in VEP.




So the first and second button sends cc 111, which force VEP to enable or disable one instrument which is corresponding to to selected track in cubase (like only the Violas from a string section). The second button sends cc 112 which is wired to the corresponding section in VEP. That means, if you pushed the Grp button an the same Viola track it enables or disables Violins 1, Violins 2, Violoas, Celiis & and the Basses. That is quite useful.

Now to your question. The Dimension Strings come with 8 individual recorded players. So if you use the P on the upper mentioned XGDPA Button you got 8 tracks in cubase and 8 plugins in VEP. One for each player. If you want to have the same behovior like my example of the string section in the last paragraph, you have to enable 8 individual tracks by pressing the VEP ON Button. Here comes the second transformer in the game. It exists only on player track 2-8 and reroute the cc 111 command to the player 1 track. Then the command force VEP to enable all invidiual players from this instrument. The same mechanism is also implemented for desks (transformer on desk 2-4) and groups (transformer on group 2).






I hope that makes it a little clearer?

BR Joe


----------



## Ryan

So, I'm replacing this with touchOSC on my ipad. I have an Acer 27" touchscreen that I would use. I've been looking trough some of the different layouts people use within this thread. There is a lot I like, but one function that I really would love to have is the function *Manaberry *uses for articulations. I see that the articulations for each track is displayed on the touchscreen automatic. Is this a very hard function to implement? I would like to use the template from *JoeHidden, *but change it for my needs where articulations on each track get displayed instead of the vienna inst. part. Possible or not? 

Best
Ryan


----------



## RoWi

Hi Manaberry.

First of All, Thank you so much for your OpenStage Control tutorial. I followed your tut step by step. Unfortunately I can't list Midi Ports inside OpenStage Control.
I would really appreciate to receive some hints to solve this problem.

I am using a Client/Server instance.

Client WIN 7 machine, Cubase
Server WIN10 machine, Vienna Ensemble Pro 7


Server
I installed Python 3.7.4., the python-rtmidi package and rtpMIDI.

I downloaded and installed OpenStage Control v0.48.0

Client
I installed rtpMIDI.

rtpMIDI on Client and Server are communicating correctly.
To fill in the midi field I can not list midi devices as you showed in your tutorial.

Thank you so much in advance. 

Many greetz,

RoWi


----------



## Manaberry

Ryan said:


> So, I'm replacing this with touchOSC on my ipad. I have an Acer 27" touchscreen that I would use. I've been looking trough some of the different layouts people use within this thread. There is a lot I like, but one function that I really would love to have is the function *Manaberry *uses for articulations. I see that the articulations for each track is displayed on the touchscreen automatic. Is this a very hard function to implement? I would like to use the template from *JoeHidden, *but change it for my needs where articulations on each track get displayed instead of the vienna inst. part. Possible or not?
> 
> Best
> Ryan




Hello Ryan,

You should find some process explanation and files starting from this *post**. *It's quite simple to implement. There are just a few workarounds to understand and set up.





RoWi said:


> Hi Manaberry.
> 
> First of All, Thank you so much for your OpenStage Control tutorial. I followed your tut step by step. Unfortunately I can't list Midi Ports inside OpenStage Control.
> I would really appreciate to receive some hints to solve this problem.
> 
> I am using a Client/Server instance.
> 
> Client WIN 7 machine, Cubase
> Server WIN10 machine, Vienna Ensemble Pro 7
> 
> 
> Server
> I installed Python 3.7.4., the python-rtmidi package and rtpMIDI.
> 
> I downloaded and installed OpenStage Control v0.48.0
> 
> Client
> I installed rtpMIDI.
> 
> rtpMIDI on Client and Server are communicating correctly.
> To fill in the midi field I can not list midi devices as you showed in your tutorial.
> 
> Thank you so much in advance.
> 
> Many greetz,
> 
> RoWi




Hi @RoWi
You are telling me that you don't see anything when you click on "List devices" or the fact that you don't see your custom midi port on the list? You should see at least one entry in the list (the default windows one)



Happy to see such interest in my tutorial and O-S-C.


----------



## Ryan

Manaberry said:


> Hello Ryan,
> 
> You should find some process explanation and files starting from this *post**. *It's quite simple to implement. There are just a few workarounds to understand and set up.
> 
> 
> I will look into it. Thanks!


----------



## Manaberry

If you need further help to use those files or set up them correctly, feel free to post here


----------



## Ryan

Manaberry said:


> If you need further help to use those files or set up them correctly, feel free to post here



I will do that! Thanks.


----------



## Ryan

ehr... How do you get the xy-pads to work? Was thinking of making a new tab for Zebra2..


----------



## RoWi

Hi Manaberry.
Thank you for your effort helping me. I really appreciate that.

My win 10 server is a blank installed WIN10 Pro version.
Only installed applications are e-licenser en i lok licenser and Vienna Ensemble Pro 7. And of course rtpMIDI.
Afterwards I installed your tutorial:
1. Python 3.7.4
2. pip install python-rtmidi package
3. rtpMIDI (Setting your sessions. Ports 5006 (slave) and 5008 (master))
4. Downloaded OpenStage Conntrol v0.48.0
5. Installed OpenStage Control.

That's all there is installed.

As you can see in openstage-2.jpg I initiated a device list. The window below Save and START stays empty. (?)
In openstage-1.jpg send= 192.168.1.2:8000. That is my Master PC.
My slave computer (server) is 192.168.1.16.

In Device Manager I noticed under Sound, Video en game controllers, a teVirtualMIDI - Virtual MIDI Driver x64. I guess this device is installed by rtpMIDI.

It doesn't make any sense to me.

Greetz,

RoWi


----------



## Jaroslav

Hi @Manaberry 

Thank you for putting this together!

I can't get midi ports to work though. I'm using single PC, tried sending to my local IP and to leave "send" field blank.

As midi port I'm using LoopBe. I copied name of the midi device from the RMB list in OSC (LoobBe Internal MIDI)












In "target" for the button I have "midi:LoopBe Internal MIDI"






And when I click it, it gives an error "unknown output":


----------



## Manaberry

Ryan said:


> ehr... How do you get the xy-pads to work? Was thinking of making a new tab for Zebra2..



You can get data from XY-pad by using _*#{@{PADWIDGETID}[AXIS]}*_
Usually, I link an XY pad to two faders. Each fader sends midi when their input value change through the pad input. In the documentation, the pad axis is an array. You just have to replace *AXIS *by 0 to get X, or 1 to get Y.

Here is the doc about XY.








@RoWi I'm reviewing your issue. I will get back to you once I've figured out something.

@Jaroslav Weird indeed. Can you please provide a screenshot of your LoopBe configuration?


----------



## Jaroslav

@Manaberry I have LoopBe1, it's just an internal MIDI device, afaik all it has is a mute checkmark:

Tray:


----------



## Jaroslav

I suspect that I input address incorrectly into "send" field. It looks like 192.xxx.x.xxx:8000


----------



## RoWi

@Manaberry Thank you Manaberry!


----------



## Manaberry

RoWi said:


> @Manaberry Thank you Manaberry!




Ok, try clicking on "List devices" once you have properly started Open Stage Control (just press Start). On your screenshots, it seems it wasn't launched.

Confirmed on my side also, without starting the software, I cannot see devices when clicking "List Devices". I've added a line about that in the tutorial.


----------



## RoWi

Hi Manaberry, that's correct. OpenStage Control wasn't started.

openstage-3.jpg shows both rtpMidi instances. The Top intance is rtpMIDI on my Master Computer (client).
The bottom instance is rtpMIDI on my Slave Computer (server).

The TOP rtpMidi instance is showing 2 extra subnets. ...50.1:5008 and ...159.1:5008. That's strange because they don't exist! There are no ...50.0 and ....159.0 networks.

I guess openstage-3.jpg in total is showing a working rtpMIDI connection with no latency. (0 ms)

openstage-4.jpg shows a started OpenStage controller. I inititiated a device list request. No devices are listed(?)

Despite I started OpenStage Control no devices are listed!

Greetz,

RoWi


----------



## Manaberry

RoWi said:


> Hi Manaberry, that's correct. OpenStage Control wasn't started.
> 
> openstage-3.jpg shows both rtpMidi instances. The Top intance is rtpMIDI on my Master Computer (client).
> The bottom instance is rtpMIDI on my Slave Computer (server).
> 
> The TOP rtpMidi instance is showing 2 extra subnets. ...50.1:5008 and ...159.1:5008. That's strange because they don't exist! There are no ...50.0 and ....159.0 networks.
> 
> I guess openstage-3.jpg in total is showing a working rtpMIDI connection with no latency. (0 ms)
> 
> openstage-4.jpg shows a started OpenStage controller. I inititiated a device list request. No devices are listed(?)
> 
> Despite I started OpenStage Control no devices are listed!
> 
> Greetz,
> 
> RoWi



Don't worry about the subnet. Those are the midi network addresses. I see they are well connected, with 0ms latency. So all is good for rtpmidi.
The *right-click* thing then *list devices* should clearly display a list of midi devices of your machine. I don't understand why it doesn't show up in your case...


----------



## RoWi

You are correct. It simply does not show a device list. Anyway, yhank you so much for trying to help. Of course I will continue to figure this out. I wil let you know.


----------



## Manaberry

RoWi said:


> You are correct. It simply does not show a device list. Anyway, yhank you so much for trying to help. Of course I will continue to figure this out. I wil let you know.



Good luck! Maybe try to bypass this step by using another software to discover the midi devices list.
You can also try the official support forum to figure out directly with the developer.


----------



## RoWi

Thank you.


----------



## Jaroslav

Has anyone managed to get OSC working on a single computer? What do you input into "send"?


----------



## Manaberry

Jaroslav said:


> Has anyone managed to get OSC working on a single computer? What do you input into "send"?


The machine's IP! (I guess haha)


----------



## Jonathan Moray

Jaroslav said:


> Has anyone managed to get OSC working on a single computer? What do you input into "send"?



Yes.

Usually something like 127.0.0.1:8000 should work. It's the local IP for the machine.


----------



## Jaroslav

I tried different midi device - same thing. I guess it just won't work for me.


----------



## Jaroslav

Okay, it doesn't give an error if I replace spaces in midi device name with "_". That said it doesn't do anything. 

Maybe it just doesn't like spaces, but when I replace them with "_" it actually sends midi to non-existing device "LoopBe*_*Internal*_*MIDI" instead of "LoopBe Internal MIDI"?


----------



## Jonathan Moray

Jaroslav said:


> I tried different midi device - same thing. I guess it just won't work for me.



Have you tried loopMIDI?


----------



## Jaroslav

Jonathan Moray said:


> Have you tried loopMIDI?


Just tried it. It worked, at least I can see it in the loopMIDI window.


----------



## Jaroslav

Update: I tried it with Kontakt, just had to select "omni" channel on the loaded instrument, and it worked.
Also it worked with LoopBe Internal MIDI, but with spaces replaced by "_".
What threw me off is that Kontakt wasn't reacting to the button when I initially replaced spaces with "_". I just had to select "omni" Midi Channel on loaded instrument.

@Manaberry Could you perhaps point out in your post that spaces in Midi Device names have to be replaced with "_" in both OSC settings and in widget's target?

I just guessed it from this:


----------



## Manaberry

@Jaroslav I was thinking to tell you precisely the same thing but I forgot to. Usually, we never use space in any "code-based" app. Always _ or -. I'm very used to that rule but it's not the case of everyone indeed. I will add a line about that on the tutorial tomorrow


----------



## Jaroslav

Manaberry said:


> @Jaroslav I was thinking to tell you precisely the same thing but I forgot to. Usually, we never use space in any "code-based" app. Always _ or -. I'm very used to that rule but it's not the case of everyone indeed. I will add a line about that on the tutorial tomorrow



I didn't think that the main settings window in OSC also uses code like syntax


----------



## Luke Davoll

JoeHidden said:


> Hey folks,
> 
> I think i am nearly through my todo list. The Version 0.4.5 works well and I really hope I forgot nothing in the Rar archive
> 
> I added a set of Cubase tracks. It is easier to figure out how the track switching an articulation management works if you have an working example. Just follow the readme.
> 
> Let me know what you think - i am happy for feedback and new ideas. I guess there is lot more possible


Amazing stuff Joe. So good of you to share. 

@DMDComposer I'm intrigued to see the progress you're making on your osc template. Would you share a screenshot?


----------



## RoWi

@Manaberry Jean-Emmanuel is still offering great support in finding a solution for Openstage Control to find virtual midi devices. I installed LoopBE30 and MidiOX. On win10, MidiOx can not see loopbe30 virtual midi channels. On win7 (My mastermachine) MidiOX can see LoopBE30 virtual midi channels. So I guess this is a Win10 problem. OpenStage Control can not find midi devices due to this win10 problem.
Of course I am not giving up!  

Is it possible that Vienna Ensemble Pro 7 could cause this problem?

greetz RoWi


----------



## RoWi

Today My OpenStage Control Win 10 problem has been solved!!!

Cause: Windows Remote Desktop feature!!!

As I have my Server (Slave computer, VEPRO 7) in a dedicated server room I used Windows Remote Desktop feature to manage the slave computer.
Via Remote Desktop a Midi Device listing (OpenStage Control) command (right click) does not work! Python commands do not work either.

First I closed my Remote Desktop session.
I attached a display, keyboard and mouse to my slave computer and applied a right click on OpenStage Control and selected to list midi devices.
All midi devices were listed!!!
Python commands are working.

So now I edited the midi section in OpenStage Control and created a "button".
Everything works as expected !!! 

I locked the user and next I opened a Remote Desktop session again.
I pressed the "button" in a browser on my Master Computer.
OpenStage Control generates a hugh ammount of errors. So I concluded Remote Desktop messes up Open Stage Control.

Now I choose TeamViewer as a remote desktop manager.
Conclusion: No problems anymore.

This "no listing of midi devices in OpenStage Control" issue, engaged me for a week to tackle the problem. I never thought Remote Desktop is the cause for no midi device listing in OpenStage Control.

So all helpfull people on this forum: Thank you so much for your efforts to help me solve te problem.
Take this as a good advice.
Do NOT use Remote Desktop to manage a remote computer on your dedicated subnet! Especially in the case you are working with OpenStage Control.

I am a happy guy again! 

Greetz. RoWi


----------



## Manaberry

@RoWi I'm very happy you solved your problem! Thanks, for sharing this issue and its solution  Enjoy OSC!


----------



## RoWi

@Manaberry How can I create a canvas in OpenStage for an ipad or ipad Pro?
I guess I have to set a Media Query at the root level. Any idea?
Are there good examples to load in OpenStage to study all posibilities with OpenStage?

Greetz Ron


----------



## DMDComposer

Luke Davoll said:


> @DMDComposer I'm intrigued to see the progress you're making on your osc template. Would you share a screenshot?


Hi Luke,

I haven't had as much time to start implementing it fully into my template so mainly the VEP disable/enable and the visual tracks on the top half of Joe's template is still the same. However, I've been making my way through his bottom half and adding a lot more icons/commands that I use frequently and hiding some that I know hotkeys for that I don't need to push a button. If I know a hotkey it's much faster to just use the keyboard then to have a button for example "cut, or paste". etc etc





The main function I had to add was "Track Versions", as I find it crucial to my workflow being able to create track versions for many tracks at once, and flipping through the versions. This is incase I have a film project with a cue, 1m21-v-03, so it's the third version. However, what if I had 3 different ideas for the last bar of the piece, wasn't sure which chord fit best with the film. So I'd have, 1m21-v-03a, 1m21-v-03b, 1m21-v-03c. But, instead of creating 3 different *cpr files I'd rather keep v-03 as one file, and just change the tracks versions to A,B, or C. I find this method for me personally a lot more organized especially when I have to go to v-04 or after and I don't even need the alternates anymore.






Also, I've messed with his button to overlay another section of buttons on top. Here, I hid some of Joe's buttons that I didn't need to see or don't need to have quickly.






Still a work in progress and I thank Joe for sharing his hard work and expertise to get the ball rolling for me. By the end of the year I'm thinking I'll get rid of my two metagrid ipads and just be a full OSC user.

Cheers,
Dillon


----------



## Luke Davoll

DMDComposer said:


> Hi Luke,
> 
> I haven't had as much time to start implementing it fully into my template so mainly the VEP disable/enable and the visual tracks on the top half of Joe's template is still the same. However, I've been making my way through his bottom half and adding a lot more icons/commands that I use frequently and hiding some that I know hotkeys for that I don't need to push a button. If I know a hotkey it's much faster to just use the keyboard then to have a button for example "cut, or paste". etc etc
> 
> 
> 
> 
> 
> The main function I had to add was "Track Versions", as I find it crucial to my workflow being able to create track versions for many tracks at once, and flipping through the versions. This is incase I have a film project with a cue, 1m21-v-03, so it's the third version. However, what if I had 3 different ideas for the last bar of the piece, wasn't sure which chord fit best with the film. So I'd have, 1m21-v-03a, 1m21-v-03b, 1m21-v-03c. But, instead of creating 3 different *cpr files I'd rather keep v-03 as one file, and just change the tracks versions to A,B, or C. I find this method for me personally a lot more organized especially when I have to go to v-04 or after and I don't even need the alternates anymore.
> 
> 
> 
> 
> 
> 
> Also, I've messed with his button to overlay another section of buttons on top. Here, I hid some of Joe's buttons that I didn't need to see or don't need to have quickly.
> 
> 
> 
> 
> 
> 
> Still a work in progress and I thank Joe for sharing his hard work and expertise to get the ball rolling for me. By the end of the year I'm thinking I'll get rid of my two metagrid ipads and just be a full OSC user.
> 
> Cheers,
> Dillon


Thanks so much! I love how people share their ideas. We can all learn so much. 

About the track versions. That's very cool. Would you be able to give a little more info how you accomplish this. 

And on an unrelated note, I see you have one slave. Would you share what your latency is? Do you run your master at 128 and your slave vep at 1? How many tracks is your template? How many audio returns are coming in? And do you find you hit real time limits with your current setup? Cheers!


----------



## DMDComposer

Luke Davoll said:


> Thanks so much! I love how people share their ideas. We can all learn so much.


No problem. My pleasure.



> About the track versions. That's very cool. Would you be able to give a little more info how you accomplish this.



Select every midi track, audio if I need to, time signature/tempo. I use a PLE function to be swift. 
Assign a common ID to the tracks. This is so you can cycle through all of them at once. Otherwise it'll give you an error saying common id doesn't exist or something.
I then depending if I want something clean I'll use NEW TRACK VERSION, but 9/10 I'll use DUPLICATE TRACK VERSION so I can start from where I'm at, and the make the alternate edits.
I then RENAME all the tracks to v1 or v2, or vA or vB whatever you like.






That's pretty much it. Let me know if you want me to explain something further. This is still relatively new in my template/process of writing as even though track versions have been around for a long while in Cubase I didn't really grasp the full power of it til a few months ago.



> Would you share what your latency is?


Terrible... I usually write and record at 256 with a lot of tracks disabled and track compensation latency on... To be able to play back depending on the size of my template and plugins I usually go straight to 1024 and at times 2048. This is because my CPU is the bottleneck, I'm still a quad-core user and need to upgrade.



> Do you run your master at 128 and your slave vep at 1?


256 (I wish it was 128 as I hate piano latency when I start playing fast scales, I can really feel the lag at 256). Yes, VEP is at 1.



> How many tracks is your template?


Under a 1000 perhaps? I used to be the one who had every library at all times, but honestly I write in Sibelius first now, so when I get to Cubase I just go to my go-to libraries. I'm not the best mock-up person but I'm not one who is overly obsessed with how my orchestral mock-up is. I spend 1000% more time in Sibelius and the writing/orchestrating phase. Just my personal preference though.


> How many audio returns are coming in?


Least as possible. I still think its because of my quad-core being the bottleneck as I had a template with shorts/longs, on every different type of orchestral section. Also percussion was stemmed out for a lot of different types... but in the end I realize that Cubase was not handling the information of so many audio returns. Especailly now with VEPRO 7, I do a lot of premixing in VEPRO and just return to Cubase Winds,Brass,Percussion,Keys&Mallets,Choir,Strings,Synth... something like that. Some projects I might have a few more audio returns from vepro to cubase but I try to keep it down because of my limits. I really think 6 cores might be the minimuim these days for Cubase/vepro with samples,plugins, and synths becoming power hungry.


> And do you find you hit real time limits with your current setup?


Yes, sadly yes. I deal with it though until I can afford to upgrade.

Cheers!


----------



## springverb

new here. i just moved to win (Cubase 10 pro from logic). this really looks amazing. 
one ques : I see the files are available for Linux too. can I set up OSC using Raspberry Pi instead and use that to control my windows Cubase setup on the computer? Got a pi3 lying unused. thank you.


----------



## Manaberry

Hello @springverb, Welcome! 
On the paper, as soon as you send midi signals from the server to your DAW machine, you can control it from anywhere. Running the server on Linux, using a smartphone as a touch-screen, and having your daw on a W10 machine.


----------



## zig

Hello Mihkel @Mihkel Zilmers, I use your template to trigger expressionmap and it's very useful. Thank you for sharing this patch.
I work with Nuendo, I've been trying for a few days to create a new tab to manage the CCs of lontakt instruments.
No problem when the communication is just one direction (OSC to Nuendo).
But...I would like to have faders with bi-directional communication (I want OSC to show me the right state of the fader).
I tried adding a second send on my midi track but I have error messages in the OSC console and when two tracks play, both send information to OSC who goes crazy!

where's a trick? Is this possible with OSC, could someone guide me?

Zig


----------



## matthieuL

Hello,

Even if Lemur is back on Android, I'm trying OpenStageControl.

The installation and configuration was relatively easy, thanks to the tutorial at the beginning of this thread !
But I find it a nightmare to edit a project. Is there a tutorial on this ?
The official documentation is not helping, as it doesn't list possible values (for example, in https://openstagecontrol.ammd.net/docs/widgets-reference/#osc what can be the string address ?) and there is no practical example.
I loaded projects of others in order to understand things, but too much things seem mysterious for me.
I really miss a good documentation or tutorials for basic tasks.

For the moment, I only managed to send a note (via address = /note), but failed to send a cc (via address = /control if I understood well).

Thanks for your help, and sorry if I missed an obvious thing

Matthieu


----------



## matthieuL

Finally, I read, re-read, re-re-read pages 7 and 8 of this thread, and was able to make the Mihkel Zilmer project working. From there, I think I will be able to customize it. 
For others, don't give up !


----------



## Manaberry

Hello @matthieuL !
I was not able to respond lately sorry. 
I'm happy you successfully made osc work. If you have any questions, please let me know!


----------



## matthieuL

Thanks, it's nice !

A little question for the moment : I'm using O-S-C on Chrome on an Android tablet (Samsung A5 2016), whose resolution is 1920x1200.
But on it the UI appears as it was zoomed, it exceeds in the 2 dimensions (so I have to scroll horizontally and vertically), while all the UI fills well my desktop screen (1920x1080).
I also tried Opera (which uses Chromium too), but same thing.
I found this page : https://support.google.com/chrome/forum/AAAAP1KN0B0oYPjdI7TR8w but it concerns desktop Chrome...

I don't find a solution, would you have an idea ?


----------



## Manaberry

I've got the same problem. You have to find the proper size to fit everything on your tablet screen. No magic can be done here sadly.


----------



## matthieuL

Ok, many thanks !


----------



## Manaberry

Hi there.

A little update on the spreadsheet. I've added 5 new icons (base64). Those are meant to be used for Selector Start, Selector Left, Next Bar, Prev Bar, and the Curve tool.

Check the spreadsheet here

I will add more icons later. If you have some specific needs, please tell me


----------



## DMDComposer

Manaberry said:


> Hi there.
> 
> A little update on the spreadsheet. I've added 5 new icons (base64). Those are meant to be used for Selector Start, Selector Left, Next Bar, Prev Bar, and the Curve tool.
> 
> Check the spreadsheet here
> 
> I will add more icons later. If you have some specific needs, please tell me



Thanks Manaberry! I'm curious to know how are you going about creating these icons? Are you using photoshop or something and manually drawing in the icons to convert to base64?


----------



## Manaberry

DMDComposer said:


> Thanks Manaberry! I'm curious to know how are you going about creating these icons? Are you using photoshop or something and manually drawing in the icons to convert to base64?



I use photoshop and then I convert them to base64. All is original icons or copied from Cubase (redraw)


----------



## Mihkel Zilmer

zig said:


> Hello Mihkel @Mihkel Zilmers, I use your template to trigger expressionmap and it's very useful. Thank you for sharing this patch.
> I work with Nuendo, I've been trying for a few days to create a new tab to manage the CCs of lontakt instruments.
> No problem when the communication is just one direction (OSC to Nuendo).
> But...I would like to have faders with bi-directional communication (I want OSC to show me the right state of the fader).
> I tried adding a second send on my midi track but I have error messages in the OSC console and when two tracks play, both send information to OSC who goes crazy!
> 
> where's a trick? Is this possible with OSC, could someone guide me?
> 
> Zig



Sorry for the slow response, I somehow missed your post.

What you are asking for is technically possible, but when I last looked into this (couple of years ago, on Lemur), some workarounds were necessary. At the time I decided this feature isn't really important for me and did not pursue it any further.

I can not remember all of the details, but I believe that I concluded at the time that there are two options. I think one option was to map your CCs to QuickControls and then make new Generic Remote entries to send those QuickControl values on the selected track. And I think the other option was to use the automation lanes in the arrange window (that is, NOT in the MIDI editor - you can also add CC lanes under your MIDI / instrument track in the arranger).

Unfortunately that's about all that I can remember about bi-directional communication. I'm exceptionally busy at the moment, but if by some miracle I manage to find a few spare minutes I could look into it. Unless someone else already has it working?


----------



## Manaberry

Black Friday is there! Get Open Stage Control for Free!
Just kidding. It's already free.

Happy Thanksgiving!


----------



## Grizzlymv

Hey guys. So I've been tweaking quite a bit O-S-C in the past few weeks. I optimized it with the most useful commands, but didn't go too far in as I had some issues with Cubase stability and OSC running together. That optimized one seems to work fine. It is optimized for the size of a Microsoft Surface Pro 2 tablet. 

The twist I added this time is that by default, the screen is with the edit commands. 






But when you playback or record, a screen pops in over the rest and display the CC faders. As soon as you stop the playback, it goes away. There's also a CC Faders button to display/hide the screen manually. While the CC faders screen is on, you still can access to the track buttons (mute, record, solo, channel, VST) as well as the full transport, and the buttons for the various screens. 





Below you'll find the zip file containing the Generic Remote file for Cubase, as well as the O-S-C template and some info on how to set it up properly (I use 2 midi ports, one for the regular CCs (1, 11, 2, 14, etc) and one for the custom ones specified in the Generic remote. That way there's no conflicts. 

Have fun with it.


----------



## matthieuL

matthieuL said:


> Thanks, it's nice !
> 
> A little question for the moment : I'm using O-S-C on Chrome on an Android tablet (Samsung A5 2016), whose resolution is 1920x1200.
> But on it the UI appears as it was zoomed, it exceeds in the 2 dimensions (so I have to scroll horizontally and vertically), while all the UI fills well my desktop screen (1920x1080).
> I also tried Opera (which uses Chromium too), but same thing.
> I found this page : https://support.google.com/chrome/forum/AAAAP1KN0B0oYPjdI7TR8w but it concerns desktop Chrome...
> 
> I don't find a solution, would you have an idea ?



Found the solution to have a responsive UI : use percentages for Width, Height, Left and Top.
NB : The % are relative to the parent.


----------



## StephanS90

Hi People, 
i have a problem with open stage control. When i click on the start button i get only a blue window and nothing happens. No Browser window no error messages. Nothing. 
My System is Windows 10 64bit, Installed Python 3.8, installed rtmidi, installed Build Tools
Ive tried so many things but nothing worked yet. 
Did any of you have same problems or get it worked after some similar problems?
Thank you for your help.


----------



## Manaberry

StephanS90 said:


> Hi People,
> i have a problem with open stage control. When i click on the start button i get only a blue window and nothing happens. No Browser window no error messages. Nothing.
> My System is Windows 10 64bit, Installed Python 3.8, installed rtmidi, installed Build Tools
> Ive tried so many things but nothing worked yet.
> Did any of you have same problems or get it worked after some similar problems?
> Thank you for your help.



Hi Stephan,

Very weird bug indeed. Please, describe your problem on the project's Github. Jean-emmanuel (the developer) might have the answer to that problem.


----------



## StephanS90

Manaberry said:


> Hi Stephan,
> 
> Very weird bug indeed. Please, describe your problem on the project's Github. Jean-emmanuel (the developer) might have the answer to that problem.


Hi Manaberry, 
thank you for the response. I have posted it as an issue on the open stage control Github page.
I hope i get an response or help. Its very weird.


----------



## StephanS90

Manaberry said:


> Hi Stephan,
> 
> Very weird bug indeed. Please, describe your problem on the project's Github. Jean-emmanuel (the developer) might have the answer to that problem.


Hi, now i get it with the help of Jean  

but how do you manage now the Track selection and Recall function with articulations in Cubase with OSC? Did you use the Transformer or Quick Controls? How does a simple script look like in OSC for that? 

Thanks a lot for this massiv support!


----------



## Ivan Kovachev

Hi, I have a problem with open stage control. 
I set up O-S-C on a single PC with rtpMidi. I can open O-S-C in a browser on the PC and control Reaper. When I try to do the same with my phone I get connection time out. Both The PC and the phone are on the same network. The phone connects with WiFi and PC via Ethernet. Did any of you have same problems? Thanks for your help.


----------



## Manaberry

How you


Ivan Kovachev said:


> The phone connects with WiFi and PC via Ethernet.



Have you tried with another device but this time connected with Ethernet and not wifi? Sometimes wifi can be unstable. Be sure that the signal is the strongest.


----------



## Ivan Kovachev

Manaberry said:


> How you
> 
> 
> Have you tried with another device but this time connected with Ethernet and not wifi? Sometimes wifi can be unstable. Be sure that the signal is the strongest.



The PC and router are in the same space and the signal is strong. I don't have a device handy wright now but I will try tomorrow with a laptop. But I need to make it work with WiFi otherwise it defeats the purpose of the whole thing since my goal is to use it with a tablet.


----------



## Gefionsong

Hi Manaberry and everybody ! Thank you so much for all this information, its amazing. Thanks for sharing all this stuff !!
Im trying to set things up but got this error message. 

Does anyone know what I might done wrong?
Regards Andreas


----------



## Gefionsong

Hello again! 
After having error messages in OSC. I uninstalled OSC an now I’m trying to do things again, hopefully right this time. 
Im not sure of two things about downloading and install OSC:
1. Exactly what files do I have to download and install for win 10 (64bit)?

2. Where shall I extract those files?What folder shall I use for OSC?

Great-full for any help!


----------



## Manaberry

Hello @Gefionsong !

Thanks for being patient.

Well, the correct .exe for W10 (64bit) is *open-stage-control-0.48.7-win32-x64.zip*
There is no need to have a specific folder to install OSC. Just create an Open Stage Control folder in your regular Program Files directory and pin a shortcut to your taskbar or something. Just be sure to run OSC as an administrator (in the shortcut or program properties.)

I invite you to use Python 3.7. If you have the feeling that you did messed up with multiple installations, try to uninstall everything related to OSC tutorial, clean the registry (ccleaner for instance) and start again from scratch.

If you still have issues, I suggest you to open a thread on *OSC forums*.

I've not seen this error message before. I'm afraid that I can't help you more on this one.
Good luck!


----------



## Gefionsong

JoeHidden said:


> Hey @DMDComposer,
> 
> you're welcome
> 
> The XGDPA is for the VSL Dimension Libraries. You can choose what Tracks are visible in Cubase - X=None, G=Groups, D=Desks, P=Player, A=All
> 
> You need the two generics remotes configured like this:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Code:
> 
> 
> --midi oscTraVisIn:3,-1 oscTraVisOut:-1,2 oscTraCtrlIn:5,-1 oscTraCtrlOut:-1,4 oscInstIn:9,-1 oscInstOut:-1,8 oscRecallIn:7,-1 oscRecallOut:-1,6
> 
> 
> The oscInstr is the third port, which should be included in All Midi. All Messages that needs to reach the instrument, vep, vst are send through this port.
> 
> The reason for individual In and Out loopback ports is to prevent feedback loops. So all ports are named from the osc perspective. That means, that the oscOut is an cubaseIn. And only the oscInstOut should and oscTraCtrlIn be in 'All Midi'. oscTraCtrlIn is needed for the fact that cubase needs to see a message to transform it. A little weird, but that's how it is. In Cubase it should look like this:
> 
> 
> 
> 
> 
> 
> In the debug log from Osc you should see the two messages after switching the track:
> 
> 
> 
> Code:
> 
> 
> MIDI received: CONTROL_CHANGE: channel=1, cc=126, value=127 From: midi:oscTraCtrlIn
> ...
> MIDI received: CONTROL_CHANGE: channel=1, cc=117, value=4 From: midi:oscRecallIn
> 
> 
> The first message is the track change message from Cubase before the transformation on the individual track. The second message cc117 is the track change to value 4 message out of the midi transform. That leads us to this track definition from the custom module:
> 
> 
> Code:
> 
> 
> 4: { 'trackname': 'VSL - Synchron Strings - Cellos', 'trackarticulations': [] },
> 
> 
> The visibility control is a bit more complex then normal, since the "all, none and default" button change a lot of the other buttons.
> 
> BR Joe





JoeHidden said:


> Hey @DMDComposer,
> 
> you're welcome
> 
> The XGDPA is for the VSL Dimension Libraries. You can choose what Tracks are visible in Cubase - X=None, G=Groups, D=Desks, P=Player, A=All
> 
> You need the two generics remotes configured like this:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Code:
> 
> 
> --midi oscTraVisIn:3,-1 oscTraVisOut:-1,2 oscTraCtrlIn:5,-1 oscTraCtrlOut:-1,4 oscInstIn:9,-1 oscInstOut:-1,8 oscRecallIn:7,-1 oscRecallOut:-1,6
> 
> 
> The oscInstr is the third port, which should be included in All Midi. All Messages that needs to reach the instrument, vep, vst are send through this port.
> 
> The reason for individual In and Out loopback ports is to prevent feedback loops. So all ports are named from the osc perspective. That means, that the oscOut is an cubaseIn. And only the oscInstOut should and oscTraCtrlIn be in 'All Midi'. oscTraCtrlIn is needed for the fact that cubase needs to see a message to transform it. A little weird, but that's how it is. In Cubase it should look like this:
> 
> 
> 
> 
> 
> 
> In the debug log from Osc you should see the two messages after switching the track:
> 
> 
> 
> Code:
> 
> 
> MIDI received: CONTROL_CHANGE: channel=1, cc=126, value=127 From: midi:oscTraCtrlIn
> ...
> MIDI received: CONTROL_CHANGE: channel=1, cc=117, value=4 From: midi:oscRecallIn
> 
> 
> The first message is the track change message from Cubase before the transformation on the individual track. The second message cc117 is the track change to value 4 message out of the midi transform. That leads us to this track definition from the custom module:
> 
> 
> Code:
> 
> 
> 4: { 'trackname': 'VSL - Synchron Strings - Cellos', 'trackarticulations': [] },
> 
> 
> The visibility control is a bit more complex then normal, since the "all, none and default" button change a lot of the other buttons.
> 
> BR Joe


Hi Joe! Brilliant work you´ve done. Im so greatful to guys like you. You are so talented and also extremely generous to help out, and share your stuff. Thanks for that!
I have tried to set your template up and Im feeling im close to it but something is missing.
I didnt quit understand this:

3. Change the variables "oscHost" and "oscPort" and the MidiOut Port "oscTraCtrlOut" in TemplateControl.js (Custom Module) if nessecary

Would you mind explain this to me? Im am not used to programming at all, sorry. Please be "over explicit" if you dont mind.

I attatched some settings (and error-code) if this say something to you?

I don´t take your help for granted but if you do have the time to answer I would really appreciate it.

Best
Andreas

--EDIT
Hi Again.
I think I manage to sort it out myself Joe. I did miss some "-", got rid of it and it worked!
Thanks again for sharing this. Really means a lot!
No I will try to set up my own libraries. Pandora Met Ark 1 , BBC etc.
Can´t wait to get this up and running with VEP and a touch-screen!
Btw. What size do you recommend?
Also how shall I load the "Cubase Example Tracks" File? (Import?)


----------



## Gefionsong

Manaberry said:


> Hello @Gefionsong !
> 
> Thanks for being patient.
> 
> Well, the correct .exe for W10 (64bit) is *open-stage-control-0.48.7-win32-x64.zip*
> There is no need to have a specific folder to install OSC. Just create an Open Stage Control folder in your regular Program Files directory and pin a shortcut to your taskbar or something. Just be sure to run OSC as an administrator (in the shortcut or program properties.)
> 
> I invite you to use Python 3.7. If you have the feeling that you did messed up with multiple installations, try to uninstall everything related to OSC tutorial, clean the registry (ccleaner for instance) and start again from scratch.
> 
> If you still have issues, I suggest you to open a thread on *OSC forums*.
> 
> I've not seen this error message before. I'm afraid that I can't help you more on this one.
> Good luck!


Thank you! Now i think I got hang of it!
Cheers!


----------



## Ben Catman

Hi and thank you so much for this tutorial. I managed to install it, und it works with my old but beloved Cubase 5. Is there any documentation where i can (as a noob) get informations on how exactly i can connect my cubase controls with osc? E.g. - i managed to create a button as descrobed on your tut - works great ! But what if i want to create a play /record / stop button and so on? Which commands do i have to use? Sorry, as mentioned above, i am new to this but absolutely willing to inform myself. 

Great community - looking forward to helpong others with my knowledge as well!


----------



## Manaberry

Hello @Ben Catman , Welcome aboard.
You have to create your own controller in "Device Setup > Generic Remote".
You just have to assign an action to each of your controls created in OSC.
Here is a video from Cubase 5 (bad quality but the same version as you.)

Good luck!


----------



## StephanS90

Hi Manaberry, 
thanks for your awesome support  

Can you explaine me how i can connect OSC to Bome Midi? I have tried it with loopMidi and the virtual midi port from Bome but it doesn't receive any midi in or something. How do you get it worked with Dorico? Thanks and Cheers Stephan


----------



## Grizzlymv

Grizzlymv said:


> Below you'll find the zip file containing the Generic Remote file for Cubase, as well as the O-S-C template and some info on how to set it up properly (I use 2 midi ports, one for the regular CCs (1, 11, 2, 14, etc) and one for the custom ones specified in the Generic remote. That way there's no conflicts.
> 
> Have fun with it.



I just realized that there's still a bug in the Generic Remote template I provided. You'll need to delete 3 entries that are left over of the previous design:

Sel Track Volume (channel 3 / 102)
Sel Track Meter (channel 3 / 119)
Sel Track Pan (channel 3 / 121)

I got rid of them in the graphic design, but forgot to remove them from the Generic Remote. Got rid of them as Cubase doesn't seem to handle them properly. When you move from one track to another, it would lower the volume randomly, and mess up with the panning of your track. Quite annoying to say the least.  

I'll upload the updated version as I get home tonight. 

Cheers.


----------



## Gefionsong

Big big thank you!! 
-Yes, I also noticed there was some bug you mentioned. I´ll do as you suggest. Looking forward to see your updated template.
Once again - Thank you!


----------



## Grizzlymv

As promised. here's the revised version. 

There's some minor changes in the UI since I started to work quite a lot with Track Presets, I wanted to have access to the media bay more easily, and display/hide the left/right bars more quickly. Rest is the same. bug free. Enjoy


----------



## Gefionsong

Thank you so increadible much! This mean so much to me. You would not guess!


----------



## Gefionsong

Hi Grizzlymv! 
I have a stupid question. I wonder where did you put your Articulation, buttons? idnt you have those in your template as well? I cant find them. Or did I just dream this. Think it was Ciematic studio in my dream....


----------



## Grizzlymv

Hi Gefionsong. I used to have that in a previous version of the template. Got rid of them since I switched from the expression maps to a 1 articulation per track. It wasn't an automatic screen though. It was a manual process. So you did not hallucinated. But it's also no longer in my latest version unfortunately.


----------



## Manaberry

Nope. OSC is love!


----------



## Grizzlymv

kaplain said:


> Did you try CubaZen, anyone?
> 
> 
> 
> 
> 
> 
> 
> 
> 
> ZenDAW
> 
> 
> The Best Shortcut to Cubase/Nuendo’. Control your Steinberg DAW, with over 300 key command functions via any touchscreen remote, for Windows platforms.
> 
> 
> 
> 
> www.zendaw.com


Nope. first time I hear about it. Did have a quick look, and it seems interesting espcially with the fact it cover a lot of the Cubase shortcuts and you get it all, out of the box, for a small fee (70$). But I haven't seen anything else then button in the presentation. the UI seems to be locked down, and it doesn't seem to support faders/sliders or other type of controls than buttons. 

In OSC, I love the fact I can add as many faders as I need to control my CCs (ModWheel, Expression, PitchBend, Breath, etc.). Also the fact I can personalize the screen to fit what I use/need and get rid of what I don't/barely use keeps the UI clean. Personally, I just feel that OSC is more flexible and offer more, especially for the price (0$). 

I have to admit that OSC is probably less user friendly to install/make it works than a paid solution that just works out of the box like CubaZen seems to be. I guess it all come down to what's best for you. And since we each have different workflows, it's good to have choice. To each their own.


----------



## bradovic

Thank you very much for this great software, feels very polished.
And thank you Grizzlymv, your template and tutorial are awesome!


----------



## FantomXR

Hey people,

this thread is really really helpful. The tutorial is great and it worked immediately. 
Anyway: I struggle with midi feedback loops. I set up a really simple layout with a fader that sends CC7 over a virtual midi port. I use the software "Cantabile" and assign this command to master volume. This works great.
Now I want to have it bidirectional. So I tell Cantabile to send out the value of the master volume out to the same MIDI port and back to OSC. This obviously creates a midi loop. 

How to prevent that? I read through the thread but the solutions some people come up with aren't clear to me. Can someone help me?

Can I somehow tell the fader to listen and send on two different ports?

Thanks,
Chris


----------



## Manaberry

Hello @FantomXR

I'm very happy that you are enjoying this software and this tutorial.

Regarding your project, you can set multiple midi ports in OSC. But first, let's understand the values.

-- midi MIDIPORTNAME: 0,1

As you can see, there is two values. The first one (0) is the incoming midi port, the second one (1) is the outgoing midi port. You can create another port with value 1,2.

-- midi MIDIPORTNAME: 0,1 MIDIPORTNAME2: 1,2

By doing so, you can allow more ports to be used in the same instance of OSC. You can split the data on those two ports now. It should be easier to handle data to avoid loops.

I'm explaining some data logic with XY pad and faders here. I hope it will help!


----------



## Manaberry




----------



## FantomXR

Manaberry said:


> Hello @FantomXR
> 
> I'm very happy that you are enjoying this software and this tutorial.
> 
> Regarding your project, you can set multiple midi ports in OSC. But first, let's understand the values.
> 
> -- midi MIDIPORTNAME: 0,1
> 
> As you can see, there is two values. The first one (0) is the incoming midi port, the second one (1) is the outgoing midi port. You can create another port with value 1,2.
> 
> -- midi MIDIPORTNAME: 0,1 MIDIPORTNAME2: 1,2
> 
> By doing so, you can allow more ports to be used in the same instance of OSC. You can split the data on those two ports now. It should be easier to handle data to avoid loops.
> 
> I'm explaining some data logic with XY pad and faders here. I hope it will help!



Excuse my late reply. I now checked and something really seems to be strange. I set "--midi Control:0,1" and it worked great. Now I have removed that command and the fader still sends commands to that MIDI ports. How come? I of course saved everything a few times. Is there any kind of cache? 

And BTW: How do I change the color of an element? I have a meter which I address via midi and I don't want it to be blue. I tried "--custom-color: red" and "--custom-color FF0000" and "--custom-color #FF0000". But that's not working. I can't find informations about the correct syntax. 

Thanks,
Chris


----------



## Manaberry

Hi there!

Open Stage Control 1.0 is currently in alpha state. Jean-Emmanuel needs some feedback and alpha testing. Feel free to install it and give your feedback and result of your testing HERE.







That being said, remember that it is an alpha. This version must not be used for production. 
Feel free to share about it here also. I will take care to take important information to Jean-Emmanuel.


---




FantomXR said:


> Excuse my late reply. I now checked and something really seems to be strange. I set "--midi Control:0,1" and it worked great. Now I have removed that command and the fader still sends commands to that MIDI ports. How come? I of course saved everything a few times. Is there any kind of cache?
> 
> And BTW: How do I change the color of an element? I have a meter which I address via midi and I don't want it to be blue. I tried "--custom-color: red" and "--custom-color FF0000" and "--custom-color #FF0000". But that's not working. I can't find informations about the correct syntax.
> 
> Thanks,
> Chris



Did you change those values in the Default.scss file?


----------



## infinitecool

Used Grizzlymv example and created a Junkie XL inspired interface but with rounded buttons to make them look nicer.






Some buttons have no function yet, but you can change them to whatever you want.

LoopMidi device name: RemoteTouchScreen, but can be changed in the files with a texteditor.


----------



## Grizzlymv

infinitecool said:


> Used Grizzlymv example and created a Junkie XL inspired interface but with rounded buttons to make them look nicer.
> 
> 
> 
> 
> 
> 
> Some buttons have no function yet, but you can change them to whatever you want.
> 
> LoopMidi device name: RemoteTouchScreen, but can be changed in the files with a texteditor.


Like it! Nice work there!


----------



## infinitecool

Added more working buttons and improved some buttons by changing them from toggle to tap, included the logical presets for cubase so the velocity and note length buttons work, you need to place the cubase logical presets folder "Open Stage Control" in:

Mac: /user/Library/Preferences/Cubase X/
Win: C:\Users\your_user_name\AppData\Roaming\Steinberg\Cubase 10.X.X\Presets\Logical Edit

Enjoy!


----------



## infinitecool

More buttons and more logical presets and mixer window with 18 faders and workspaces buttons.


----------



## infinitecool

Some fixes and update to reflect OSC 1.0.alpha11+ css changes


----------



## Manaberry

Great work @infinitecool ! Thanks for sharing


----------



## infinitecool

If anybody knows howto change the BPM in Cubase with midi messages or with logical editor or macros through OSC please let me know, so I can make the red BPM buttons work


----------



## infinitecool

Added: add sampler track button and some mixer improvement and some small changes.


----------



## infinitecool

Added 18 more mixer channels, 36 total now and default value of 100 for mixer faders and added OK button to arrow/navigation buttons same as Confirm and added Save button to left menu and moved windows sizing buttons to upper right.


----------



## infinitecool

Forgot to mention this, I have a laptop/tablet with touchscreen, because of Windows Tablet mode Chrome and other browsers resize the browser screen to 1280x720 although the desktop is 1920x1080, that's why my project is created for a 1280x720 screen size, but you can resize this with an OpenStageControl command to 1920x1080 and even larger or smaller, by adding "/?zoom=1.5" after the url in your browser, so your url would look something like this: "192.168.1.10:7075/?zoom=1.5"


----------



## infinitecool

Added 4 more buttons to zoom vertically and to toggle expand folders on tracks. Also mixer improved, when you slide the mixer faders in Cubase they now also move in OpenStageControl. The green folder button expand/toggles al track folders, the orange folder button expands/toggles a track folder with the word midi in it, to expand toggle all midi tracks when you put them in a track folder. It's basically some default key editor functions added with buttons.


----------



## Manaberry

Alright, I've migrated from 0.49 to 1.0 beta and it works splendidly well!
I'm amazed at how smooth it respond. It's like day and night.

I will update the tutorial once the regular 1.0 is released.

@infinitecool You should definitely try the circular menu, as it will save a lot of room for other buttons! Herewith the note length option.


----------



## Judoludo

Hello there, first I'd like to thank everyone involved in the development of this wonderful software.

Then I'd like to ask: from what I understood (correct me if I'm wrong), it needs Chrome to work. Is it possible to use it on a tablet (because it's the only touchscreen available to me - other to my phone), either Android or iOS? Thank you and sorry if the question is already been asked.


----------



## Manaberry

Judoludo said:


> Hello there, first I'd like to thank everyone involved in the development of this wonderful software.
> 
> Then I'd like to ask: from what I understood (correct me if I'm wrong), it needs Chrome to work. Is it possible to use it on a tablet (because it's the only touchscreen available to me - other to my phone), either Android or iOS? Thank you and sorry if the question is already been asked.



Hi there! Glad you like the software.

Here is a quote from the doc regarding the client:



> Firefox: version 75
> Chromium / Chrome: version 60
> iOS devices must be of version 10.3 or higher.




So you should be good


----------



## Judoludo

Manaberry said:


> Hi there! Glad you like the software.
> 
> Here is a quote from the doc regarding the client:
> 
> 
> 
> 
> So you should be good


thank you for the fast answer! also, I'd like to share my experience on installing it:

in the CMD (Windows 10), I had to add "Python38/Scripts" to the cd command, because of the installation path (that I left untouched), then from there launching rtmidi command. It took some time for me to understand that, but then I managed to install everything. Thank you!


----------



## Sub3OneDay

I’ve tried loads of different touch screen solutions over time and this is the most promising of all.

One thing I’ve not yet managed to do however is use one button to control a variable of another.

For example - I have a button that sends a midi note on channel 1.

I want to be able to press another button, and send the same note on a different channel.

Almost like a shift key on a qwerty keyboard.
I see it working in a couple of ways - 

if statement in the button


Button 1 “script”

if button 2 val = on then send on chan 2
Else send on Chan 1


Or alternatively maybe button 1 collects a value for the channel to send on from another button -

So if I had a set of radio type buttons saying “filter library”, “hide library”, “Solo Library” etc which I can press and then another set of library buttons which say “ Albion 1” etc.

So if “filter” was pressed it sends a note on channel 1,if hide is pressed it sends the note on ch2, ch3 for solo etc etc.


Really not sure if this can be achieved?!


----------



## Manaberry

Hi @Sub3OneDay

On the paper, it should work. Pretty much everything in Open Stage Control is "dynamic" so you can gather the value of every widget statement. You just have to find an efficient way to proceed.


On my end, I noticed we can easily install and use the Standard Music Font Layout from Dorico. That's almost 2600 usable glyphs.

I will make a proper video tutorial for you guys.


----------



## Sub3OneDay

Manaberry said:


> Hi @Sub3OneDay
> 
> On the paper, it should work. Pretty much everything in Open Stage Control is "dynamic" so you can gather the value of every widget statement. You just have to find an efficient way to proceed.
> 
> 
> On my end, I noticed we can easily install and use the Standard Music Font Layout from Dorico. That's almost 2600 usable glyphs.
> 
> I will make a proper video tutorial for you guys.


That’s great - looking forward to the tutorial...

With respect to gathering info from a widget to drive another widget - I wouldbt know where to start so any assistance would be appreciated!


----------



## Manaberry

Sub3OneDay said:


> That’s great - looking forward to the tutorial...
> 
> With respect to gathering info from a widget to drive another widget - I wouldbt know where to start so any assistance would be appreciated!




You can see an example of shared values between two widgets here.
It should be enough accessible to understand the concept and launch you on the right path


----------



## Sub3OneDay

Manaberry said:


> You can see an example of shared values between two widgets here.
> It should be enough accessible to understand the concept and launch you on the right path


Thanks @Manaberry - passing/sharing the values I’ve got nailed - it’s the if statement that I’m struggling with:

if widget 2 = x send on Chan x from widget 1, else send on chan1


----------



## Melph

Hi all - Ive spent all day reading, and re-reading this thread and tonight installed all the software no problem. I imported GrizzlyMV's template no issue but for some reason I get a parse error if I try to import infinatecool's templates - dont know why?

Just a thank you to everyone who has put so much work into this!!

Anyway the biggest issue I have run into is the following:

I am using a single PC running Cubase 10.5 pro and have OSC running on the same PC - I use a second touch screen monitor for the OSC template. Works like a charm! BUT, off course, when I touch the touchscreen, it takes focus off the Cubase window.

I also use a shortcut keyboard but now I would have to use the mouse to click back on Cubase for the keyboard to work again. Therefore, after each press on the touch monitor, if I wish to use the keyboard i have to grab the mouse to get cubase refocused.

Is there any work around that can keep Cubase focused? It almost needs a program within each press of the touchscreen template to put Cubase window back in focus - can this be done?

Looking forward to any suggestions

Thanks


----------



## Manaberry

Melph said:


> Hi all - Ive spent all day reading, and re-reading this thread and tonight installed all the software no problem. I imported GrizzlyMV's template no issue but for some reason I get a parse error if I try to import infinatecool's templates - dont know why?
> 
> Just a thank you to everyone who has put so much work into this!!
> 
> Anyway the biggest issue I have run into is the following:
> 
> I am using a single PC running Cubase 10.5 pro and have OSC running on the same PC - I use a second touch screen monitor for the OSC template. Works like a charm! BUT, off course, when I touch the touchscreen, it takes focus off the Cubase window.
> 
> I also use a shortcut keyboard but now I would have to use the mouse to click back on Cubase for the keyboard to work again. Therefore, after each press on the touch monitor, if I wish to use the keyboard i have to grab the mouse to get cubase refocused.
> 
> Is there any work around that can keep Cubase focused? It almost needs a program within each press of the touchscreen template to put Cubase window back in focus - can this be done?
> 
> Looking forward to any suggestions
> 
> Thanks




Hi there!
For the parse error, be sure to have the same target (midi:midiportname) everywhere (widget and OSC settings).

For the focus issue, I have no idea. The best way would be to run the touchscreen with another device. But try to create a post on the official OSC website. Maybe Jean-Emmanuel has more solutions to offer than me.


----------



## Melph

Many thanks for the reply - yes I just posted on there as well and will await a reply about the touchscreen losing focus (I think this is going to be a windows issue) although I previosuly used a program (written in python by the dev) that could call window focus - so it is possible, but maybe not for this application.

Once again, a big thank you for the time and effort you and others have put into this project


----------



## Dewdman42

I spent a few hours last night exploring O-S-C. Very interesting tool. Its unfortunate that it does not handle key commands or else I think this would be used a lot more. I am keeping it under consideration mainly because it uses javascript which I have become a fan and might see myself using, though personally I am not sure I want to get up to my eyeballs in complex touchscreen programming.

But anyway, this looks basically like an alternative to Lemur, more than anything...except that it runs on any device with a webbrowser, and its free.. Because of the CSS I think probably we can potentially make nicer looking panels then Lemur too. Not that I know that much about Lemur yet.


----------



## Manaberry

Dewdman42 said:


> I spent a few hours last night exploring O-S-C. Very interesting tool. Its unfortunate that it does not handle key commands or else I think this would be used a lot more. I am keeping it under consideration mainly because it uses javascript which I have become a fan and might see myself using, though personally I am not sure I want to get up to my eyeballs in complex touchscreen programming.
> 
> But anyway, this looks basically like an alternative to Lemur, more than anything...except that it runs on any device with a webbrowser, and its free.. Because of the CSS I think probably we can potentially make nicer looking panels then Lemur too. Not that I know that much about Lemur yet.




Key commands on mac are like shortcuts or commands on Cubase?
I use Bome MIDI translator sometimes to translate any midi signal to keystrokes. Maybe a built-in feature would be interesting indeed. You should suggest it to the dev 

On the CSS side, it's wonderful. I've been creating some animations for my stop/record/play widgets. It's fancy and not that useful but it feels unique and looks gorgeous.


----------



## Dewdman42

There have been many requests for this, he has made it clear he cannot be convinced to add key command capability. His view is that it should focus on OSC and midi output was a rare exception but he will not make more exceptions for key commands.









Keyboard commands or keystrokes


I’m afraid the answer is never, o-s-c is just an osc controller : the midi extension is the only exception to this and I’m not willing to make another one. This software is built with modularity in mind, not just at it’s own scale but at the system’s : having one software per job, that does it...




openstagecontrol.discourse.group





The ability to handle keystrokes is what would make it work for something like Dorico, for example, which has no OSC and basically you need to use key commands to drive every aspect of it, or may other programs. 

At some point I will try to use O-S-C together with Osculator, but I dread the extra complexity. At some point its probably better to just use Metagrid and live with the limitations rather then the extra complexity of trying to wire several different OSC mapping programs together.


----------



## Manaberry

Dewdman42 said:


> There have been many requests for this, he has made it clear he cannot be convinced to add key command capability. His view is that it should focus on OSC and midi output was a rare exception but he will not make more exceptions for key commands.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Keyboard commands or keystrokes
> 
> 
> I’m afraid the answer is never, o-s-c is just an osc controller : the midi extension is the only exception to this and I’m not willing to make another one. This software is built with modularity in mind, not just at it’s own scale but at the system’s : having one software per job, that does it...
> 
> 
> 
> 
> openstagecontrol.discourse.group
> 
> 
> 
> 
> 
> The ability to handle keystrokes is what would make it work for something like Dorico, for example, which has no OSC and basically you need to use key commands to drive every aspect of it, or may other programs.
> 
> At some point I will try to use O-S-C together with Osculator, but I dread the extra complexity. At some point its probably better to just use Metagrid and live with the limitations rather then the extra complexity of trying to wire several different OSC mapping programs together.




Oh. Then nevermind.

I've been using Dorico with O-S-C and Bome MIDI Translator for over a year now and it works well.
I've shifted a lot of controls to MIDI in Dorico's option.
Also, Dorico's team understands the limitation of using only one MIDI channel, and they might allow more channels to be used for further mapping.



It's still not perfect of course, and everyone has their own workaround. But we are on the right path!


----------



## Dewdman42

Using direct MIDI might be a more simple work around for Dorico and O-S-C no doubt.. Is it really limited to only 127 midi directed key commands? Anyway I will investigate that too.


----------



## Manaberry

For now, yep. We are limited to 127 mapped key commands. Dorico doesn't detect the channel (behaves as omni) so you can't split key commands across multiple the 16 channels. But it's on their roadmap so, Soon ™!


----------



## Dewdman42

can't you use different cc# or something?


----------



## Manaberry

Just the CC, not even the value using that CC.


----------



## Dewdman42

hmm, well ok. Ideally I would think Steinberg will add full on OSC support to Dorico, which would be really ideal..ideally they'd do it in a way to be able to select specific articulations, etc.. but that is probably a big can of worms low on their priority list.

Seems like using OSCulator on mac or Bome on windows to translate OSC to key commands is the way to go for now.


----------



## Melph

SO for now, I have set up a second PC which is controlling my Touchscreen and OSC, so the issue of windows focus has gone.....but uses two PC's!! Nevermind.

@Grizzlymv - I love your template, but I cannot get CC faders to work in real time. If I select one and grab it (pull it down) - it does not move. If I then come out of the CC Faders screen then go back in, the fader is at the level I pulled it down to. I followed your set up instructions for the template to a tee, so not sure what I might be doing wrong. Any help would bee appreciated

EDIT: if I slide the fader on my second computer which is linked via a network to my Cubase, the fault is as above I.E the slider doesnt move. But if I have open on my master PC the OSC template, I can see the sliders moving.


----------



## Melph

Jean-Emmanuel has contacted me and advised the following ...

"I’ve added a new function to the script widget (and the widgets’ script property): calling unfocus() will tell the OS to give the focus to the previously focused window. It will only work with the built-in client, not with external browsers."


----------



## Sub3OneDay

Dewdman42 said:


> I spent a few hours last night exploring O-S-C. Very interesting tool. Its unfortunate that it does not handle key commands or else I think this would be used a lot more. I am keeping it under consideration mainly because it uses javascript which I have become a fan and might see myself using, though personally I am not sure I want to get up to my eyeballs in complex touchscreen programming.
> 
> But anyway, this looks basically like an alternative to Lemur, more than anything...except that it runs on any device with a webbrowser, and its free.. Because of the CSS I think probably we can potentially make nicer looking panels then Lemur too. Not that I know that much about Lemur yet.



I've moved over to OSC from Lemur and trying to recreate and advance what I had spent a few years off and on building! SO i take your point about being eyeballs deep... It seems way more powerful than lemur but it's a steep learning curve.


----------



## Sub3OneDay

Melph said:


> Anyway the biggest issue I have run into is the following:
> 
> I am using a single PC running Cubase 10.5 pro and have OSC running on the same PC - I use a second touch screen monitor for the OSC template. Works like a charm! BUT, off course, when I touch the touchscreen, it takes focus off the Cubase window.
> 
> Thanks



I picked myself up a very cheep micropc from ebay (£40) that doesn't do much more than run OSC. Sits in my rack and is connected to my touch screen. 

Problem solved. 

I have also put an hdmi switch between my DAW and the microPC to the touchscreen, so I can if I wish switch over and have cubase running on my touch screen - which helps with my workflow occasionally.


----------



## Melph

Thats a good idea actually - how does the HDMI switch work exactly (sorry, iv never used one)


----------



## Manaberry

Melph said:


> Jean-Emmanuel has contacted me and advised the following ...
> 
> "I’ve added a new function to the script widget (and the widgets’ script property): calling unfocus() will tell the OS to give the focus to the previously focused window. It will only work with the built-in client, not with external browsers."


I swear he does code faster than Han Solo travels the galaxy with the Falcon.


----------



## Sub3OneDay

Melph said:


> Thats a good idea actually - how does the HDMI switch work exactly (sorry, iv never used one)











It’s just a little box that you plug all your devices into and then a single cable to the monitor. You switch it with the remote.

it’s not ideal as you lose usb connection so therefore touch screen capabilities reduced on one machine, and if you’re not careful it plays havoc with your windows layouts a bit but I still find it useful to do on stead of Remote Desktop connection as I can also plug in my “day-job” laptop as well, and then can switch between the 3 devices quickly.


----------



## Melph

I wanted to share a screen grab of my template so far - this is adapted from @Grizzlymv 's excellent template he posted on here. I have rearranged things to sort my workflow plus added a few extra sections like fixed velocites, fixed lengths as well as utilising some useful visibility agents that are present in Cubase.

My touchscreen is 24" therefore I have a reasonable amount of real estate to play with -there is space to grow the template but for now, everything is where it should be.

EDIT: New revised template attached


----------



## Sub3OneDay

Manaberry said:


> @Mihkel Zilmer I tried a sample of your code with my method (I do not disable any tracks in my case).
> Works very nicely! I improved the json to add section name, color, background color, and 3 categories of articulations. I like having specific articulations in a specific area.
> 
> It does look like this:
> 
> 
> 
> Very cool!




So I';ve been experimenting with this over the last few days and have it all working nicely on OSC v1.0.0-beta7

And working now to integrate this into my template (i used to use the lemur techniques also on my iPad).

One thing that I am curious though is that I have my Cubase template split into Midi tracks that feed VEPro, but also instrument tracks. 

Have you managed to get this method functioning for expression maps etc on instrument tracks, as there is no MIDI send on these?...


----------



## infinitecool

Manaberry said:


> Alright, I've migrated from 0.49 to 1.0 beta and it works splendidly well!
> I'm amazed at how smooth it respond. It's like day and night.
> 
> I will update the tutorial once the regular 1.0 is released.
> 
> @infinitecool You should definitely try the circular menu, as it will save a lot of room for other buttons! Herewith the note length option.


I can't find this option the "circular menu" lol, probably overlooking it


----------



## zig

Hello,
I'm trying to control the visibility of my tracks in cubase with push buttons and I need help to understand why it doesn't work. I know it's very basic but I'm a beginner.
I'm declaring program changes on the push buttons in OSC and replaying them in the generic remote. Only the first one works... I'm using version 0.49.12 with mac.
Can someone help me?
OSC is a great program but for people like me who are not developers it's still a bit difficult. It would be nice to have more examples to understand how it works (your template are welcome @*Manaberry @Mihkel Zilmer*  ). There were some in the previous site but they've disappeared since the beta!


----------



## Sub3OneDay

zig said:


> Hello,
> I'm trying to control the visibility of my tracks in cubase with push buttons and I need help to understand why it doesn't work. I know it's very basic but I'm a beginner.
> I'm declaring program changes on the push buttons in OSC and replaying them in the generic remote. Only the first one works... I'm using version 0.49.12 with mac.
> Can someone help me?
> OSC is a great program but for people like me who are not developers it's still a bit difficult. It would be nice to have more examples to understand how it works (your template are welcome @*Manaberry @Mihkel Zilmer*  ). There were some in the previous site but they've disappeared since the beta!



Check that you are sending the correct address into the cubase logical editor - Cubase logical editor starts counting at 1, where as OSC and other controllers start counting at 0.


----------



## Sub3OneDay

zig said:


> Hello,
> I'm trying to control the visibility of my tracks in cubase with push buttons and I need help to understand why it doesn't work. I know it's very basic but I'm a beginner.
> I'm declaring program changes on the push buttons in OSC and replaying them in the generic remote. Only the first one works... I'm using version 0.49.12 with mac.
> Can someone help me?
> OSC is a great program but for people like me who are not developers it's still a bit difficult. It would be nice to have more examples to understand how it works (your template are welcome @*Manaberry @Mihkel Zilmer*  ). There were some in the previous site but they've disappeared since the beta!


Agreed - it’s really useful to see what others have done and use them as a starting point.

If I get the time I’ll post mine up tomorrow - just trying to amend and add a few functions so that it works on the latest beta.


----------



## Hisham

Manaberry said:


> *Step 3: Configuration/Initialization*​
> You have downloaded Open Stage Control and you just extracted all the files. Great! Now, once you launched the soft, you should see this:
> 
> 
> 
> 
> 
> Well, I already see you coming. There is an update. We will take care of this one later (...)
> 
> 
> So many fields, so many options. For now only two of them are mandatory for this tutorial: *send *and *midi*.
> 
> For additional informations, please check the https://osc.ammd.net/ (official documentation.)
> 
> 
> *Send *is the IP of the machine that MIDI messages will be send to. In our case, we want to send MIDI msgs to *MC*. Check the *MC *IP in the *Network Connection Details* _(Control Panel\Network and Internet\Network Connections)._
> 
> xxx.xxx.xxx.xxx:8000​
> 
> In the *midi *field, we tell Open Stage Control to use our virtual midi. The command looks like that:
> 
> 
> --midi *MIDIPORTNAME*:*INPUTPORT*,*OUTPUTPORT*​
> 
> *!* If you remember well the midi session on *SC*: it will be only *VIControl *for the single computer solution.
> 
> 
> --midi *toVIControl*:*INPUTPORT*,*OUTPUTPORT*​
> 
> 
> We don’t know the input/output port number for *toVIControl*. Don't panic, there is a simple button for that! First, start Open Stage Control by pressing the START button.
> 
> Then *Right-click* anywhere on the Open Stage Control window, and a context menu should appear. Choose *Midi > List Devices*.
> 
> 
> Some information should appear in the console like below:
> 
> 
> 
> 
> 
> 
> Perfect! Input port 6, output port 7. We can complete the command line:
> 
> --midi toVIControl:6,7​
> We have all we need to start the server. You should have both MC ip and midi command line set.
> 
> 
> To change settings we need to stop the server. No need to close the window to do so. To relaunch, Right click > App > Relaunch.​
> 
> Congrats! Open Stage Control is now launched on *SC*. Now we can spend the rest of our lives making a nice GUI for our DAW and libraries!
> 
> 
> 
> 
> You can now access Open Stage Control with a compatible web browser (chromium based) anywhere on the network just by using the IP of the machine running the server (*SC*) and the port 8080 (by default).
> 
> xxx.xxx.xxx.xxx:8080
> 
> 
> *Step 4: a GUI to rule them all*
> ​You pressed new, so you should see something like this. Welcome to Open Stage Control. Now, I regret to tell you that you will spend a lot of time on this editor view... Because there are so many things to do!
> 
> 
> 
> 
> ​
> Before I let you go do some experimentations, there is one last thing you should know. To send midi message correctly, you have to tell your buttons what to do.
> 
> 
> Let’s create a _push _button. *Right-click* on the grid *> Add widget > Buttons > Push*.
> 
> Click on the button freshly created. On the right panel “OPEN STAGE CONTROL”, there is a couple of fields. Scroll down to the “*OSC*” category.
> 
> A push button might be configured as follows in order to send a MIDI note whose velocity is defined by the button's on/off value: (from official documentation)
> 
> address: /note
> preArgs: [1, 60] (for MIDI channel 1, and note 60 / C3)
> on: 100 (for noteOn velocity of 100 on button push)
> off: 0 (to send a noteOff on button release)
> target: ["midi:device_name"] (where device_name is one of the declared midi devices defined during setup)
> 
> _Please note the "_" replace space. If your midi device name is "my device" the correct syntax to use in the target field is "my_device"._
> 
> You should have something like this:
> 
> 
> 
> 
> ​
> For this example, we are *using *a push button. But remember: you have to fill the *target *field with *midi:toVIControl* on every widget you create!
> 
> 
> Precision is the number after the decimal. For the /note address, we don’t need 2 of precision, but for /control - on a track volume for instance, 1 of precision (-6.4db) or 2 (-6.43db) can make a big difference!​
> 
> If you press the push button, you should have a midi input signal on the *MC*.
> 
> 
> In addition to Cubase Generic Remote Control, I’m using Midi Translator to convert MIDI msgs to emulate keystrokes. It’s easy to use and powerful! It has to be installed on the *MC*.​
> 
> You have everything in your hands to create your own GUI on Open Stage Control.
> The last part is some CSS code and tips to help you in the creation process. Good luck and have fun!
> 
> 
> *Step 5: Tricks and CSS code*
> 
> 
> Here is a Spreadsheet with some css codes and base64 images for your template.​
> If you have any questions or if you need help, feel free to ask on this thread! I will help as much as I can!
> 
> The Open Stage Control developer is highly active. If you have some errors, bugs, or even features ideas; feel free to help him by posting on the project github. For other requests or discussions about OSC, please join the brand new discussion group.
> 
> Thank you so much for reading. I hope you enjoyed this tutorial and this software!
> 
> Manaberry


Amazing! can you be so generous to share the template?! many thanks!


----------



## GigStage

While this tutorial from the first page covers installing python, and virtual a MIDI driver, it's really much simpler if you are using just OSC messages. You can get Open Stage Control working only with OSC without setting up Python and virtual ports. See this article for more info:






Gig Performer | How to control your guitar or keyboard effects from a Web browser


Learn how to control your guitar or keyboard effects (or any other instrument effects) by using a Web browser on any computer, laptop, smartphone via OSC.




gigperformer.com


----------



## Sub3OneDay

Ok I give up.

Bottom line - exam question - has anyone managed to get articulation switching working on instrument tracks without using Cubase Quick Controls??

I've been using OSC for a while now and I have a great set of functions that I use. Together with an articulations switcher that changes the button labels depending on the midi track selected, linked into a very large collection of expression maps.

To get the articulations working I have used what I would call the @Mihkel Zilmer 's method, similar also to the Midi Kinetics tool, primarily because I migrated over from a Lemur template that used the same methods. 

The problem that I have come up against though are my instrument tracks. I can't use this method as it relies on a midi send which instrument tracks in Cubase don't have.

The only other method that I have come across is @Manaberry method - which uses quick controls. It's a great method, and I nearly implemented it, but I have found (unless I am doing something wrong) I am therefore unable to use Quick Controllers for what they are designed for. I also have a section in my OSC dedicated to Quick controllers, and have also adapted the MIDI track articulations method to populate the labels of the QCs depending on what track is selected.

I need therefore another way, or a way to mimic a midi send on my Instrument tracks...

Any ideas??


----------



## Manaberry

Hey

I have no particular alternative in mind to help you sorry. Mihkel method is by far the most common and maybe the best (as mine doesn't work with "unsynced" mixconsole option or if you use the quick control.)


----------



## zig

Hi @Jorge Vargas
I did a fresh installation of Mojave on my machine.
I'm trying to make OSC work again but your tutorial video is no longer online on youtube. Could you put it back online or write the instructions for Mac here?


----------



## zig

Solved!
I download the last version of python (python 3.8.5) then installed rtmidi with pip3 in terminal :
pip3 install python-rtmidi
PS: pip is installed by default in python 3 so don't need to install it separately.


----------



## Sub3OneDay

Manaberry said:


> Hey
> 
> I have no particular alternative in mind to help you sorry. Mihkel method is by far the most common and maybe the best (as mine doesn't work with "unsynced" mixconsole option or if you use the quick control.)



I’ve finally got a workaround to get Mihkel’s method to work on instrument tracks.

it’s a bit clumsy but try to follow:

- Set up a midi track duplicate of each of your instrument tracks (which you can then hide/collapse in a folder as they are not connected to an instrument )
- set the midi in of the new midi track to receive from the midi out of the instrument track.
- You then put the Transformer midi send on this midi track configured to send a cc value that you’ve chosen in your OSC custom module to identify the instrument track. 

Then, when you select the instrument track, the Generic remote triggers Cubase to fire out the cc to OSC which the duly responds. That response goes into and then through the instrument track, out of the midi out of it’s VSTi and into the duplicate midi track. This midi track then sends (via the transformer in the normal way) the ccvalue back to OSC.

This method will work I think with any instrument in the instrument rack that has its midi out turned on.

Hope that’s clear?!

Bwnefit of this is that it doesn’t use quick controls so I’ve now also started looking at a bank of fader templates in OSC for the various instruments quick controls.


----------



## Skyroads

Hi guys and sorry for the may "silly" questions but:

I used and tried Lemur/Cubase/Samsung Tablet with Mihkel's method before but I want to start from scratch building a brand new template on a single machine using VE Pro.

- What would you recommend in order to get all implemented in the end? - meaning how would you setup the template in VE Pro and Cubase from scratch that it makes most sense using OSC (as a articulation and visibility tool)
- Is there a specific approach on setting up expression maps in combination with OSC

As I really want to start from scratch (I know this will take just some "little" time) it would be very cool to follow along by a step by step guide/video or something. Maybe someone else is just starting a new template as well and we could all work together in building the base for future templates.

Please: of course I know that in the end it all comes down to each individuals taste or workflow - but as I want to start from 0 it makes sense to gather all of your way of working, setups etc.

Thanks in advance and cheers


----------



## Sub3OneDay

Skyroads said:


> Hi guys and sorry for the may "silly" questions but:
> 
> I used and tried Lemur/Cubase/Samsung Tablet with Mihkel's method before but I want to start from scratch building a brand new template on a single machine using VE Pro.
> 
> - What would you recommend in order to get all implemented in the end? - meaning how would you setup the template in VE Pro and Cubase from scratch that it makes most sense using OSC (as a articulation and visibility tool)
> - Is there a specific approach on setting up expression maps in combination with OSC
> 
> As I really want to start from scratch (I know this will take just some "little" time) it would be very cool to follow along by a step by step guide/video or something. Maybe someone else is just starting a new template as well and we could all work together in building the base for future templates.
> 
> Please: of course I know that in the end it all comes down to each individuals taste or workflow - but as I want to start from 0 it makes sense to gather all of your way of working, setups etc.
> 
> Thanks in advance and cheers



My advice would be to learn a bit of JavaScript and also some fundimental items basic concepts of coding - like how to populate arrays etc using simple loops etc. You can then get the custom module working.

Equally - I would question why you want to start from zip? There are enough emtemplates and examples out there already that you can “borrow” from to create your own.
Otherwise you’ll end up spending all your time building a touch pad system, and no time composing...


----------



## elad770

I'm a newbie so please forgive me.

I installed Python as directed. The last version was 3.9

I ran CDM as administrator and went to where the folder is 

I ran the command pip install python-midi and nothing happens

I know I'm missing something but I don't know what. I've attached a picture.

Would appreciate your help


----------



## jamess199

I do apologise if I've missed a glaringly obvious part of the process - but could somebody point me to the direction of connecting OSC to Cubase? I have created a Generic Remote in Cubase, but I'm unsure how to connect the two and assign my buttons correctly.

Thanks in advance!

J


----------



## Manaberry

jamess199 said:


> I do apologise if I've missed a glaringly obvious part of the process - but could somebody point me to the direction of connecting OSC to Cubase? I have created a Generic Remote in Cubase, but I'm unsure how to connect the two and assign my buttons correctly.
> 
> Thanks in advance!
> 
> J



You just have to click on "add" then on "learn" and press the button on your O-S-C template. Cubase should automatically recognize the incoming midi message.



elad770 said:


> I'm a newbie so please forgive me.
> 
> I installed Python as directed. The last version was 3.9
> 
> I ran CDM as administrator and went to where the folder is
> 
> I ran the command pip install python-midi and nothing happens
> 
> I know I'm missing something but I don't know what. I've attached a picture.
> 
> Would appreciate your help



I'm not sure about your issue. It seems PIP is not installed on your computer. Be sure to install/update it.


----------



## Sub3OneDay

elad770 said:


> I'm a newbie so please forgive me.
> 
> I installed Python as directed. The last version was 3.9
> 
> I ran CDM as administrator and went to where the folder is
> 
> I ran the command pip install python-midi and nothing happens
> 
> I know I'm missing something but I don't know what. I've attached a picture.
> 
> Would appreciate your help



when you install python you need to make sure the check box is ticked adding python to PATH:

- *make sure to check the option* "Add Python 3.x to PATH"


----------



## Manaberry

Hi guys,

the very new beta version 1.70 comes with a very nice feature 





I will update the tutorial as soon as it's out of beta.


Oh, by the way, I'm glad to welcome Trevor Morris in the world of O-S-C and Dell Touchscreen


----------



## MauroPantin

Wow, saw the pic the other day on his profile but did not realize he was using OSC. Cool!


----------



## Skyroads

I just tried my first steps in OSC and it seems very promising! - My first tests did all work in combination with cubase. The only thing I cannot figure out is a remote control via tablet - even if I put the related ip address it doesn't find anything. Whereas if I open the ip on my computer it shows the OSC Interface.

Edit: My tablet (Android) is within the same network as the computer and I'm using Chrome.

Do you maybe know what could be the issue here? Without my tablet the whole project would be useless


----------



## Sub3OneDay

Skyroads said:


> I just tried my first steps in OSC and it seems very promising! - My first tests did all work in combination with cubase. The only thing I cannot figure out is a remote control via tablet - even if I put the related ip address it doesn't find anything. Whereas if I open the ip on my computer it shows the OSC Interface.
> 
> Edit: My tablet (Android) is within the same network as the computer and I'm using Chrome.
> 
> Do you maybe know what could be the issue here? Without my tablet the whole project would be useless



My advice would be to head over to

The OSC Forum

Post your query in there - the developer is very active in the forum and as Ling as you explain your problem clearly he’ll no doubt have you fixed in no time.


----------



## Skyroads

Sub3OneDay said:


> My advice would be to head over to
> 
> The OSC Forum
> 
> Post your query in there - the developer is very active in the forum and as Ling as you explain your problem clearly he’ll no doubt have you fixed in no time.


Thank you for your advice! I will head over and ask the question there.

Edit: I've figured it out - I had a second wlan router inbetween which made it impossible to cennect within the same network. All good now


----------



## deemarcus

Quick question - What if i turn off any of my 2 midi keyboards, and want to start only OSC. In my case, port changes so i need to edit midi values in OSC. I am using loopbackMIDI instead of python rtmidi. Is that a difference? Thanks


----------



## zig

@ Sub3OneDay

I think I understand the concept how the miditrack thing works for controllers but it's a bit complicated and I'm having problems with midi loops.
Could you share here some screenshot to help us better understand.

OSC is great but we are sorely lacking in tutorials or examples.

Thanks
Z

*EDIT /SOLVED and understood!*

On Mac
I made change on OSC midisetup, using OSC own port virtualization with midictrl:virtual.
(midictrl is the port I declared in IAC midi configuration )
On midi track I put transormer to extract desired ctrl with insert exclusive mode.
Send it to "midi_in" which I believe was created by the declaration of the virtual port in OSC.
Now the fader works smoothly both directions.

I hope it can help some of you who like me are not developers.


----------



## guitarcat

Is it possible that with version 1.7.3 the custom Module from @Mihkel Zilmer doesn't work correct anymore? All the buttons work and i can switch expression maps in Cubase, but there's no more text (articulations) in OSC. Does somebody have a solution?
Thanks


----------



## Manaberry

I have not tried the update yet as everything works well with my current version.

Maybe it has to do something with this new line from the 1.7.3.


> modal/button: prevent error when label is updated



Go back to 1.7.2 in the meantime, and ask Jean-Emmanuel on the official website.


----------



## Mihkel Zilmer

guitarcat said:


> Is it possible that with version 1.7.3 the custom Module from @Mihkel Zilmer doesn't work correct anymore? All the buttons work and i can switch expression maps in Cubase, but there's no more text (articulations) in OSC. Does somebody have a solution?
> Thanks



Can't comment on this, except that I am still on version 1.2 where everything works for me.
I did read recently that some changes were made to custom module structure, so perhaps that broke something.

Unfortunately I don't have any free time to look at this any time soon.. If someone else does, feel free to post an updated version!


----------



## zig

Sub3OneDay said:


> Then, when you select the instrument track, the Generic remote triggers Cubase to fire out the cc to OSC which the duly responds.



Could you specify the command to enter in the Generic remote?


----------



## guitarcat

Manaberry said:


> I have not tried the update yet as everything works well with my current version.
> 
> Maybe it has to do something with this new line from the 1.7.3.
> 
> 
> Go back to 1.7.2 in the meantime, and ask Jean-Emmanuel on the official website.



Thanks @Manaberry 

I tried with 1.7.2. Still no luck. Going back to 1.2 and try again.


----------



## Manaberry

I don't have any problem with version 1.5 on my end. Once I have a bit more time, I will look into it. But it's a matter of weeks sadly.


----------



## guitarcat

Sub3OneDay said:


> I’ve finally got a workaround to get Mihkel’s method to work on instrument tracks.
> 
> it’s a bit clumsy but try to follow:
> 
> - Set up a midi track duplicate of each of your instrument tracks (which you can then hide/collapse in a folder as they are not connected to an instrument )
> - set the midi in of the new midi track to receive from the midi out of the instrument track.
> - You then put the Transformer midi send on this midi track configured to send a cc value that you’ve chosen in your OSC custom module to identify the instrument track.
> 
> Then, when you select the instrument track, the Generic remote triggers Cubase to fire out the cc to OSC which the duly responds. That response goes into and then through the instrument track, out of the midi out of it’s VSTi and into the duplicate midi track. This midi track then sends (via the transformer in the normal way) the ccvalue back to OSC.
> 
> This method will work I think with any instrument in the instrument rack that has its midi out turned on.
> 
> Hope that’s clear?!
> 
> Bwnefit of this is that it doesn’t use quick controls so I’ve now also started looking at a bank of fader templates in OSC for the various instruments quick controls.



This sounds really great. Did you test this? For me it didnt work. Any hints?

Thanks


----------



## Vik.Pr

Hello The Man,
How did you create different panels for each VST/Kontakt instance? Like, one for Strings, one for Brass, etc? (cf. Your video)

Thx


----------



## MGdepp

Can Open Stage Control hide, show, reposition and change properties of its control elements? E.g., can you send it Midi or OSC messages to change the text labels of some buttons like that is possible with Lemur?


----------



## Manaberry

deemarcus said:


> Thanks community for not replying me on my question



You are very welcome. It's always a pleasure to not respond. We don't get any wage for helping people in our free time, so there is no obligation to answer everyone. 
We owe you nothing. It would be better to post again with a nice message instead of this wacky one.
Sometimes we don't pay attention to every message, especially after 12 hours of work. We are humans. Not robots.


To get back on your problem, I've never experienced something like your issue. Maybe you should go for a virtual MIDI software that starts as a service on your system and then, creates the needed port before the system recognizes your hardware MIDI devices on startup. So you should be able to get the same MIDI ports for everything on every session. Try the last version of OSC, there is no need for python-rt-midi anymore. You would need just rtpmidi to create virtual port.


----------



## Manaberry

Vik.Pr said:


> Hello The Man,
> How did you create different panels for each VST/Kontakt instance? Like, one for Strings, one for Brass, etc? (cf. Your video)
> 
> Thx


With a simple MIDI call back script. Check previous pages, the whole process is explained


----------



## Manaberry

MGdepp said:


> Can Open Stage Control hide, show, reposition and change properties of its control elements? E.g., can you send it Midi or OSC messages to change the text labeled of some buttons like that is possible with Lemur?



Do you mean the "text labeled"? Almost everything within Open Stage Control can be gathered, manipulated, modified. You can share data between widgets, change text based on a custom script, and so on. For instance, I just use a simple show/hide CSS code based on the state of another widget.
If the value is 0, it displays panel 1. If 1, panel 2, etc.

You have more info here, in the doc: https://openstagecontrol.ammd.net/docs/widgets/general-mechanics/


----------



## timbit2006

I'm very glad I found this, fortunately the Lemur website is down so I was desperately looking for alternatives. Seems I may have saved myself 35 bucks and found something that's better overall.


----------



## Manaberry

timbit2006 said:


> I'm very glad I found this, fortunately the Lemur website is down so I was desperately looking for alternatives. Seems I may have saved myself 35 bucks and found something that's better overall.


Welcome! 


Feel free to try version 1.7.3 directly! You should not have to follow the part with Python and rtmidi in the tutorial. If it does work perfectly without this step, I would love to hear it! As it confirms that I can remove this part for good from the tutorial.

Enjoy!


----------



## timbit2006

Manaberry said:


> Welcome!
> 
> 
> Feel free to try version 1.7.3 directly! You should not have to follow the part with Python and rtmidi in the tutorial. If it does work perfectly without this step, I would love to hear it! As it confirms that I can remove this part for good from the tutorial.
> 
> Enjoy!


That's good to know, thanks!
Hopefully I'll give it a go today. My ultimate goal with it is to have it switch to a specific page on the ipad when I press a key shortcut while having a track selected in Reaper. I don't necessarily want it to follow along selection like in your video on the first post but I want the same idea but selecting CC sliders and knobs instead. It would also be nice to have it with an X/Y pad that can show DearVRs positioning and a few settings,  is what I'm after there and I'd imagine it can also be used for Blender and CAD programs. 
I'd also like the articulation management window and basic DAW controls like you have on the first post on my other android tablet. I definitely have a bit of work ahead of me for sure.


----------



## timbit2006

Everything seems good to go, I've got it running on another computer successfully.
One thing about the tutorial that threw me off and it might be a leftover from a previous version but it instructs you to type " --midi toVIControl:6,7 " but in the field you just type " toVIControl:6,7 " to get it to work. Now it's time for the fun part


----------



## Manaberry

Superb! Great job, and very clever way to use OSC! 

I will update the tutorial, thanks for letting me know.


----------



## MauroPantin

Finally got around to updating my OSC layout. It was a mess of buttons added one on top of another as needs were being fulfilled, with little efficiency. OSC was still on version 0.4. I had a break of work of two days and fixed it up, taking advantage of now including Dorico in my workflow to replace Sibelius. 

I also switched Bome's MIDI translator for MidiKey2Key, which works beautifully too, and is free as well as lightweight. 

Now my touch screen is super clean, single page per piece of software, one for Reaper, one for Dorico. It looks empty on my browser and, consequently, on these screenshots. But it fills the touchscreen nicely. I couldn't take a good picture because my touchscreen is kinda glossy. 

Super happy with this setup. Thanks everybody for the inspiration and helpful tips throughout the thread!


----------



## bebopp

Grizzlymv said:


> Sure. I was just thinking at revisiting a bit the screen layout as I find it less functional to have the expression maps loaded in a pop-up. But anyway, I'll post it as it is now, and post the update later on.
> 
> But for now, if you want to run OSC on the same Windows machine who run Cubase, and interact from a tablet (in my case a Surface Pro), here's the instructions and files. This is assuming you already have the pre-requisites installed from @Manaberry document in the first post. I may revisit my pdf file to include those steps in the future. Instructions should be similar if you run it on Mac.
> 
> Let me know if you have any questions.


Thank you very much for sharing Grizzlymv, it works like a charm! Beautiful Template. I will try to change the expression maps to make it work with the Spitfire libraries. By the way as UACC system use, Midi channel + fixed CC32 + Velocity number to change between articulations, but i'm missing how to insert the velocity. Sorry but i'm new to OSC. Could you help me please? Thanks in advance.


----------



## Manaberry

If you are using a button, look for_ button>on/off _fields_. _That's where you insert those values.


----------



## bebopp

Manaberry said:


> If you are using a button, look for_ button>on/off _fields_. _That's where you insert those values.


Thanks Manaberry i'll give it a try!


----------



## topaz

Jean has posted this https://github.com/jean-emmanuel/osc-keyboard

Maybe some clever person could put this into a working solution ?

I know little about coding so am stumped on this one ?


----------



## MauroPantin

It would be so cool to have OSC do keyboard shortcuts, it would be the complete package. But that GIT is 6 months old, and no activity since then. It is my understanding that Jean is/was not interested in adding that functionality and only cared about OSC, even considered MIDI to be an exception.

As a side note, I use a software called MIDIKey2Key that works beautifully to fulfill that function in case anyone's interested.


----------



## Manaberry

MauroPantin said:


> It would be so cool to have OSC do keyboard shortcuts, it would be the complete package. But that GIT is 6 months old, and no activity since then. It is my understanding that Jean is/was not interested in adding that functionality and only cared about OSC, even considered MIDI to be an exception.
> 
> As a side note, I use a software called MIDIKey2Key that works beautifully to fulfill that function in case anyone's interested.



Actually, someone already asked Jean-Emmanuel about a hotkey feature. If I remember well, he said it was somehow not possible as it would be too far from the actual core code of OSC. He wants to focus on bringing features for OSC/MIDI.

As you mentioned, there are softwares out there to translate MIDI signals to keystrokes. I use Bome MIDI translator. Works like a charm.

To be honest, more DAW should support built-in actions shortcuts bind to MIDI, as Cubase or Dorico do.


----------



## MauroPantin

Manaberry said:


> Actually, someone already asked Jean-Emmanuel about a hotkey feature. If I remember well, he said it was somehow not possible as it would be too far from the actual core code of OSC. He wants to focus on bringing features for OSC/MIDI.
> 
> As you mentioned, there are softwares out there to translate MIDI signals to keystrokes. I use Bome MIDI translator. Works like a charm.
> 
> To be honest, more DAW should support built-in actions shortcuts bind to MIDI, as Cubase or Dorico do.



That makes sense. More power to him, like you said, there's software to fulfill that functionality.

I would love it if more music software supported *both *OSC and MIDI. I use Reaper and it supports straight OSC messaging as a shortcut, so I don't really use MIDI translation of any kind for it. My shortcuts are listed as "/quantization" and things like that, they show up as the address or the OSC ID and no middleman is needed. My entire Reaper panel has no MIDI messaging of any kind save for the VSTi control section.

I am only using the MIDI translation for Dorico because it is very limiting in terms of MIDI control at the moment. OSC in Dorico would kick ass, but I would set for a more comprehensive MIDI implementation in this area (ie... 16 channels instead of OMNI, support for CC values instead of just the CC number). If and when that happens I'll probably ditch MIDIKey2Key.


----------



## Manaberry

I would love to see more control in Dorico as well! It would be game-changer for my daily routine.
Before moving to Cubase, I used to create a proper controller mapping on Ableton with Open Stage Control (using Remotify.) It was amazing to have 80+ faders reacting to everything from the DAW. 

It takes time to get everything ready on our beloved DAW but, I think it's a great time to be alive having all those tools :D


----------



## topaz

It is possible, just needs some clever person to decipher this code 

https://github.com/jean-emmanuel/osc-keyboard



Manaberry said:


> Actually, someone already asked Jean-Emmanuel about a hotkey feature. If I remember well, he said it was somehow not possible as it would be too far from the actual core code of OSC. He wants to focus on bringing features for OSC/MIDI.
> 
> As you mentioned, there are softwares out there to translate MIDI signals to keystrokes. I use Bome MIDI translator. Works like a charm.
> 
> To be honest, more DAW should support built-in actions shortcuts bind to MIDI, as Cubase or Dorico do.


----------



## MauroPantin

topaz said:


> It is possible, just needs some clever person to decipher this code
> 
> https://github.com/jean-emmanuel/osc-keyboard



There's not much to it. I mean, the code isn't commented but it seems simple in terms of what it appears to be doing.

It is designed to run alongside OSC and not within it, so you would need to run it from a terminal using java. Then use the address "/keys" and include the keys in the preArgs of your OSC template (one per line) whilst pointing OSC to port 5555 (or any port of your choosing by modifying the config.js file).

For sending the keystrokes it is using a dependency called node-key-sender. The documentation for that dependency can be found here: https://www.npmjs.com/package/node-key-sender

That documentation includes a list of how to format the preArgs to get it to work, they are in a table at the bottom of the page.

It's clever and simple but at the same time you are still runing a 3rd party app to get the keystrokes sent. Might as well use something a bit more powerful that can send macros or sequences of key combinations.


----------



## Drjay

AutoIt has an osc module which works quite well, but it‘s Windows only. I‘m using it with Open Stage Control.


----------



## Manaberry

@topaz The installation process is fairly simple. I just tried, the app works. You can get Jean-Emmanuel's app for a test drive.

It's all there:









GitHub - jean-emmanuel/osc-keyboard


Contribute to jean-emmanuel/osc-keyboard development by creating an account on GitHub.




github.com




Install Java run time and Nodejs. Follow the quick steps on Github and you are good to go for some Open Stage Control Widget to Key stroke


----------



## topaz

I did try but got lost ;-(



Manaberry said:


> @topaz The installation process is fairly simple. I just tried, the app works. You can get Jean-Emmanuel's app for a test drive.
> 
> It's all there:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> GitHub - jean-emmanuel/osc-keyboard
> 
> 
> Contribute to jean-emmanuel/osc-keyboard development by creating an account on GitHub.
> 
> 
> 
> 
> github.com
> 
> 
> 
> 
> Install Java run time and Nodejs. Follow the quick steps on Github and you are good to go for some Open Stage Control Widget to Key stroke


----------



## bebopp

OSC + Cubase + Spitfire Audio UACC mode with Expression Maps

Ok guys i'm almost there but i need a little help to do the last mile...
Everything is working with the Keyswitches or with the midi cc calling the Spitfire in UACC mode. 
Great unless when i load the expression maps that usually are working correctly, the instrument in Kontakt doesn't receive more nothing...
I'm using the Grizzlymv Template-V2 modified as in picture.

The path is: OSC + Cubase with Expression Maps +  Kontakt with Spitfire Audio UACC mode. 

Any suggestion will be greatly appreciated!


----------



## Manaberry

No big deal, you just didn't interact at all with the expression map because of the OSC sends.
In your OSC Template, you are just sending the CC 32 UACC for the Spitfire articulation itself. The Cubase Expression map doesn't know what to do as it expects a *midi note* to switch articulations.

You have to set up the expression map to interact in between OSC and Spitfire patch, you have to change the OSC send data as well.

_



OSC (note) > Expression map (match the input note to the right articulation = send CC32 output) > Spitfire patch (get input CC32)

Click to expand...

_


----------



## bebopp

Manaberry said:


> No big deal, you just didn't interact at all with the expression map because of the OSC sends.
> In your OSC Template, you are just sending the CC 32 UACC for the Spitfire articulation itself. The Cubase Expression map doesn't know what to do as it expects a *midi note* to switch articulations.
> 
> You have to set up the expression map to interact in between OSC and Spitfire patch and so change the OSC send data.


Aaah yes! I was just thinking about that, you're the man! Thank you very much Manaberry!!!


----------



## topaz

Hands up, I have been trying to make a giant plug-in loader for ableton that loads live presets via osc buttons.

on Mac it’s kinda working but only with use of midiStroke and keyboard shortcuts.

if only there was a way for open stage control to launch local files my urge to a get a stream deck or maybe touch portal would be diminished.


----------



## topaz

Caved in, Touch-Portal it is.

as wonderful as OSC is, too time consuming for a non coder.

peace
Matt


----------



## Manaberry

Hi folks,
I've updated the tutorial with the latest version of Open Stage Control. Screenshots and command lines are now correct.


----------



## ErwinVos

@Manaberry 
Hi, I've downloaded the Joe Hidden Cubase template for OSC, running
OSC on Windows PC trying to control Cubase 11 on a Mac.

Put everything in the right directory due to Joe's ReadMe file, made
2 generic remotes in Cubase loaded the XML files etc.

Establised a connection between PC and Mac via RTP midi, template is
running in OSC but Cubase doesn't respond.

The only midi input that shows up in Cubase via the networked connection
is the "VIConrol" as within the example in the tutorial. What am I doing wrong?

I'm running the latest OSC v1.8.1 

greetings from the Netherlands

Best Regards, Erwin


----------



## oscarsenen.compose

Hi and happy Holiday Season to everyone!

Thank you to everyone involved to making this thread so useful, especially to Manaberry!

The first entries of the thread were just super helpful for someone with no previous knowledge about this get a nice template done, so thank you for that!

Now - could someone give a detailed explanation on how to get it to show the focused track name and replicate the articulations on the screen? I've gone through all the posts and the ones that talk about this seem to be for advanced users... So some deeper explanation would be really appreciated! 

Thank you so much again!!


----------



## MauroPantin

oscarsenen.compose said:


> Hi and happy Holiday Season to everyone!
> 
> Thank you to everyone involved to making this thread so useful, especially to Manaberry!
> 
> The first entries of the thread were just super helpful for someone with no previous knowledge about this get a nice template done, so thank you for that!
> 
> Now - could someone give a detailed explanation on how to get it to show the focused track name and replicate the articulations on the screen? I've gone through all the posts and the ones that talk about this seem to be for advanced users... So some deeper explanation would be really appreciated!
> 
> Thank you so much again!!



What is your DAW of choice? Depending on that the process may vary, I believe


----------



## oscarsenen.compose

MauroPantin said:


> What is your DAW of choice? Depending on that the process may vary, I believe


Yeah sorry! I'm with *Cubase 11* (and VEP if that matters). So I'm writing to MIDI tracks (not to Instrument tracks) if that can make a difference too. Not sure how it works with Manaberry's setup. Opened his template here and tried to reverse engineer it but no luck. I still don't know where all articulations are "stored" (in Zilmer's template he has a separate text file for them but couldn't find that on Manaberry's). 
So I'd love a little more explained process from how to send from Cubase exactly (tried the Midi Quick Control sends etc), how to make OSC read that and how to show different different articulation sets depending on the focused track. 
I've been days going through that with no luck. 
Thank you!


----------



## zig

Hello, I need help to rebuild my template.
After a disk crash, I had to reinstall my system : before 10.11 now Mac os 10.14.6 on a new ssd.
I use Mihkel Zilmer's OSC template for articulation with Nuendo. It worked perfectly before but honestly it's too old for me to remember the installation process on my previous system.

So, I reinstalled python & rtmidi scrupulously by following the youtube tutorial.

Problem now :
With OSC 0.49.12 I get the java error message that you can see in the screenshot. Nothing works
With OSC 1.7.2, no java error message but the button window doesn't refresh the articulations name.
I see in the console that OSC receives the controller messages. They are obviously not interpreted and the articulations do not change in the display.

I must say that in OSC :
- in the articulation window, the buttons send correctly the programs change to selected tracks in Nuendo .
- In my Quick control window, the sliders talk perfectly with Nuendo (in bi-directional mode).

Is it a Java installation problem? a js script problem? Is there a script adaptation needed to use it with OSC 1.7.2?
Do I need a specific version of python? (I tested with 3.7, 3.8, 3.9) 
I'm a bit lost...Is there a mac user here with a similar system that could help me solve this?


----------



## MauroPantin

oscarsenen.compose said:


> Yeah sorry! I'm with *Cubase 11* (and VEP if that matters). So I'm writing to MIDI tracks (not to Instrument tracks) if that can make a difference too. Not sure how it works with Manaberry's setup. Opened his template here and tried to reverse engineer it but no luck. I still don't know where all articulations are "stored" (in Zilmer's template he has a separate text file for them but couldn't find that on Manaberry's).
> So I'd love a little more explained process from how to send from Cubase exactly (tried the Midi Quick Control sends etc), how to make OSC read that and how to show different different articulation sets depending on the focused track.
> I've been days going through that with no luck.
> Thank you!


I'm on Reaper, so unfortunately I am not much help regarding Cubase. Hopefully some of the guys chime in about this in a couple of days, I'm sure they're out for the holidays. Happy New Year to everyone!


----------



## Manaberry

Hi there. I cannot help for now. Im not available as I have work to finish in high priority. It takes times to review your issues and find a solution, sadly.

I hope someone will be able to help you in the meantime. I'm glad to see OSC getting an important place in your studio and your workflow. The more we are, the better we will be able to help each other on a regular basis.


All the best


----------



## zig

Hello everyone and happy new year!
After spending hours  trying to understand and making some changes in the terminal by reinstalling python and rtmidi, things evolve.
Now Michael template with 0SC 0.49.12 works again and triggers the articulations. 
But still nothing with 0SC 1.7.2
I tested with joeHidden's template, with 0.49.12 it work but with 1.7.2 the display is buggy...

I don't understand if the problem comes from an installation conflict (I'm on Mac Mojave), or from the JS file made in a previous version.
Is there a Mac user who could help me to understand.
Otherwise, can you tell me where to find a template with articulations that works under 1.7.2 & Mac


Z


----------



## rimasinc

Hello friends. I am in the first steps in Open Stage Control. A few months ago I developed an ableton control surface using ClyphX Pro scripts with TouchOsc.

Regarding the use of synthetic keys, ClyphX Pro has an additional one called "Clyphx Pro Keys". Works through an interpreter called MT Player. I use it in the interface I'm developing. However, it is currently out of stock due to compatibility issues in new versions of Mac OS.

I heard rumors that in the next versions of OS the tendency is for synthetic keys to stop working completely. However, on my Touchosc interface on windows 10 it works normally, I set up a complete keyboard that works inside and outside Ableton.

Still on Open Stage Control, I would like to ask a question: how to configure "headless mode"? I have noticed impractical bottlenecks in use. The documentation information is not clear enough (at least for me = D)


----------



## Mihkel Zilmer

I had an hour to spare today so I looked at the custom module file for newer versions.
@zig @guitarcat here is an updated custom module that works with 1.8.1.

Those who asked for a version that works with instrument tracks (@Sub3OneDay @lucor ), here's a separate set of files for that too. For this I have used the Tremolo plugin method as outlined by @pilgrim here https://vi-control.net/community/th...ries-expression-maps-added.65157/post-4182733

_*Please note* - I have recently partially updated the articulation lists in these files, so assignments are not all the same as they were in the old version. Some lists are updated, some are incomplete. Either copy over from the old version or make your own!_

-----------------
*The MIDI track version* sends CC127 on track selection, OSC responds with CC126, MIDI transformer on the track transforms CC126 to a message that identifies the bank (from CC117 to CC125) and instrument number (CC value) and finally sends that back to OSC which displays the corresponding articulations.

Here's what a screenshot of a sample transformer looks like (sending CC117 value 5 - which in my case is the CSS+CSSS articulations for violins, violas and celli). You set this up in the MIDI sends of the track, and point it to the DAWtoOSC MIDI port, channel 1.




---------------------------------

*The instrument track version* uses the included tremolo plugin and sends 2 CC's at once on track selection, so one of them is the bank number (CC126 value, from 0 to 4) and the other the instrument number (CC127 value).

You need to insert this tremolo plugin in slot #1 on your track (or change the slot assignment in the Generic Remote). Activate Debug mode in OSC, and turn the Rate dial - you will see messages coming in: CC126 with the value changing as your turn - adjust this to your required *bank* value for the current track. Next turn the Spatial dial, this determines the CC127 value. As the instrument number changes, the articulation buttons will be populated with labels so you will see a lot of messages in the OSC Debug window - but between them will also be the current CC value of the button - if a little annoying to find. Maybe use a third party MIDI monitor app if this proves too slow for you and just monitor the DAWtoOSC midi port for CC127 values.

Finally, bypass the tremolo plugin *(!!)* or otherwise the effect will be added to your audio coming out of your instrument track.

Also, if you do not have a tremolo plugin on the selected track then the articulations will default to bank 0 patch 0.
--------------

I am also including Generic Remote files for both track versions.

Oh, and happy new year


----------



## zig

Mihkel Zilmer said:


> I had an hour to spare today so I looked at the custom module file for newer versions.
> @zig @guitarcat here is an updated custom module that works with 1.8.1.
> 
> Those who asked for a version that works with instrument tracks (@Sub3OneDay @lucor ), here's a separate set of files for that too. For this I have used the Tremolo plugin method as outlined by @pilgrim here https://vi-control.net/community/th...ries-expression-maps-added.65157/post-4182733
> 
> _*Please note* - I have recently partially updated the articulation lists in these files, so assignments are not all the same as they were in the old version. Some lists are updated, some are incomplete. Either copy over from the old version or make your own!_
> 
> -----------------
> *The MIDI track version* sends CC127 on track selection, OSC responds with CC126, MIDI transformer on the track transforms CC126 to a message that identifies the bank (from CC117 to CC125) and instrument number (CC value) and finally sends that back to OSC which displays the corresponding articulations.
> 
> Here's what a screenshot of a sample transformer looks like (sending CC117 value 5 - which in my case is the CSS+CSSS articulations for violins, violas and celli). You set this up in the MIDI sends of the track, and point it to the DAWtoOSC MIDI port, channel 1.
> 
> 
> 
> 
> ---------------------------------
> 
> *The instrument track version* uses the included tremolo plugin and sends 2 CC's at once on track selection, so one of them is the bank number (CC126 value, from 0 to 4) and the other the instrument number (CC127 value).
> 
> You need to insert this tremolo plugin in slot #1 on your track (or change the slot assignment in the Generic Remote). Activate Debug mode in OSC, and turn the Rate dial - you will see messages coming in: CC126 with the value changing as your turn - adjust this to your required *bank* value for the current track. Next turn the Spatial dial, this determines the CC127 value. As the instrument number changes, the articulation buttons will be populated with labels so you will see a lot of messages in the OSC Debug window - but between them will also be the current CC value of the button - if a little annoying to find. Maybe use a third party MIDI monitor app if this proves too slow for you and just monitor the DAWtoOSC midi port for CC127 values.
> 
> Finally, bypass the tremolo plugin *(!!)* or otherwise the effect will be added to your audio coming out of your instrument track.
> 
> Also, if you do not have a tremolo plugin on the selected track then the articulations will default to bank 0 patch 0.
> --------------
> 
> I am also including Generic Remote files for both track versions.
> 
> Oh, and happy new year


Mihkel, Thank you very much for your answer and your files. Now everything is crystal clear and works perfectly..


----------



## oscarsenen.compose

Jorge Vargas said:


> Hello guys, here I uploaded my solution in a video.



Hi Jorge! 

Thanks for the video! Unfortunately this link doesn't seem to work. Do you have a different link for it? 

Thank you!!


----------



## oscarsenen.compose

Manaberry said:


> Here you go: Cubase Generic Remote *.xml and Open Stage Control template to load.
> Beware: I'm using the same network as my previous template for Ableton. So every button as the target "midi:ableton" because of the rtpMidi slave name.


Hi Manaberry! Again, this is amazing to have as a starting point. So thank you once again. With this, along with MZ and other people in the thread things are starting to work, after a month of trial and error...  

You didn't post your articulations js file anywhere, did you? For a non js coding guru it would be very helpful to see at least one or two smaller library articulations set and the relevant information like what you use for hide/show them etc. 
(Sorry if you posted that somewhere and I missed it!) 

Thank you for all your help!


----------



## Loïc D

Hi guys.
I've installed O-S-C and running it fine on a Mac (Mojave).
How can I configure Logic Pro to take benefit of it.
We've got a surface control manager BUT there's no generic one.
If anyone had success using O-S-C with LPX, that's be nice to chime in.

Thanks


----------



## Skyroads

@Mihkel Zilmer Could you may add your settings at the field "midi" and which file did you load at "load"?

Your custom module for the midi or instrument tracks you've already posted but I can't get them work with your old OSC file "OSCMZ.json". The question for the field "midi" is because there is always an error message "can't connect to input port 3" - I've got oscIn and oscOut at loopmidi and therefore should be the same setup as yours.

Is it maybe because of the old .json file?

If you got some time it would be splendid to share a quick overview instruction what to do at which programm (with your files) not the programming itself of course ^^


----------



## Manaberry

@Skyroads Use the "list MIDI devices" feature to check which port you should write in the midi field


----------



## Skyroads

I've checked it once again and with different settings --midioscIn..... or without "--" / as soon as a minus is placed there's an error message. Please find my screenshots from OSC and within Cubase. May you can spot something 

Here the midi settings in OSC: it only opens the server if I delete the minus but doesn't work in combination with cubase. If I select a track this message appears in OSC (ERROR, MIDI) unknown output (OSCtoDAW)











These are the settings within Cubase





The only difference I could spot is at line 2 parameter 1 it's a CC value and no number only (Cubase 11)


----------



## zig

@Skyroads Mac or PC?
Mihkel Zilmer made a change on port naming. Before it was OscIn & Osc Out, now DAWtoOSC & OSCtoDAW... and it's more clear.
for me on mac : list OSCtoDAW:-1,0 DAWtoOSC:1,-1 midictrl:virtual path=/Library/Frameworks/Python.framework/Versions/3.8/bin/python3


----------



## zig

Here a version of Mihkel Zilmer Template which display on top the instrument name of the selected track.


----------



## Manaberry

@Skyroads You should not use "--"


----------



## ProfoundSilence

Hello internet wizards, I have a yoga 940c - which is a windows 10 machine... anyway I can use that for touch OSC for my main big rig? Or do I need an android/ios tablet instead of a windows laptop.


----------



## Skyroads

zig said:


> @Skyroads Mac or PC?
> Mihkel Zilmer made a change on port naming. Before it was OscIn & Osc Out, now DAWtoOSC & OSCtoDAW... and it's more clear.
> for me on mac : list OSCtoDAW:-1,0 DAWtoOSC:1,-1 midictrl:virtual path=/Library/Frameworks/Python.framework/Versions/3.8/bin/python3


Thanks for your infos and files. I'm on PC and just changed the settings at loopmidi accordingly to yours "DAWtoOSC" and "OSCtoDAW". I assume you are working with a slave or why are you using the code midictrl:... ? What are your settings within the midi send transformer and how did you get a -1 at the generic remote?

If I enter "OSCtoDAW:-2,3 DAWtoOSC:1,-2" into the OSC midi field it still says "can't connect to output port -2" but opens the server. If i click on any button a massive JavaScript/Stream Destroyed error message occurs. Most probably it's just one or two minor things that I've got wrong but cannot figure it out

Edit: This is my new midi list - so my setting above should be right, no?


----------



## zig

@Skyroads I'm realy not an OSC expert and I'm on Mac... but try with :
OSCtoDAW:-1,2 DAWtoOSC:3,-1

-1 is for bybass Input/Outout.
I don't understand why you have the number 1 and 2 after your port names... a PC thing?
Looks like port numbers ...we don't have that with Mac.
Did you follow Manaberry's recommendations for the PC midi setup?
Perhaps also try that : OSCtoDAW 2:-1,2 DAWtoOSC 3:3,-1

I use Nuendo 11 & Ve-pro
Here is my transformer setup on midi track. Send to DAWtoOSC
In the Generic remote panel I put :
Device : Midi Mixer / Cannel-Categorie : Selected / Value-action : Selected
But sometime it change to -1 after restart. I think it's the same.


----------



## Skyroads

zig said:


> @Skyroads I'm realy not an OSC expert and I'm on Mac... but try with :
> OSCtoDAW:-1,2 DAWtoOSC:3,-1
> 
> -1 is for bybass Input/Outout.
> I don't understand why you have the number 1 and 2 after your port names... a PC thing?
> Looks like port numbers ...we don't have that with Mac.
> Did you follow Manaberry's recommendations for the PC midi setup?
> Perhaps also try that : OSCtoDAW 2:-1,2 DAWtoOSC 3:3,-1
> 
> I use Nuendo 11 & Ve-pro
> Here is my transformer setup on midi track. Send to DAWtoOSC
> In the Generic remote panel I put :
> Device : Midi Mixer / Cannel-Categorie : Selected / Value-action : Selected
> But sometime it change to -1 after restart. I think it's the same.


Thanks again - still port issues and same errors. If I setup ports without minus, no port error will apear.

This didn't work at all: OSCtoDAW 2:-1,2 DAWtoOSC 3:3,-1

Yes I followed Manaberry's midi setup and if I use only one port as described it's working but as I want to have it done like you/Mihkel it's not working. Biggest problem I have is that I don't know where the real issue is... is it only the port, is it something within the custom module, cubase etc.. this is driving me crazy as I don't know anything about coding and these stuff.

Is there maybe an "easy" way to just test this function where I setup the custom module by myself? I can imagine that it doesn't work because you have other settings but normally with all your settings (cubase/OSC) and files used it should at least show me something at OSC.


----------



## zig

@Skyroads
Sorry, Pc world...my limit is here, I don't know anything about it! 
In his last post Mihkel send two versions, instrument and midi. Are you using midi version (with midi track in Cubase)?

For me it worked immediately with the midi track version, I just added the OSCtoDAW and DAWtoOSC ports in the IAC Setup of the midi board.

Active Debug : true in main OSC Panel setup, before start
Do you have the following message in the console when you start OSC ?

(DEBUG, MIDI) device "OSCtoDAW" created
(DEBUG, MIDI) device "OSCtoDAW" connected to output port 0 (OSCtoDAW)
(DEBUG, MIDI) device "DAWtoOSC" created
(DEBUG, MIDI) device "DAWtoOSC" connected to input port 1 (OSC DAWtoOSC)


​


----------



## Mihkel Zilmer

Thanks @zig - you're right, I changed the port names for clarity.
And you were very close with the solution..

@Skyroads + anyone else who's wondering:

OSCtoDAW - input inactive, output set to corresponding # in MIDI Outputs.
DAWtoOSC - input set to corresponding # in MIDI Inputs, output inactive.

So for @Skyroads, based on the above screenshot, that would be
OSCtoDAW:-1,3 DAWtoOSC:1,-1

I am using separate input and output ports because this eliminates any chance of MIDI feedback.

Here's a screenshot of my setup for reference:


----------



## zig

Of course! Thank you @Mihkel Zilmer for your expert knowledge.


----------



## Skyroads

@zig and @Mihkel Zilmer thank you so much!

I didn't had debug true and the porting had an error. Now it's working - how cool is that?
I can now start adjust all the instruments, GUI etc. you really made my day guys!


----------



## Manaberry

ProfoundSilence said:


> Hello internet wizards, I have a yoga 940c - which is a windows 10 machine... anyway I can use that for touch OSC for my main big rig? Or do I need an android/ios tablet instead of a windows laptop.


You can use the laptop as both the server and the touchscreen


----------



## ProfoundSilence

Manaberry said:


> You can use the laptop as both the server and the touchscreen


Thank you French toast 

I might break something trying to set it up


----------



## Skyroads

So thanks to you guys, I could be creative and designed my own interface. There will probably still be some changes but I like it so far - with the 3 tabs (Articulations, Cubase Controls, Visibility)

Most of the time went into creating custom icons etc. Here some screenshots of the progress so far 

Here I still need to find out how to make only the orange text (Instrument name) bigger so that it won't affect the font size within the buttons.





Basic Cubase controls (may add/adjust some things)





Visibility control panel with lots of custom pics.


----------



## zig

@Skyroads


----------



## Alaudidae

Thank you all for the great information.


----------



## Markrs

Just dipping my toe into this. For some reason I couldn't get things working with Reaper with the instructions (nothing wrong with the instruction I just probably didn't enable the right things in Reaper). Thankfully Reaper has built in support for OSC, so I only had to give Open Stage control send: 127.0.0.1:8090 (the access address is still 127.0.0.1:8080). I then added a new OSC in Reaper with that as the web address and all works (a template has been created for Reaper, but it only seems to be partially working https://github.com/ThrashJazzAssassin/REAPER-OSC-panels but was enough to test it with)

In the instructions it also mentioned using a midi to keystrokes however Reaper accepts Midi channel/CC for all commands rather than needing keystrokes.

Is any advantages that I might miss by not using loopmidi and a midi to keystroke software with Reaper as I am sure I can get both of them to work with a bit of effort?

Also exploring touchportal and metagrid for quick key commands as well, but would be great to keep it all in one interface.


----------



## MauroPantin

Markrs said:


> In the instructions it also mentioned using a midi to keystrokes however Reaper accepts Midi channel/CC for all commands rather than needing keystrokes.
> 
> Is any advantages that I might miss by not using loopmidi and a midi to keystroke software with Reaper as I am sure I can get both of them to work with a bit of effort?


I use it with Reaper and I can confidently say there are no advantages missed using the native OSC command support. I did have to do a workaround to get MIDI editor actions working with the OSC, but other than that it works like a charm.

I still have an instance of a MIDI to Key translator app working alongside loopmidi for Dorico and AutoHotKey and other misc apps that I regularly use that do not accept OSC. But Reaper is by far the best one because it doesn't require anything extra and the ability to create custom actions and scripts make it super powerful, it's a match made in heaven.


----------



## Markrs

MauroPantin said:


> I use it with Reaper and I can confidently say there are no advantages missed using the native OSC command support. I did have to do a workaround to get MIDI editor actions working with the OSC, but other than that it works like a charm.
> 
> I still have an instance of a MIDI to Key translator app working alongside loopmidi for Dorico and AutoHotKey and other misc apps that I regularly use that do not accept OSC. But Reaper is by far the best one because it doesn't require anything extra and the ability to create custom actions and scripts make it super powerful, it's a match made in heaven.


Fantastic, will explore this further, if I can resist the temptations to play around with getting by Maschine MK2 working with ReaLearn to unlock being able to do more with it.


----------



## spyki2000

tried to make a button for Cubase but was not able to figure out how to make that work seamlessly. Created a record button it enabled the record in Cubase but when I press the stop button, the record button won't stop (goes off) assuming you need to create another command for that so do I have to create multiple buttons for every widget? or is there a way to solve that easily, also after saving when you load OSC server every time or restart your pc the next day the midi ports keep changing so this is chaotic as you will have to reprogram with new ports every time in every button. sadly there is no tutorial for how to make these buttons or scripts work with Cubase. if anyone can share any tutorial or coding, it will be great, thank you in advance.


----------



## spyki2000

Manaberry said:


> Hi guys,
> 
> the very new beta version 1.70 comes with a very nice feature
> 
> 
> 
> 
> 
> I will update the tutorial as soon as it's out of beta.
> 
> 
> Oh, by the way, I'm glad to welcome Trevor Morris in the world of O-S-C and Dell Touchscreen



hey, there just saw your pic of OSC for Cubase wanted to know how did you make this work, how to get stable non changing midi ports on PC, as mine keep changing every time I load OSC, and how to create a button that works the same way as in Cubase like stop play record as I cant that working if they start they don't stop the way they have to i have to go again click couple of time to make it stop. Thank you in advance.


----------



## Manaberry

spyki2000 said:


> hey, there just saw your pic of OSC for Cubase wanted to know how did you make this work, how to get stable non changing midi ports on PC, as mine keep changing every time I load OSC, and how to create a button that works the same way as in Cubase like stop play record as I cant that working if they start they don't stop the way they have to i have to go again click couple of time to make it stop. Thank you in advance.


A lot of widgets have an "on and off" state. You can easily show and hide widgets using that information. Here is some information on how the syntax works in OSC: https://openstagecontrol.ammd.net/docs/widgets/advanced-syntaxes/

For the MIDI port behavior, I have no idea as I never experienced something like that.


----------



## spyki2000

Manaberry said:


> A lot of widgets have an "on and off" state. You can easily show and hide widgets using that information. Here is some information on how the syntax works in OSC: https://openstagecontrol.ammd.net/docs/widgets/advanced-syntaxes/
> 
> For the MIDI port behavior, I have no idea as I never experienced something like that.


Thanks, @Manaberry I have been referring to that syntax page but still no luck how to do it as I am not a coder  yeah, the midi port is really acting strange for me.


----------



## spyki2000

Skyroads said:


> So thanks to you guys, I could be creative and designed my own interface. There will probably still be some changes but I like it so far - with the 3 tabs (Articulations, Cubase Controls, Visibility)
> 
> Most of the time went into creating custom icons etc. Here some screenshots of the progress so far
> 
> Here I still need to find out how to make only the orange text (Instrument name) bigger so that it won't affect the font size within the buttons.
> 
> 
> 
> 
> 
> Basic Cubase controls (may add/adjust some things)
> 
> 
> 
> 
> 
> Visibility control panel with lots of custom pics.


@Skyroads wow seem finally you have made it work for Cubase as I am still struggling & scratching my brains, could you please share the coding stuff you have done for these buttons and sliders. Or your Osc file for reference on what all settings need to be filled. Also as you also on PC does your virtual port changes every time you start as mine keep changing so don't know how to keep it the same port numbers as this leads to waste of linking those ports to buttons and sliders every now and then. Thank you in advance.


----------



## Manaberry

@spyki2000 There is a quick example of how widgets can communicate together within a single scope.






Open Stage Control (Tutorial) - An alternative to Lemur and TouchOSC


Hey there, small update. Not so much time this week. But I finished the Transpose and Nudge module today. BR Joe




vi-control.net




I have no time to provide more help, but there are some interesting posts and files in this thread.


----------



## spyki2000

Manaberry said:


> @spyki2000 There is a quick example of how widgets can communicate together within a single scope.
> 
> 
> 
> 
> 
> 
> Open Stage Control (Tutorial) - An alternative to Lemur and TouchOSC
> 
> 
> Hey there, small update. Not so much time this week. But I finished the Transpose and Nudge module today. BR Joe
> 
> 
> 
> 
> vi-control.net
> 
> 
> 
> 
> I have no time to provide more help, but there are some interesting posts and files in this thread.


Hey, Thanks for sharing will go through it and see if I can crack it


----------



## Markrs

MauroPantin said:


> That makes sense. More power to him, like you said, there's software to fulfill that functionality.
> 
> I would love it if more music software supported *both *OSC and MIDI. I use Reaper and it supports straight OSC messaging as a shortcut, so I don't really use MIDI translation of any kind for it. My shortcuts are listed as "/quantization" and things like that, they show up as the address or the OSC ID and no middleman is needed. My entire Reaper panel has no MIDI messaging of any kind save for the VSTi control section.


If it is okay, would be great if you could explain how this works as I intended to send midi CC to Reaper, or if you could post an example that I could try out in OSC that would be very helpful. Love the template you built, I will be building something similar.


----------



## MauroPantin

Markrs said:


> If it is okay, would be great if you could explain how this works as I intended to send midi CC to Reaper, or if you could post an example that I could try out in OSC that would be very helpful. Love the template you built, I will be building something similar.


Happy to explain and happy to share the OSC layout, if it helps. Though it has a lot of shortcuts for custom scripts and actions, so I'm not sure how much use it is on its own. I'll start with the explanation and if it's not enough I'll include the layout, perhaps?

So, first things first, you have OSC set up in Reaper to receive OSC messages. From what you said before, it seems you are already there. But, just for the sake of being a thorough, here are my settings:











Obviously, local IP and listening port will vary according to your OSC config and LAN settings.

Next thing is, you need each distinct button and function to have its own osc address (which is reflected in the "address" field of the OSC sub-category). Like so:






Once you have that, you need to assign a shortcut to a Reaper action. You go to the action list, select the desired action, click "Add" on the "Shortcuts for selected action" section on the bottom left and then press the button on your touchscreen. You should see it reflected like so:






MIDI is similar, at least for CC messages. The address you want to refer to for CC messages is called "/vkb_midi/cc/1" for CC1. It would be "/vkb_midi/cc/11" for CC11, "/vkb_midi/cc/7" for CC7, and "/vkb_midi/cc/pitch" for pitch as it is on my template. There are other CCs that are addressable but I cant recall the exact label for each, though they are readily available in Reaper's documentation. No need to add any shortcut in Reaper's actions, these are "reserved" OSC actions and Reaper already knows what they mean.

Those OSC addresses control the behavior of Reaper's Virtual MIDI Keyboard, and are thus the same as using said keyboard or any other MIDI input. You just need to make sure that your MIDI tracks have "All MIDI inputs" as it's input device, so that you can combine this with whatever other MIDI hardware or software you are using. 

Let me know if that clears it up. If not I'll just post my layout, though it is pretty useless without binding the actions to the shortcuts, I think.


----------



## robgb

Okay, I've just decided to give this a try. Set up was pretty easy with the new version. I'm able to create individual buttons that send CC data to Reaper and work perfectly. But I've run into some trouble trying to create a Dropdown Menu.

The Menu creates fine. Displays as programmed. But when I add a script to make each menu item communicate with Reaper, I get nothing. For example:

if (value == "WOODWINDS") {
send('midi:OSC',/control,15,1)
}
else
if (value == "BRASS") {
send('midi:OSC',/control,15,2)
}
else
if (value == "STRINGS") {
send('midi:OSC',/control,15,3)
}
else
if (value == "PERCUSSION") {
send('midi:OSC',/control,15,4)
}

It's set to send cc controls to channel 15, CC1-4. I've put the script in the "Value" tab of the editor. No response when I use the menu.

Again, the single buttons work fine with those same settings (15, 1-4). Clearly, I'm doing something wrong.


----------



## Markrs

MauroPantin said:


> Happy to explain and happy to share the OSC layout, if it helps. Though it has a lot of shortcuts for custom scripts and actions, so I'm not sure how much use it is on its own. I'll start with the explanation and if it's not enough I'll include the layout, perhaps?
> 
> So, first things first, you have OSC set up in Reaper to receive OSC messages. From what you said before, it seems you are already there. But, just for the sake of being a thorough, here are my settings:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Obviously, local IP and listening port will vary according to your OSC config and LAN settings.
> 
> Next thing is, you need each distinct button and function to have its own osc address (which is reflected in the "address" field of the OSC sub-category). Like so:
> 
> 
> 
> 
> 
> 
> Once you have that, you need to assign a shortcut to a Reaper action. You go to the action list, select the desired action, click "Add" on the "Shortcuts for selected action" section on the bottom left and then press the button on your touchscreen. You should see it reflected like so:
> 
> 
> 
> 
> 
> 
> MIDI is similar, at least for CC messages. The address you want to refer to for CC messages is called "/vkb_midi/cc/1" for CC1. It would be "/vkb_midi/cc/11" for CC11, "/vkb_midi/cc/7" for CC7, and "/vkb_midi/cc/pitch" for pitch as it is on my template. There are other CCs that are addressable but I cant recall the exact label for each, though they are readily available in Reaper's documentation. No need to add any shortcut in Reaper's actions, these are "reserved" OSC actions and Reaper already knows what they mean.
> 
> Those OSC addresses control the behavior of Reaper's Virtual MIDI Keyboard, and are thus the same as using said keyboard or any other MIDI input. You just need to make sure that your MIDI tracks have "All MIDI inputs" as it's input device, so that you can combine this with whatever other MIDI hardware or software you are using.
> 
> Let me know if that clears it up. If not I'll just post my layout, though it is pretty useless without binding the actions to the shortcuts, I think.


This fantastic, I will also have a look at the Reaper manual for the reserved shortcuts. If you are happy to share your OSC layout that would be amazing. How I learn is to create a new tab on a OSC layout copy functions into it and have a play around, plus from your screengrab I think we both want similar types of short cuts.


----------



## Markrs

MauroPantin said:


> Happy to explain and happy to share the OSC layout, if it helps. Though it has a lot of shortcuts for custom scripts and actions, so I'm not sure how much use it is on its own. I'll start with the explanation and if it's not enough I'll include the layout, perhaps?
> 
> So, first things first, you have OSC set up in Reaper to receive OSC messages. From what you said before, it seems you are already there. But, just for the sake of being a thorough, here are my settings:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Obviously, local IP and listening port will vary according to your OSC config and LAN settings.
> 
> Next thing is, you need each distinct button and function to have its own osc address (which is reflected in the "address" field of the OSC sub-category). Like so:
> 
> 
> 
> 
> 
> 
> Once you have that, you need to assign a shortcut to a Reaper action. You go to the action list, select the desired action, click "Add" on the "Shortcuts for selected action" section on the bottom left and then press the button on your touchscreen. You should see it reflected like so:
> 
> 
> 
> 
> 
> 
> MIDI is similar, at least for CC messages. The address you want to refer to for CC messages is called "/vkb_midi/cc/1" for CC1. It would be "/vkb_midi/cc/11" for CC11, "/vkb_midi/cc/7" for CC7, and "/vkb_midi/cc/pitch" for pitch as it is on my template. There are other CCs that are addressable but I cant recall the exact label for each, though they are readily available in Reaper's documentation. No need to add any shortcut in Reaper's actions, these are "reserved" OSC actions and Reaper already knows what they mean.
> 
> Those OSC addresses control the behavior of Reaper's Virtual MIDI Keyboard, and are thus the same as using said keyboard or any other MIDI input. You just need to make sure that your MIDI tracks have "All MIDI inputs" as it's input device, so that you can combine this with whatever other MIDI hardware or software you are using.
> 
> Let me know if that clears it up. If not I'll just post my layout, though it is pretty useless without binding the actions to the shortcuts, I think.


Sorry I have a quick question, as we didn't need to create a virtual midi port using Reapers built in OSC support, do we need to have a target on each item? On the video tutorials each item points has a target which is normally the virtual midi port I.e. MIDI:OSC if the virtual midi port was called OSC.


----------



## MauroPantin

Sure, I'll upload my layout later today when I get to the studio. 

There's no need for a MIDI port for Reaper unless you are using MIDI to communicate with it. I only use OSC messages for it, as explained above. For Dorico... That's another thing. I do use MIDI there, along with MIDIKey2Key


----------



## MauroPantin

Markrs said:


> This fantastic, I will also have a look at the Reaper manual for the reserved shortcuts. If you are happy to share your OSC layout that would be amazing. How I learn is to create a new tab on a OSC layout copy functions into it and have a play around, plus from your screengrab I think we both want similar types of short cuts.


Here it is. There's a bit of functionality that is not quite there yet. Filter by rhythm is not currently working (it's a WIP) and display track info is not there yet either. But other than that it should be sending OSC messages for all others. You need to include the .js file in the "custom module" section when you start the OSC server. Hope you enjoy!


----------



## Markrs

MauroPantin said:


> Here it is. There's a bit of functionality that is not quite there yet. Filter by rhythm is not currently working (it's a WIP) and display track info is not there yet either. But other than that it should be sending OSC messages for all others. You need to include the .js file in the "custom module" section when you start the OSC server. Hope you enjoy!


Thank you Mauro, can't wait to have a mess around with it!


----------



## robgb

Gotta say I've fallen completely in love with Open Stage Control. Here's a shot of my new X/Y pad with articulation switching that I run from an old Android phone. I'm using modals to tab between different versions. The articulation switches trigger Reaticulate in Reaper.


----------



## Manaberry

@robgb Smooth and very simple UI but yet powerful. Great job! Happy to see you were able to recycle an old android phone


----------



## stigc56

Hi
I have a question to @Mihkel Zilmer OR some of you who have used his set-up: When I change the MIDI port assignment according to the latest info:
























I still get errors in the log, because the buttons are assigned oscin:








Is there an updated json file or??
Thanks in advance!


----------



## zig

select all the button and replace with target = midi:OSCtoDAW


----------



## stigc56

Thanks!


----------



## stigc56

I finally have a working version of Mihkel Zilmer's set-up for articulation switching in Nuendo!
I wonder if anyone has succeeded in changing the COLOR of the buttons according to text-string that is loaded when I select a MIDI track. If it was possible to color-code the different articulation buttons in OSC according to "longs" = red "short" = blue and so on, it would really smart, and improve the readability a lot.


----------



## Manaberry

I'm doing so for the library class (strings, brass, etc... I've talked about it in the tutorial), but you can definitely do that color thing for the sample nature (long, short, etc.)
You just have to store the color value in the corresponding array in the external javascript file.


OR

Longs, shorts, etc... go to the same buttons across all libraries, so you just have to change the button color directly in OSC. (that's the "easy" way)


----------



## stigc56

Thanks a lot for your help and interest!
Okay, what I would like to do, and it follows your statement , 
_You just have to store the color value in the corresponding array in the external javascript file._

is that all the longs is colored red, shorts green, legato yellow and deco - as you call them - purple.
In the script, that Mihkel has supplied, the text of all buttons are combined in a string like this:





I imagine it could be possible to create the above text string AND expand every entry ('Staccato' , 'Portato Short' ..... ) with a second field, containing a number that could control the color of the button that are filled with the text. If 1 = red, 2= green, 3=yellow and 4=purple, the list would be something like:
'Staccato',2,'Portato Short',2, ...... 'Legato',3, and so on.
Do you think that is possible?
In Mihkel's script which is 1095 lines!, the last section - after all the different instruments and their articulations, there is this code: 







This is the actual code that runs AFTER a track i selected in Nuendo.
I really don't know much about this - Mihkel wrote the code - but I would be really interested in the possibility of changing it to address the color of the each assigned button. I think it would really improve usability.
Any help much appreciated
Regards Stig Christensen MUSICMIND


----------



## Arsenal

Anyone has an idea or list of values that studio one does send out? for example letting openstagecontrol know which track is selected. S1 seems to be somehow behind in this regard
I tried to contact presonus support who are normally very helpful when setting up a touchosc and osc setup but they couldnt really help me.
Also of course HUI values.
Maybe via external instruments presets like faderport and convert the messages.
Also a editor for S1 external instrument .txts would rock very much (not in OSC, just generally)

Thanks guys

Also: Does anyone know if its possible to put in a midi monitor (with filters) as a widget?

Also: how is bi-directionality / visual feedback archived?


----------



## jrmmusic

Please forgive the noob inquiry, but I'm very new to OSC and this seems like the place with a lot of OSC wisdom! I'm coming from lemur and still trying to understand what I'm working with here. 

I'm currently in the process of re-creating one of my lemur templates into a OSC template. In lemur I have a set of radio switches that switch the quantize grid in Cubase (ex. from 1/1 to 1/8...etc). In OSC, I used a menu widget to switch between the 1/1, 1/2 and so on. But I'm still unsure how to assign separate midi assignments to each. I know I assign that in the "preargs" but I can only seem to assign one channel and one midi cc assignment. So the question is how do you assign a menu with multiple items different cc values for each item in the menu?

Any help is greatly appreciated!


----------



## Manaberry

Hey @jrmmusic

You have to tell the widget to use the current value, which will be sent every time the menu state changes.
To do so, you have to write @{this.value} in the preArgs. This refers to the parent ID (the menu in your case), but you can also use any widget ID to retrieve their value.

It should looks like:



Code:


[
   1,
   @{this.value}
]


----------



## jrmmusic

Manaberry said:


> Hey @jrmmusic
> 
> You have to tell the widget to use the current value, which will be sent every time the menu state changes.
> To do so, you have to write @{this.value} in the preArgs. This refers to the parent ID (the menu in your case), but you can also use any widget ID to retrieve their value.
> 
> It should looks like:
> 
> 
> 
> Code:
> 
> 
> [
> 1,
> @{this.value}
> ]


Oh, ok I think I got it. Thanks a ton for the fast reply! I'll keep working with it all and reading through the online docs.

Appreciate your help!


----------



## Brobdingnagian

*Any Logic Pro users finding success with this?*

After searching this amazing thread, I only saw two mentions about using this on a Mac with Logic Pro....actually, they were questions. Has anyone used this successfully in a professional setting with Logic and had it work reliably and consistently? I have been using Touch OSC on an iPad for at least a decade, but looking to up things to take advantage of this outstanding application.


----------



## justjero

Hi, cool stuff! Does this also work with ableton 11?


----------



## Manaberry

justjero said:


> Hi, cool stuff! Does this also work with ableton 11?



Yes, check https://remotify.io/ to make a proper Ableton compatible controller.


----------



## Loïc D

Brobdingnagian said:


> *Any Logic Pro users finding success with this?*
> 
> After searching this amazing thread, I only saw two mentions about using this on a Mac with Logic Pro....actually, they were questions. Has anyone used this successfully in a professional setting with Logic and had it work reliably and consistently? Using Touch and OSC on an iPad for at least a decade, but looking to up things to take advantage of this outstanding application.


Same boat here. I think I was one of the guys who already asked before...


----------



## justjero

Can you do this on a touch display aswel?


----------



## Brobdingnagian

Loïc D said:


> Same boat here. I think I was one of the guys who already asked before...


Nous ne pouvons pas être les seuls... cependant, apparemment ainsi!


----------



## justjero

Manaberry said:


> Yes, check https://remotify.io/ to make a proper Ableton compatible controller.


do you have an discord or something so you can help me out a bit ?


----------



## Manaberry

justjero said:


> do you have an discord or something so you can help me out a bit ?


I don't have time sorry. I'm on a gig right now.
It's fairly simple, you create MIDI messages with OSC, you translate them to Ableton actions using Remotify. Check on Youtube, there is plenty of videos about it.

Good luck!


----------



## justjero

Manaberry said:


> I don't time sorry. I'm on a gig right now.
> It's fairly simple, you create MIDI messages with OSC, you translate them to Ableton action using Remotify. Check on Youtube, there is plenty of videos about it.
> 
> Good luck!


sorry i'm a noob at this stuff are there good tutorials out there?


----------



## justjero

Do you have an template for live ? so i can figure out how to make my own


----------



## jononotbono

I've only just looked into this and I've been itching to create my own Touch Screen Template and although I could use Lemur or Touch OSC, I want to use my native 27" touch screen for other things (not just a touch screen template) like seeing plugins and viewing web browsers (or anything else) so this could be perfect. Just getting ready for the incoming brain melt learning all this! Thanks for posting about this!


----------



## Markrs

jononotbono said:


> I've only just looked into this and I've been itching to create my own Touch Screen Template and although I could use Lemur or Touch OSC, I want to use my native 27" touch screen for other things (not just a touch screen template) like seeing plugins and viewing web browsers (or anything else) so this could be perfect. Just getting ready for the incoming brain melt learning all this! Thanks for posting about this!


Glad to see you are taking a look at this. I have put building my own OSC template on hold for now, but love what it can do. 

One of the best ones for interacting with a DAW, controlling everything including all the parameters in plugins, with full syncing can be found here: 









ReaperControl OSC-Template


Hi there, here is a port of the ReaperControl Lemur template: ReaperControl_20221118.json (974.4 KB) Regards, mj




openstagecontrol.discourse.group





It is designed to be used with Reaper and I think it is worth trying out. I plan to use as a template for my mixer and plugin parameter area. Then create a new panel for managing articulations etc.


----------



## jononotbono

Markrs said:


> Glad to see you are taking a look at this. I have put building my own OSC template on hold for now, but love what it can do.
> 
> One of the best ones for interacting with a DAW, controlling everything including all the parameters in plugins, with full syncing can be found here:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> ReaperControl OSC-Template
> 
> 
> Hi there, here is a port of the ReaperControl Lemur template: ReaperControl_20221118.json (974.4 KB) Regards, mj
> 
> 
> 
> 
> openstagecontrol.discourse.group
> 
> 
> 
> 
> 
> It is designed to be used with Reaper and I think it is worth trying out. I plan to use as a template for my mixer and plugin parameter area. Then create a new panel for managing articulations etc.


I have started using Reaper for making a Sample Library so I will check this out but I am not as fluent in Reaper as I am Cubase.


I just set up OSC and got a couple of buttons working fine. I now need to read the manual and learn the commands because I can't make every single button using /control and cc values surely? 😂

What are people using to just simply assign buttons for selecting PLE and LE commands? And Cubase commands? 

I'm also intrigued about faders, Knobs and XY Pads. I need to read what I have to use to not have the faders as tap buttons etc.

Finally, I can building a contextual touchscreen template exactly as I want and have all these nice features pop up and hide as and when I need them. Excited but also secretly bitching to myself because I know how much time this will take!


----------



## jononotbono

I'm looking at the documentation...






Is there any way to use Ctrl-NRPN that you find in Cubase?






Just gives options for thousands of commands if so. I'm probably just being stupid and missing something.


----------



## jononotbono

Basic at the minute but not a bad start for my first day with it. I'm loving the idea of using this more and more. I think being able to script in cartoon images of ones self is the tipping point really! 😂


----------



## Manaberry

I'm having a hard time making sysex beat clock working with Pro Tools (but the MTC works like a charm.) I got the data, but no clue how to translate it.

Any idea?


----------



## jononotbono

A work in progress of what I've made since starting 3 days ago. Absolutely loving the scope of what can be done with OSC. Thanks again @Manaberry for making this thread!


----------



## Markrs

jononotbono said:


> A work in progress of what I've made since starting 3 days ago. Absolutely loving the scope of what be done with OSC. Thanks again @Manaberry for making this thread!



Some great work Jono


----------



## jononotbono

Markrs said:


> Some great work Jono


We’re all a bunch of nerds 😂


----------



## jononotbono

I apologise if this is covered somewhere in this thread and I will no doubt read every page soon but what are people using for icons? I like the ideas of making my own but I have to be realistic here. I could spend a year making something and not do music again so using some already existing ones would be great. Has anyone got a full collection of DAW icons for sale?


----------



## Manaberry

jononotbono said:


> We’re all a bunch of nerds 😂


 Yes... Haha. Today I'm gonna add another circular menu for the velocity selection because... why not!

Great work so far Jono! If I may, I would suggest a nice blinking effect on your character when you press the sustain pedal.


----------



## jononotbono

Manaberry said:


> Great work so far Jono! If I may, I would suggest a nice blinking effect on your character when you press the sustain pedal.


You're an artist! 😂


----------



## Manaberry

jononotbono said:


> I apologise if this is covered somewhere in this thread and I will no doubt read every page soon but what are people using for icons? I like the ideas of making my own but I have to be realistic here. I could spend a year making something and not do music again so using some already existing ones would be great. Has anyone got a full collection of DAW icons for sale?


There are some base64 icons here.

You can easily encode png in base, but it's kind of heavy for the template.


Jean-Emmanuel has implemented Font-Awesome icons to OSC.
You can easily use them just by adding "^" in front of each icon's name.

For instance:



Code:


^angle-double-right


----------



## Drjay

jononotbono said:


> I'm looking at the documentation...
> 
> 
> 
> 
> 
> 
> Is there any way to use Ctrl-NRPN that you find in Cubase?
> 
> 
> 
> 
> 
> 
> Just gives options for thousands of commands if so. I'm probably just being stupid and missing something.


Don't know if you got an answer already. Basically NRPN/RPN is just a bunch of CTRL change messages you need to parse in the correct order. Here is an example from my custom module js file:

var [channel, ctrl, value] = args.map(arg=>arg.value)
if (channel ==16){
switch (ctrl){
case 99:
nrpnCmd["99"]= value;
break;
case 98:
nrpnCmd["98"]= value;
break;
case 38:
nrpnCmd["38"]= value;
console.log(nrpnCmd)
var address=(nrpnCmd["99"]<<7) | nrpnCmd["98"];
var nrpnVal=(nrpnCmd["6"]<<7) | nrpnCmd["38"];
console.log(address)
console.log('Nrpn Val in: ', nrpnVal)
case 6:
nrpnCmd["6"]= value;
break;
}
return
}


----------



## jononotbono

Drjay said:


> Don't know if you got an answer already. Basically NRPN/RPN is just a bunch of CTRL change messages you need to parse in the correct order. Here is an example from my custom module js file:
> 
> var [channel, ctrl, value] = args.map(arg=>arg.value)
> if (channel ==16){
> switch (ctrl){
> case 99:
> nrpnCmd["99"]= value;
> break;
> case 98:
> nrpnCmd["98"]= value;
> break;
> case 38:
> nrpnCmd["38"]= value;
> console.log(nrpnCmd)
> var address=(nrpnCmd["99"]<<7) | nrpnCmd["98"];
> var nrpnVal=(nrpnCmd["6"]<<7) | nrpnCmd["38"];
> console.log(address)
> console.log('Nrpn Val in: ', nrpnVal)
> case 6:
> nrpnCmd["6"]= value;
> break;
> }
> return
> }


Thank you! Very helpful!


----------



## jononotbono

Manaberry said:


> There are some base64 icons here.
> 
> You can easily encode png in base, but it's kind of heavy for the template.
> 
> 
> Jean-Emmanuel has implemented Font-Awesome icons to OSC.
> You can easily use them just by adding "^" in front of each icon's name.
> 
> For instance:
> 
> 
> 
> Code:
> 
> 
> ^angle-double-right


Brilliant!


----------



## Brobdingnagian

Anyone in Logic having a solid go at this?

...Bueller


----------



## jononotbono

I've got a question if anyone here can help. As I create Modal buttons and have other modal buttons inside each one it's a great way of creating sub menus and other pages. However, I'm finding that I need to press the touch screen as many times as there are sub modal panels (I don't want to say panels because they are different). Is there a way of scripting OSC so when you want to get out of a sub menu part of a template it instantly closes all open windows/panels etc and they all close/revert back to normal?

Also is there a way of having a Modal panel staying open and being able to to touch buttons on an actual panel and be able to use both at the same time?

Sorry if my terminology is a bit off at the minute.


----------



## Drjay

jononotbono said:


> I've got a question if anyone here can help. As I create Modal buttons and have other modal buttons inside each one it's a great way of creating sub menus and other pages. However, I'm finding that I need to press the touch screen as many times as there are sub modal panels (I don't want to say panels because they are different). Is there a way of scripting OSC so when you want to get out of a sub menu part of a template it instantly closes all open windows/panels etc and they all close/revert back to normal?
> 
> Also is there a way of having a Modal panel staying open and being able to to touch buttons on an actual panel and be able to use both at the same time?
> 
> Sorry if my terminology is a bit off at the minute.


Relating to your last question: I don‘t think it is possible (at least not easily) since it is not the intention of a modal. I use tabs with hidden headers sometimes, and set the visible tab via a variable, which gets triggered elsewhere. Additionally I often use a variable in the ‚visible‘ property of a widget in oder to create a custom logic.


----------



## jononotbono

Hmmm, I may have gone about designing my touch screen controller a little bit wrong then. It seems that if I use Panels and create tabs inside each panel then it seems like one press on each I can select the next tab and whatever is on the tab. When I create menus using Modal, they need to be closed by the number of presses it takes to open whatever is in a modal panel. For example. If you set up a modal button and that opens an edit window and inside that edit window you have another modal panel that has some quantise buttons. And inside the quantise panel (for example) a midi panel for Velocities). In order to get out of this whole thing I'd need to press anywhere on the touch screen 3 times. Once to close to Midi panel for Velocities window. Then again to close the Quantise Panel. Then lastly to close the initial modal panel. Is my understanding correct with how this works and there is no way of changing this behaviour? If not, I'll have to change this stuff to Panels and tabs (for the most part). Less clicks/taps is always preferred (for me) when using this kind of thing.

Another thing I am wondering is (and I'll say a scenario to give context)...

I have a main panel on half the window section that has tabs. I also have a model panel that opens up on the bottom half. Whilst I have the panel on the top half open showing a lot of midi editing buttons, I can also open the modal panel that opens underneath and at the same time. However, I can only touch things inside the modal panel and not anything in the panel above. Each time I touch the touch screen it closes each modal panel until they are all closed and then I can press the buttons in the panel above (but then the model panel is shut). Would the solution to being able to do this be using two panels? One above and one below? I haven't tried using multiple panels at the same time yet.

I'm just backing everything I've done up to have a mess around with panels etc.


----------



## Drjay

jononotbono said:


> Hmmm, I may have gone about designing my touch screen controller a little bit wrong then. It seems that if I use Panels and create tabs inside each panel then it seems like one press on each I can select the next tab and whatever is on the tab. When I create menus using Modal, they need to be closed by the number of presses it takes to open whatever is in a modal panel. For example. If you set up a modal button and that opens an edit window and inside that edit window you have another modal panel that has some quantise buttons. And inside the quantise panel (for example) a midi panel for Velocities). In order to get out of this whole thing I'd need to press anywhere on the touch screen 3 times. Once to close to Midi panel for Velocities window. Then again to close the Quantise Panel. Then lastly to close the initial modal panel. Is my understanding correct with how this works and there is no way of changing this behaviour? If not, I'll have to change this stuff to Panels and tabs (for the most part). Less clicks/taps is always preferred (for me) when using this kind of thing.
> 
> Another thing I am wondering is (and I'll say a scenario to give context)...
> 
> I have a main panel on half the window section that has tabs. I also have a model panel that opens up on the bottom half. Whilst I have the panel on the top half open showing a lot of midi editing buttons, I can also open the modal panel that opens underneath and at the same time. However, I can only touch things inside the modal panel and not anything in the panel above. Each time I touch the touch screen it closes each modal panel until they are all closed and then I can press the buttons in the panel above (but then the model panel is shut). Would the solution to being able to do this be using two panels? One above and one below? I haven't tried using multiple panels at the same time yet.
> 
> I'm just backing everything I've done up to have a mess around with panels etc.


I'm no expert, but I quickly tested an idea, which -in principle- works. The open/close state is controlled by the value of the modal widget. Now create a button and make all of the modals values dependent from the button state: e.g. @{my_button} This way you can close all windows at once. Now you can go wild: create several buttons and script the actions either directly in the GUI or in the custom module. 
As I said, I prefer controlling panels (and tabs therein) via variables or scripts. Since you can script position, size , visibilty etc. you can create your own custom "window management".


----------



## jononotbono

Drjay said:


> I'm no expert, but I quickly tested an idea, which -in principle- works. The open/close state is controlled by the value of the modal widget. Now create a button and make all of the modals values dependent from the button state: e.g. @{my_button} This way you can close all windows at once. Now you can go wild: create several buttons and script the actions either directly in the GUI or in the custom module.
> As I said, I prefer controlling panels (and tabs therein) via variables or scripts. Since you can script position, size , visibilty etc. you can create your own custom "window management".


I need to learn more. This is beyond my skill set at the moment.


----------



## jononotbono

I'm basically rebuilding everything using Panels and not Modal as you can press buttons on multiple open panels without anything automatically closing. That's great.

I followed a tutorial on on creating a panel and then using tabs and then a little line of script to select each tab of a panel which sequentially selects (from top to bottom) the tabs using 0, 1, 2 etc. Works great. However, I really need to create a Panel inside a Panel and I'm lost as to what the script should be for selecting the "child" panel? Any help would be much appreciated!


----------



## Drjay

jononotbono said:


> I'm basically rebuilding everything using Panels and not Modal as you can press buttons on multiple open panels without anything automatically closing. That's great.
> 
> I followed a tutorial on on creating a panel and then using tabs and then a little line of script to select each tab of a panel which sequentially selects (from top to bottom) the tabs using 0, 1, 2 etc. Works great. However, I really need to create a Panel inside a Panel and I'm lost as to what the script should be for selecting the "child" panel? Any help would be much appreciated!


Can you elaborate on this? I don‘t get the exact problem. Contrary to Lemur, Openstage has no strict object hierarchy. You can address every widget directly by its name, regardless of its position in the ‚object tree‘. Maybe it’s best, you post an example.


----------



## jononotbono

Drjay said:


> Can you elaborate on this? I don‘t get the exact problem. Contrary to Lemur, Openstage has no strict object hierarchy. You can address every widget directly by its name, regardless of its position in the ‚object tree‘. Maybe it’s best, you post an example.


Sure thing man. It’s driving me crazy and I’m clearly not understanding something. I’ll make a short video just to show what my problem. As I really appreciate all this help!


----------



## Manaberry

You can get every widget's value using their ID.

You have a button with the ID: Button1. To retrieve the state (0 or 1), you just have to call that value by using @{Button1.value}


----------



## jononotbono

I made this video showing what my problems are and what I'd like to be able to do. Hopefully you all know how to fix this or advise what the best way of doing what I want to do.


----------



## jononotbono

Manaberry said:


> You can get every widget's value using their ID.
> 
> You have a button with the ID: Button1. To retrieve the state (0 or 1), you just have to call that value by using @{Button1.value}


What does retrieving the state of a button mean? Making the switch go back to either on or off (basically how its set to begin with... if you had mixing faders and you have the starting state to not be muted or soloed and then retrieve that starting state? Maybe I'm getting this wrong haha)?


----------



## Manaberry

By doing so you can tell a couple of widgets to read the same button's state. Like if you want to open or close multiple stuff at the same time. Or to have XY pad and faders sharing the same value. Or CSS {display:block/none} elements of your template based on whether you have selected 1/4 or 1/8 time signature.


----------



## Drjay

jononotbono said:


> I made this video showing what my problems are and what I'd like to be able to do. Hopefully you all know how to fix this or advise what the best way of doing what I want to do.



Pretty good template  This Reaper thing looks interesting, too.
If I can make it,I’ll have a look this evening. But right now I have to look after my barbecue


----------



## jononotbono

Drjay said:


> Pretty good template  This Reaper thing looks interesting, too.
> If I can make it,I have look this evening. But right now I have to look after my barbecue


Man, I would appreciate this. And I totally understand! 😂

Showing that Reaper template shows that having a Modal box open still allows for the ability to press buttons outside of the modal box and I'm just confused why I can't do that. Especially when I have copied the settings to try it out.


----------



## Drjay

jononotbono said:


> Man, I would appreciate this. And I totally understand! 😂
> 
> Showing that Reaper template shows that having a Modal box open still allows for the ability to press buttons outside of the modal box and I'm just confused why I can't do that. Especially when I have copied the settings to try it out.


Just a quick note: I found this link:https://openstagecontrol.discourse.group/t/modal-window-settings/955
As far as I got it , the modal closes when clicking in the same panel, only.


----------



## Markrs

jononotbono said:


> Man, I would appreciate this. And I totally understand! 😂
> 
> Showing that Reaper template shows that having a Modal box open still allows for the ability to press buttons outside of the modal box and I'm just confused why I can't do that. Especially when I have copied the settings to try it out.


Watching your video it seems the reaper control one the modal doesn't dim the background of the other buttons, where as yours does. Yours is acting like an overlay whereas the other modal is being limited to just the box the content appears in.

When you click in any area outside of the modal you aware effectively closing each overlay.

My days using CSS code are long gone and I have forgotten nearly everything but I think you can have modals that don't create a layer that covers the screen but is limited to a set area. I imagine there is a CSS parameter to manage this issue. How to do this is probably in the Reaper Control JSON file but it is huge, as I had a look at it.


----------



## jononotbono

Drjay said:


> Just a quick note: I found this link:https://openstagecontrol.discourse.group/t/modal-window-settings/955
> As far as I got it , the modal closes when clicking in the same panel, only.


For me, the modal boxes close when I click anywhere including outside of the box. However, like I show in the video, it takes a specific number of clicks/taps (depending on how many modals are inside modals.


----------



## Markrs

One option could be that in the main area it has a high z-index and where the modal appears has a low z-index

Basically main buttons have a z-index: 0 (this is the default I believe). Area you want the modal to go into has a z-index: -2 and the modal has a z-index: -1

Now the main buttons stay on top, but you can still work the modal. You will need a close button in the modal though.

Not sure if this helps as this knowledge is a bit fragmentary.


----------



## jononotbono

Markrs said:


> Watching your video it seems the reaper control one the modal doesn't dim the background of the other buttons, where as yours does. Yours is acting like an overlay whereas the other modal is being limited to just the box the content appears in.
> 
> When you click in any area outside of the modal you aware effectively closing each overlay.
> 
> My days using CSS code are long gone and I have forgotten nearly everything but I think you can have modals that don't create a layer that covers the screen but is limited to a set area. I imagine there is a CSS parameter to manage this issue. How to do this is probably in the Reaper Control JSON file but it is huge, as I had a look at it.


Your observations are absolutely correct. Now please remember everything you know. It must still be in your brain somewhere. 😂


----------



## Markrs

jononotbono said:


> Your observations are absolutely correct. Now please remember everything you know. It must still be in your brain somewhere. 😂


Hopefully my above post made sense. See everything as layers and you just need to ensure that the main buttons are the top layer.


----------



## jononotbono

Markrs said:


> One option could be that in the main area it has a high z-index and where the modal appears has a low z-index
> 
> Basically main buttons have a z-index: 0 (this is the default I believe). Area you want the modal to go into has a z-index: -2 and the modal has a z-index: -1
> 
> Now the main buttons stay on top, but you can still work the modal. You will need a close button in the modal though.
> 
> Not sure if this helps as this knowledge is a bit fragmentary.


Interesting. Where can I see the "Z Index" etc? I can't see that in the inspector so is this a console and script thing?


----------



## Markrs

jononotbono said:


> Interesting. Where can I see the "Z Index" etc? I can't see that in the inspector so is this a console and script thing?


Just done a search on the reapercontrol json and z-index isn't used. It has probably been assigned a variable that OSC interprets from the JSON with a corresponding variable. As I put doing OSC on hold I have looked at the manual. I will have a quick scan and see if I can find anything.


----------



## Markrs

jononotbono said:


> Interesting. Where can I see the "Z Index" etc? I can't see that in the inspector so is this a console and script thing?


As OSC interprets the JSON parameters into CSS it is a little hard to figure out what you need to change. I don't currently have everything installed to test stuff out.

I did however notice the below within modal options which might help:


contain#​booleantrueIf layout is vertical or horizontal, prevents children from overflowing the panel.

The default is "true" so this shouldn't be causing you an issue






Properties reference - Open Stage Control


Libre and modular OSC / MIDI controller




openstagecontrol.ammd.net


----------



## Markrs

@jononotbono Okay reapercontol uses panels not modals for the things you are trying to do. Try using panels again and then we might be able to debug any issues from that.


----------



## Drjay

jononotbono said:


> Your observations are absolutely correct. Now please remember everything you know. It must still be in your brain somewhere. 😂


Hi. The modals don't close, if they are included in a tab. Please find attached an example file.


----------



## jononotbono

Markrs said:


> @jononotbono Okay reapercontol uses panels not modals for the things you are trying to do. Try using panels again and then we might be able to debug any issues from that.


Yeah if you press that Wrench icon to the left of B, it is a Modal. Once you click the Modal wrench button, the settings modal box appears. It won't close till you select the close X button. However, whilst the Modal box is open, you are still able to press other buttons outside of the Modal box. Thats where I am so confused regarding Modal boxes and their functionality.

I'm more than happy to use panels but my problem, that I just can't work out is how to script a button to show a panel tab when the the button is inside a panel.

I can create buttons to select different Panel tabs when there is only one panel. But when I create a panel inside a panel, I can't get the buttons (or switches to "see" the panel and tabs).

This post is turning into the film Inception 😂


----------



## Markrs

Drjay said:


> Hi. The modals don't close, if they are included in a tab. Please find attached an example file.


Works well as a nested modal, should solve the issue @jononotbono has


----------



## Markrs

jononotbono said:


> Yeah if you press that Wrench icon to the left of B, it is a Modal. It that, once you click the Modal wrench button, the settings modal box appears. It won't close till you select the close X button. However, whilst the Modal box is open, you are still able to press other buttons outside of the Modal box. Thats where I am so confused regarding Modal boxes and their functionality.
> 
> I'm more than happy to use panels but my problem, that I just can't work out is how to script a button to show a panel tab when the the button is inside a panel.
> 
> I can create buttons to select different Panel tabs when there is only one panel. But when I create a panel inside a panel, I can't get the buttons (or switches to "see" the panel and tabs).
> 
> This post is turning into the film Inception 😂


Gotcha, sorry I think I misunderstood the problem before. So yes this is a modal inside a panel as @Drjay has demonstrated. Good job we have people on here that know what they are doing like @Drjay, unlike me


----------



## jononotbono

Drjay said:


> Hi. The modals don't close, if they are included in a tab. Please find attached an example file.


Sorry to be such basic human, but how do I use this script? I am scanning through it and trying to make sense of it? Do I open a new project and load it into a console?


----------



## Drjay

Markrs said:


> Works well as a nested modal, should solve the issue @jononotbono has


I would think so 
The rest is totally dependent on the logic you'd like to implement.


----------



## jononotbono

Drjay said:


> I would think so
> The rest is totally dependent on the logic you'd like to implement.


Please, help me fix my little life and then I can go on with the day without harassing you all haha


----------



## Drjay

jononotbono said:


> Sorry to be such basic human, but how do I use this script? I am scanning through it and trying to make sense of it? Do I open a new project and load it into a console?


Yes. Rename it to .json (i could not upload json and had to rename it to txt). Open a new session and load the file.


----------



## jononotbono

Drjay said:


> Yes. Rename it to .json (i could not upload json and had to rename it to txt). Open a new session and load the file.


Wicked. I just played about with it. So what you have done is great but can all of that go inside another panel or a modal? So basically you open a panel and then what appears is what you have already done but inside that panel? 

Also, I'm trying switch between tabs using external buttons and you have used switches. The switches thing is great so I may look into now as well


----------



## jononotbono

Markrs said:


> Gotcha, sorry I think I misunderstood the problem before. So yes this is a modal inside a panel as @Drjay has demonstrated. Good job we have people on here that know what they are doing like @Drjay, unlike me


No man, you are a great help. Hey, we all have out areas of expertise. Scripting is not one of mine. A little bit of knowledge with something like this goes a long way if you're determined to make something great!


----------



## Drjay

Your welcome (btw. thanks a lot for your Cubase logic editor scripts, they saved me a lot of work  ). While we are at it, I attached an example of nested tabs controlled via switches. Hope it's self explaining.


----------



## Drjay

jononotbono said:


> Wicked. I just played about with it. So what you have done is great but can all of that go inside another panel or a modal? So basically you open a panel and then what appears is what you have already done but inside that panel?
> 
> Also, I'm trying switch between tabs using external buttons and you have used switches. The switches thing is great so I may look into now as well


Haven't tried it, but I would think so. I see no reason, it shouldn't. 
Yes, switches are great for these radio button scenarios. I also often use a matrix of buttons, altough a little complicated to setup, I like the way you can customise the actions and properties of every single button in the matrix


----------



## jononotbono

Drjay said:


> Haven't tried it, but I would think so. I see no reason, it shouldn't.
> Yes, switches are great for these radio button scenarios. I also often use a matrix of buttons, altough a little complicated to setup, I like the way you can customise the actions and properties of every single button in the matrix


Yeah man flexibility is good. And thanks for sharing that json file. I've just understood how switches work with a panel and tabs.

I just successfully made a "nest" panel with switches that operate the tabs from the nested panel. 

I now need to understand how to make a button switch tabs when the button is on a nested panel or modal box and that button will show different tabs. I can't just do everything I want using Switches so buttons are essential. If I can learn that, then this is just gonna be one of theist days I've had recently! I almost feel like a king! 😂


----------



## MusicalG

jononotbono said:


> Yeah man flexibility is good. And thanks for sharing that json file. I've just understood how switches work with a panel and tabs.
> 
> I just successfully made a "nest" panel with switches that operate the tabs from the nested panel.
> 
> I now need to understand how to make a button switch tabs when the button is on a nested panel or modal box and that button will show different tabs. I can't just do everything I want using Switches so buttons are essential. If I can learn that, then this is just gonna be one of theist days I've had recently! I almost feel like a king! 😂


you're a mentalist ha ha, I love it  
Clever as well


----------



## jononotbono

I'm wondering if someone can take this json file I've just worked on and see if they can make this but using buttons instead of switches? I'd be forever thankful. @Drjay sending that JSON was so amazing to learn from.


----------



## Drjay

jononotbono said:


> Yeah man flexibility is good. And thanks for sharing that json file. I've just understood how switches work with a panel and tabs.
> 
> I just successfully made a "nest" panel with switches that operate the tabs from the nested panel.
> 
> I now need to understand how to make a button switch tabs when the button is on a nested panel or modal box and that button will show different tabs. I can't just do everything I want using Switches so buttons are essential. If I can learn that, then this is just gonna be one of theist days I've had recently! I almost feel like a king! 😂


Not sure, I got it right. Lets say you have a toggle button. Simply put the number of the tab(s) in the ‚on’ and ‚off‘ properties of the button. Then make value of the panel dependent on the button value (@{my_button}). For more complex operations, you will need script something or could use variables to hold the state of several widgets, or ...


----------



## jononotbono

MusicalG said:


> you're a mentalist ha ha, I love it
> Clever as well


I'm no where near as clever as the people in here! 😂


----------



## jononotbono

Drjay said:


> Not sure, I got it right. Lets say you have a toggle button. Simply put the number of the tab(s) in the ‚on’ and ‚off‘ properties of the button. Then make value of the panel dependent on the button value (@{my_button}). For more complex operations, you will need script something or could use variables to hold the state of several widgets, or ...


Ok, I'll digest this info and give it a go!


----------



## MusicalG

jononotbono said:


> I'm no where near as clever as the people in here! 😂


most of it goes over my head mate, so you are cleverer than me by far with this stuff, its fascinating stuff though, and I love your drive with everything you do, as we have already discussed 

I hope you get the info you seek, seems like you will from the helpful folks on here and your own tenacity  

Good luck my friend


----------



## jononotbono

Here's a little conundrum with switches...

A screen shot of 5 common time switches 6/4 - 2/4 on the right and then on the left, a dual switch doing 7/8 and 7/8

First question about switches is...

They are always on. How do you make switches start in an off state. So. for example, let's say you press a button and a panel opens and in this opened panel there are those switch buttons. However, I don't want any of them on until the user selects what they want to turn on.

Second question about this is...
I would like the switch on the left to actually control tabs in the panel that the switch on the right is controlling. Is that possible? I have made these 2 switches purely because I don't know how to make 1 switch that looks like that (An L Shape basically)


----------



## Drjay

jononotbono said:


> I'm wondering if someone can take this json file I've just worked on and see if they can make this but using buttons instead of switches? I'd be forever thankful. @Drjay sending that JSON was so amazing to learn from.





jononotbono said:


> Here's a little conundrum with switches...
> 
> A screen shot of 5 common time switches 6/4 - 2/4 on the right and then on the left, a dual switch doing 7/8 and 7/8
> 
> First question about switches is...
> 
> They are always on. How do you make switches start in an off state. So. for example, let's say you press a button and a panel opens and in this opened panel there are those switch buttons. However, I don't want any of them on until the user selects what they want to turn on.
> 
> Second question about this is...
> I would like the switch on the left to actually control tabs in the panel that the switch on the right is controlling. Is that possible? I have made these 2 switches purely because I don't know how to make 1 switch that looks like that (An L Shape basically)


Not sure, but '-1' deselects all switches, but this means tab '-1' is selected, which is non existant. Although it does not throw an error, I am not sure about colateral damage. Additionally the tab would be still visible.
With regards to the 2nd switch: why not? If you make the correponding tabs dependent on this switch. The drawback is, you switch the tabs of all switches to the right. 
If you want to keep the state of every single right 'instance' separately, you could keep track of the state of the switches in a variable an build the dependencies from there. But this gets complicated. A brute force idea would be to duplicate the left switches five times, link them to the tabs you want to control and hide the switches, which don't correspond to your righthand selection. You could also use Markrs suggestions with z-Indexes in this case.


----------



## jononotbono

Drjay said:


> Not sure, I got it right. Lets say you have a toggle button. Simply put the number of the tab(s) in the ‚on’ and ‚off‘ properties of the button. Then make value of the panel dependent on the button value (@{my_button}). For more complex operations, you will need script something or could use variables to hold the state of several widgets, or ...





Drjay said:


> Not sure, but '-1' deselects all switches, but this means tab '-1' is selected, which is non existant. Although it does not throw an error, I am not sure about colateral damage. Additionally the tab would be still visible.
> With regards to the 2nd switch: why not? If you make the correponding tabs dependent on this switch. The drawback is, you switch the tabs of all switches to the right.
> If you want to keep the state of every single right 'instance' separately, you could keep track of the state of the switches in a variable an build the dependencies from there. But this gets complicated. A brute force idea would be to duplicate the left switches five times, link them to the tabs you want to control and hide the switches, which don't correspond to your righthand selection. You could also use Markrs suggestions with z-Indexes in this case.


This is why I thought just having single buttons to select the tabs would be a lot easier for this. Have a button to select 4/4 tab and then it selects. Inside that I would still use switches as that's very efficient but I think buttons to select the tabs and then switches to select the tabs inside each tab.



Drjay said:


> Lets say you have a toggle button. Simply put the number of the tab(s) in the ‚on’ and ‚off‘ properties of the button. Then make value of the panel dependent on the button value (@{my_button}).


I'm unsure of how to do this. Makes sense reading it but in practise I still not grasping how to dow this.

Say there are 6 tabs, do I write it like this? I tried just writing 6 in the "on" part of the button panel but it just selects between 2 tabs. 

{
"Tab 1": 0,
"Tab 2": 1,
"Tab 3": 2,
"Tab 4": 3,
"Tab 5": 4,
"Tab 6": 5

}


----------



## Manaberry

@jononotbono You should try the circular menu! Very useful to save room on your template!


----------



## Drjay

jononotbono said:


> This is why I thought just having single buttons to select the tabs would be a lot easier for this. Have a button to select 4/4 tab and then it selects. Inside that I would still use switches as that's very efficient but I think buttons to select the tabs and then switches to select the tabs inside each tab.
> 
> 
> I'm unsure of how to do this. Makes sense reading it but in practise I still not grasping how to dow this.
> 
> Say there are 6 tabs, do I write it like this? I tried just writing 6 in the "on" part of the button panel but it just selects between 2 tabs.
> 
> {
> "Tab 1": 0,
> "Tab 2": 1,
> "Tab 3": 2,
> "Tab 4": 3,
> "Tab 5": 4,
> "Tab 6": 5
> 
> }


Yes, thats the drawback. You only have two states. Your idea would work with switches only.


----------



## Drjay

Anyway, I could not resist (you are challenging me and I am in the mood today  ). One last file to get you going, although I don't know, if it is what you wanted:
The variable 'myVar' stores the selected 'sub tab' of the tab selected in the right switch in an array. Have a look at scripts in the two switches. 'myVar' is linked to correponding tab's values, which are changed accordingly. I don't know , if this is the most elegant solution, but it works. Have fun ...


----------



## jononotbono

Manaberry said:


> @jononotbono You should try the circular menu! Very useful to save room on your template!


I was having a play with and I already have it in the template for a couple of things. I like it. 

However, some things, I feel, don’t make me want to have to instantly decide on choice (in this case having to keep my finger on the section tool button and releasing on selection) and having a menu that appears and sits there until I choose to close it is nice. It’s usually for those moments when I am in a trance and forget what I’m doing and especially forget why I have the menu open! 😂


----------



## jononotbono

I have finally figured out how to use Panels, Switches and Modal boxes to achieve what I want to do.

Finally, things are beginning to fall into place. Man, I am loving OSC! Thanks for everyone's help so far. No doubt I will be harassing you all again soon! 😂


----------



## Manaberry

Hi guys,

Just a friendly reminder that Jean-Emmanuel has a Patreon. In case you want to tip for his awesome work on Open Stage Control


----------



## Markrs

Manaberry said:


> Hi guys,
> 
> Just a friendly reminder that Jean-Emmanuel has a Patreon. In case you want to tip for his awesome work on Open Stage Control


Good shout @Manaberry. I prefer one of donations than Patreon, but it is no doubt Jean-Emmanuel deserves a contribution for all the time he has put in to creating OSC.


----------



## jononotbono

Manaberry said:


> Hi guys,
> 
> Just a friendly reminder that Jean-Emmanuel has a Patreon. In case you want to tip for his awesome work on Open Stage Control


I had no idea. Thanks. I'll definitely contribute. OSC is amazing.


----------



## Markrs

jononotbono said:


> I had no idea. Thanks. I'll definitely contribute. OSC is amazing.


Looking forward to your video on creating your finished OSC template (I assume one is coming once you have it finished?)!


----------



## jononotbono

Markrs said:


> Looking forward to your video on creating your finished OSC template (I assume one is coming once you have it finished?)!


Yeah, I can make a video but it may not be for a little while. One idea grows to the next and now I have some other ideas I want to try which I fear is going to send me plummeting into the deepest of Rabbit holes. Probably an entire warren. I want The Jono not Bonophonic Touch Controller to be the best it can be! 😂


----------



## zig

jononotbono said:


> I apologise if this is covered somewhere in this thread and I will no doubt read every page soon but what are people using for icons? I like the ideas of making my own but I have to be realistic here. I could spend a year making something and not do music again so using some already existing ones would be great. Has anyone got a full collection of DAW icons for sale?


Hi @jononotbono, if it helps, here is a macro tab of my Osc patch with some Icons. I will post my entire template soon...


----------



## jononotbono

zig said:


> Hi @jononotbono, if it helps, here is a macro tab of my Osc patch with some Icons. I will post my entire template soon...


Amazing. Did you make these yourself?


----------



## zig

Yes. it took me hours ... so if it can save you time that's great!
I use this site for icon : https://www.flaticon.com/
and this to encode 64 bits : https://www.base64-image.de/


----------



## stigc56

zig said:


> Hi @jononotbono, if it helps, here is a macro tab of my Osc patch with some Icons. I will post my entire template soon...


Hi
Impressive! I read your post earlier in the OSC forum, and wondered if you managed to make it all work. Hope to see your template. In the meantime I test Patchboard and it works very well, but doesn’t have all the macro functions.


----------



## Dewdman42

have any of you OSC gurus tried using this OSCulator controller to send which track is selected in LogicPro back to OpenStageControl?






OSCulator Plug-in for Logic Pro - OSCulator Forum


Description The OSCulator Plug-in for Logic Pro is a "Control Surface Plug-in" allowing control of Logic Pro using the Open Sound Control protocol (OSC). The aim is to create a clean and documented API so OSC applications are easier to interface with Logic Pro. The plug-in is compatible...



osculator.net


----------



## Loïc D

Dewdman42 said:


> have any of you OSC gurus tried using this OSCulator controller to send which track is selected in LogicPro back to OpenStageControl?
> 
> 
> 
> 
> 
> 
> OSCulator Plug-in for Logic Pro - OSCulator Forum
> 
> 
> Description The OSCulator Plug-in for Logic Pro is a "Control Surface Plug-in" allowing control of Logic Pro using the Open Sound Control protocol (OSC). The aim is to create a clean and documented API so OSC applications are easier to interface with Logic Pro. The plug-in is compatible...
> 
> 
> 
> osculator.net


I just tried yesterday!
No success so far but I’m total beginner on OSC & Open Stage Control.
I’m in for tips as well.


----------



## Dewdman42

Let us know if you get anywhere with that. That LogicPro control surface plugin they made is pretty much the same thing the Patchboard guy did. I have tested this control panel in LogicPro and I can tell you for sure that when its installed, then I can click on tracks in LogicPro...and OSC messages get sent out with the name and number of the track I selected. That should be all that is needed to have Open Stage Control respond by putting up the right keyswitch screen depending on the OSC message received when you click on tracks...just like Patchboard....except you'd be able to make a more customized touchpad interface using Open Stage Control I think.


----------



## Loïc D

Yes !
What I’m struggling with is how to connect Osculator & Open Stage Control.
I’ve tried various settings with no success but error messages stating port conflicts.
But choosing a track in LPX and seing messages in Osculator already brought tears to my eyes.
If I manage to sort this mess, I’ll make a video about it !


----------



## Dewdman42

You don't need to use OSCulator itself. Just use the control panel plugin that the OSCulator team made and then in OpenStageControl, it is able to listen for the OSC messages coming from the LogicPro control panel. LogicPro is able to send OSC messages directly. Its done through the ControlPanel feature of LogicPro. The OSCulator team just developed a control panel device that has a bunch fo OSC messages defined so that as you click on tracks in LogicPro..the OSC will be sent out. its probably just a matter of getting OpenStage Control to listen to the right OSC IP address and port...or perhaps tweak the control panel to send to the right ip/port...not sure exactly...I haven't worked with this stuff myself yet, just kind of sussing it out right now.

But for certain this is how Logic can notify OpenStageControl, via OSC commands...when you click on a track header or mixer strip.


----------



## stigc56

Is there a plug-in like this that works with Cubase?


----------



## 24dBFS

stigc56 said:


> Is there a plug-in like this that works with Cubase?


Try SHERLOCK VST from www.14bitmidi.com or wait for the new one from 14bitMIDI that will launch in a week or two.


----------



## justjero

How can you receive midi data from your daw so the fader sets to the right value?


----------



## Dewdman42

Controller device is how. I’ll try to make a more detailed post later


----------



## Dewdman42

stigc56 said:


> Is there a plug-in like this that works with Cubase?



Not from oscillator team I don’t think. But since you already bought patch board you have it from that. In theory you can do the same thing with cubase, use whatever he developed for cubase to be supported by patch board and then just make your own open stage control ui that communicates via OSC messages


----------



## stigc56

Well I’m testing Patchboard and I’m thinking about a touch screen, so There are still some aspects, that have to fall in place.


----------



## Dewdman42

So here's a quick explanation of whatever I know so far about using the OSCulator Control Surface plugin...

first, I think you probably have to buy OSCulator in order to download the Control Surface plugin that they made. Not entirely sure, here is the link in their forum where the plugin can be downloaded:






OSCulator Plug-in for Logic Pro - OSCulator Forum


Description The OSCulator Plug-in for Logic Pro is a "Control Surface Plug-in" allowing control of Logic Pro using the Open Sound Control protocol (OSC). The aim is to create a clean and documented API so OSC applications are easier to interface with Logic Pro. The plug-in is compatible...



osculator.net





I think maybe(?), that plugin can be used totally independently of OSCulator itself. OSCulator is just a convenient tool for observing the OSC message activity. If not, then OSCulator can be used to echo the OSC messages to OpenStageControl. I haven't done much with OSCulator yet, it has some of its own scripting ability, etc..maybe it will yet come in handy I'm not sure...but the Control Surface plugin they made for LogicPro is super interesting anyway.

(BTW you could theoretically create your own Control Surface plugin using the editor built into LogicPro, but I don't think most people, including me, understand it all well enough to do that.).

So anyway, I installed their Control Surface plugin. When I launch OSCulator and then LogicPro, LogicPro detects OSCulator and asks me if I want to use the control surface, etc.. Then its there.









Going to control surfaces Setup and controller assignments in LogicPro you can see some of the settings, which are gibberish to me...but anyway this is where the OSC messages are defined. I'm not sure yet how This control surface plugin was able to automatically connect to OSCulator at port 8000... that's an open question for getting this connected to OpenStageControl instead of OSCulator... But I think it should be possible.

I don't really know OSCulator yet either, so forgive me if I'm getting any detail wrong, but somehow once the Control Surface has made an initial connection to OSCulator at port 8000, a mapping is displayed in the top half of the window...and the bottom half of the window shows actual OSC messages that were exchanged:







Anyway, now I can click on track two and see the following OSC messages logged in OSCulator.






Then click on Track 3 and see more messages logged in OSCulator.






So there you have it... a Control Surface plugin sends OSC messages when you click on various things..and you just have to have OpenStageControl listening for it somehow.

Patchboard basically includes also a Control Surface plugin of its own that does this same kind of stuff...and something for Cubase...I don't know the details because I haven't purchased Patchboard (yet).

I just am wondering if anyone has tried using this much less expensive Control Surface plugin in conjunction with OpenStageControl...or perhaps one of you guys using PatchBoard's Control Surface plugins to drive OpenStageControl may end up with some interesting success also.


----------



## Loïc D

I managed to get Open Stage Control receiving messages from Logic Pro X through OSCulator.
A simple text field showing the current track name in LPX.
Though, I couldn’t manage to control LPX from OSC. So far, it’s only one way, but I’m investigating...


----------



## justjero

i got ableton working with osc now, how can you send osc messages to bome midi translator?


----------



## jononotbono

I really need some help and this is definitely a good place to be for OSC help! Spending the evening trying to work on my OSC template controller and I'm having trouble with panels and tabs.

I've filmed a video on my phone to quickly show the problem.

Every time I load my json save file, the bottom of my template shows two panel tabs at the same time (when only one should show). Everything is all weird looking. Then I manually click/tap on each button or switch and then everything reverts to how it should look. Wondering what I'm doing wrong?


----------



## Loïc D

Is there any way to set a default switch value at launch? 
(sorry, not helping, I’m super newbie at Open Stage Control - on Logic Pro).


----------



## jononotbono

Regarding my problem with Panel tabs. I'm using this script to hide the tab headers. Would this be messing anything up?

:host {
z-index:0;
}
.navigation {
display:none;
}
> .panel {
top: -1rem;
}


----------



## jononotbono

jononotbono said:


> Regarding my problem with Panel tabs. I'm using this script to hide the tab headers. Would this be messing anything up?
> 
> :host {
> z-index:0;
> }
> .navigation {
> display:none;
> }
> > .panel {
> top: -1rem;
> }


I don’t think this script is the cause of my problem as I tried with and without the script.


----------



## Manaberry

Do you mind sharing your project file? Would be easier to spot the issue.


----------



## jononotbono

Manaberry said:


> Do you mind sharing your project file? Would be easier to spot the issue.


Yeah man, no worries. I’ll send one in bit. Just need to turn all the gear on


----------



## jononotbono

Here's a JSON file showing with a panel within a panel and when the json file loads for first time, I have to click on the buttons for sizes to correct themselves...

Here's a how it looks when opening the JSON file for first time...

Each one of those coloured stripes are tabs inside the panel.








Now if you press 6/4 button on the switch, it changes to this...






Now tabs within the next panel (lets call it the nested panel) are all showing. The three switch buttons inside this panel labelled Value 1, Value 2 and Value 3 show each of these tabs. When you press on each one, it then sorts the sizing out like this...






I have to be doing something very wrong for this behaviour to be happening.

Also, the colours of each tab have been coloured like this purely for demonstration purposes to show the tabs and switches are actually working. Makes it a lot easier than if all the tabs are Black 😂

Many thanks for any help. I feel so close to being able to make a functioning controller!


----------



## Drjay

Like that? Or did I get something wrong?


----------



## jononotbono

Drjay said:


> Like that? Or did I get something wrong?


You're a genius. What did you do? Change the Panel Style to Justify space-around?


----------



## Manaberry

@jononotbono Just at 0 as default value in the switch widget.


----------



## jononotbono

Manaberry said:


> @jononotbono Just at 0 as default value in the switch widget.


Ah man. Thanks to both of you. Can't believe it's that simple. It's been driving me crazy. What does the 0 in the default value mean?


----------



## Drjay

jononotbono said:


> You're a genius. What did you do? Change the Panel Style to Justify space-around?


You're welcome  . No genius, I just spend months to get my stuff going. And I know how frustrating OSC can get due to its massive features...
Indeed, I set the default values in the switch widgets. Set them to whatever tab you'd like to see as default. You could also change the default value in the panel. But I guess it gets overwritten since the switches are further down the hierarchy.


----------



## jononotbono

Drjay said:


> You're welcome  . No genius, I just spend months to get my stuff going. And I know how frustrating OSC can get due to its massive features...
> Indeed, I set the default values in the switch widgets. Set them to whatever tab you'd like to see as default. You could also change the default value in the panel. But I guess it gets overwritten since the switches are further down the hierarchy.


Man, it makes total sense. Thank you thank you thank you! This has made my day.

Gonna be jumping back on this after I get some music wrapped up (this is way too much of a time sink when I have music work on) hopefully later this evening! 

So glad I didn't delete everything and start from scratch. I was very close! 😂


----------



## Manaberry

jononotbono said:


> Ah man. Thanks to both of you. Can't believe it's that simple. It's been driving me crazy. What does the 0 in the default value mean?


You are reading a value from the switch to change the panel. When you launch for the first time your template, the switch has no state as you did not yet touch it. The "default" setting just tells the switch to be initialized with the indicated value. Here we choose 0, so 6/4.


----------



## jononotbono

Manaberry said:


> You are reading a value from the switch to change the panel. When you launch for the first time your template, the switch has no state as you did not yet touch it. The "default" setting just tells the switch to be initialized with the indicated value. Here we choose 0, so 6/4.


Makes total sense man. This thread is becoming the most valuable thread on VI-C to me. Obviously excluding everything in the Drama Zone. 😂


----------



## jononotbono

Anyone shed some light on how you can have two lines of text on a button?


----------



## MauroPantin

jononotbono said:


> Anyone shed some light on how you can have two lines of text on a button?


I have a few buttons with two lines of text. I usually leave an empty CR between lines, done using Shift+Enter while I'm typing the label and it works. Looks like so on the "label" section of the button:

"Prev

Marker"

Displays as:

"Prev
Marker"


----------



## Manaberry

Yep, Shift+Enter is your friend. This works in almost every text field in the world. Not only for OSC.


----------



## jononotbono

Manaberry said:


> Yep, Shift+Enter is your friend. This works in almost every text field in the world. Not only for OSC.


I've been using shift and enter for everything. I just didn't try typing another word on another line just for text 😂

So simple. Thanks


----------



## jononotbono

MauroPantin said:


> I have a few buttons with two lines of text. I usually leave an empty CR between lines, done using Shift+Enter while I'm typing the label and it works. Looks like so on the "label" section of the button:
> 
> "Prev
> 
> Marker"
> 
> Displays as:
> 
> "Prev
> Marker"


Thanks! Yeah, works like a charm. Didn't think just to literally type on another line. Was thinking I'd need to script something!


----------



## jononotbono

The OSC Rabbit hole is a full blown Rabbit Warren now! 😂


----------



## Drjay

Don't want to spoil the party, but are you sure it works under all conditions? 
Since the GUI is html based I have my doubts, for example if the width of the switch is to big. 
E.g. I could only make it work when typing:

"abc123"

"abc123"

The other "syntax" you mentioned did not work me. Additionally the double quotes are displayed in the label.
I would be thankful, for a tip to make this work easily, since currently my multiline text and text/graphic buttons are build of css code and/or entries in the html-field. Since I have no real clue about css it was a rather tedious approach and I don't like it.


----------



## MauroPantin

Not sure exactly what you mean when you say "the other syntax". The quotes are not supposed to be used, they are there to show what it looks like. It's basically: Write the first line, press shift+enter, and get a carriage return between the first and second line (so an empty line), shift+enter again and write your second line.

EDIT: If this isn't working for you then maybe post a screenshot of what you have in the label section and will try and help out. Of course, I can't guarantee it works every time in any computer and any browser. I can just tell you it it works for all my buttons in the latest OSC version, no matter the width of the button, and it seems to work for Manaberry and Jono as well =/


----------



## Drjay

Thanks. Sorry, I misread your post. I thought you posted examples with different quotations, but I was wrong. That‘s why I talked about different syntax.
I tried versions with different quotations and even without quotation. The only version that worked for me was putting the whole string -including the CR line- in double quotes. I normally use the ‚internal‘ browser or Safari on the iPad. I‘ll give it another try on the umpcoming weekend.
What‘s bothering me more is keeping everything neatly together when mixing symbol fonts, text and css/png images in one button. Especially since I like to make make the design responsive, so I could use one code for several devices. I was struggeling hard with the css code. I don‘t think css and I will become friends


----------



## jononotbono

Drjay said:


> Thanks. Sorry, I misread your post. I thought you posted examples with different quotations, but I was wrong. That‘s why I talked about different syntax.
> I tried versions with different quotations and even without quotation. The only version that worked for me was putting the whole string -including the CR line- in double quotes. I normally use the ‚internal‘ browser or Safari on the iPad. I‘ll give it another try on the umpcoming weekend.
> What‘s bothering me more is keeping everything neatly together when mixing symbol fonts, text and css/png images in one button. Especially since I like to make make the design responsive, so I could use one code for several devices. I was struggeling hard with the css code. I don‘t think css and I will become friends


No no no. It was just assisting a very basic question someone had. 

Before I delve through the entirety of this thread, something I am going to want to do is program articulation buttons that will work bidirectionally with selected tracks (in Cubase) and Expression Maps. Is there a guide or video some nice person has made showing how to do this? It's definitely something I want to set up with OSC soon!


----------



## robgb

Not sure I understand the need for OSCulator with Open Stage Control. I used OSCulator in conjunction with TouchOSC (because it made set up easier), but abandoned it once I switched to Open Stage Control. Setup in Open Stage Control is pretty straightforward.


----------



## robgb

jononotbono said:


> Regarding my problem with Panel tabs. I'm using this script to hide the tab headers. Would this be messing anything up?
> 
> :host {
> z-index:0;
> }
> .navigation {
> display:none;
> }
> > .panel {
> top: -1rem;
> }


Try this to hide tabs:

> inner > .navigation {
display:none;
}

Don't know if it'll make a difference.


----------



## Drjay

jononotbono said:


> No no no. It was just assisting a very basic question someone had.
> 
> Before I delve through the entirety of this thread, something I am going to want to do is program articulation buttons that will work bidirectionally with selected tracks (in Cubase) and Expression Maps. Is there a guide or video some nice person has made showing how to do this? It's definitely something I want to set up with OSC soon!


Now comes the hard part 
There are probably several ways to skin the cat, but I ended up with code in a custom module. The code receives the selected track info via the usual midi send method in Cubase and updates the GUI accordingly. I stored the articulation info (label, cmd, midi channel etc.) in a separate json file along with another json file grouping the articulations in a library definition. Along with articulations I also store the midi controllers in a third json file in oder to get the controllers correctly setup. 
To explain all this would take a couple of hours. My advice would be, to make yourself accustomed with the custom module and the scripting involved. The documentation contains a good starting point.


----------



## MauroPantin

Drjay said:


> What‘s bothering me more is keeping everything neatly together when mixing symbol fonts, text and css/png images in one button


I have this problem occasionally and have found CSS so frustrating that I just plan on bypassing this issue entirely using data64 to create the icons and text and everything else for each button and call it a day. I only have one screen though, so I don't need it to be response, I imagine that's a much more arduous goal. I just need a good time window with a couple of days of downtime to get it done.


----------



## jononotbono

robgb said:


> Try this to hide tabs:
> 
> > inner > .navigation {
> display:none;
> }
> 
> Don't know if it'll make a difference.


Thanks man. Already doing that to hide tabs. My problems with panels are well and truly over. My project tree is looking disturbing but man, it’s glorious to have everything working!


----------



## jononotbono

Drjay said:


> Now comes the hard part
> There are probably several ways to skin the cat, but I ended up with code in a custom module. The code receives the selected track info via the usual midi send method in Cubase and updates the GUI accordingly. I stored the articulation info (label, cmd, midi channel etc.) in a separate json file along with another json file grouping the articulations in a library definition. Along with articulations I also store the midi controllers in a third json file in oder to get the controllers correctly setup.
> To explain all this would take a couple of hours. My advice would be, to make yourself accustomed with the custom module and the scripting involved. The documentation contains a good starting point.


ok, yeah, I need to understand the custom module first as I don't know what it is or does. I'll read the documentation about this. No doubt I'll be lost but hey, we all start somewhere!


----------



## zig

@jononotbono, Mihkel Zilmer's posts & files are good starting point to understand articulations management in custom module ...


----------



## Manaberry

@jononotbono Good luck! Oh...And if you get lost, remember one thing: You can drink coconut water to survive.


By the way, guys, if you have figured out how to change the tab's color, I'm all ears! :D
(I'm moving OSC to a Raspberry Pi 4, I'm almost there but it's not working yet...)


----------



## zig

Tab's color... ? in root css field

> inner > .navigation > .tablink:nth-child(1) {
background-image: * your image here* ;
background-size: 10%;
background-repeat: no-repeat;
background-position: 12% center;
background-color: red;
}


----------



## jononotbono

zig said:


> @jononotbono, Mihkel Zilmer's posts & files are good starting point to understand articulations management in custom module ...


Brilliant. I'll check them out for sure! I remember watching some videos on Lemur ages ago so I'll refresh my memory!


----------



## jononotbono

Manaberry said:


> You can drink coconut water to survive.


Well it's a bitter sweet story really because it's a laxative and if you quench your thirst too much then that Milk turns sour real quick. But hey, Tom Hanks and Wilson were fine so what do I know?! 😂


----------



## Manaberry

jononotbono said:


> Well it's a bitter sweet story really because it's a laxative and if you quench your thirst too much then that Milk turns sour real quick. But hey, Tom Hanks and Wilson were fine so what do I know?! 😂


He looks fine, indeed haha



zig said:


> Tab's color... ? in root css field
> 
> > inner > .navigation > .tablink:nth-child(1) {
> background-image: * your image here* ;
> background-size: 10%;
> background-repeat: no-repeat;
> background-position: 12% center;
> background-color: red;
> }


I will try, thanks!


----------



## MauroPantin

Manaberry said:


> He looks fine, indeed haha


Better than me in the middle of crunch time, for sure


----------



## jononotbono

Ok so here's another question for a future OSC endeavour. Is it possible to have a button that will show/hide a specific plugin used in a Cubase session? Also, is it possible to have a button to actually load a plugin?

So let's just say that you're writing some music and you want to load an instance of a Reverb. Press a button and Reverb loads on the selected track? Or are these thoughts of fantasy?


----------



## MauroPantin

You can. I'm unsure of how to do it in Cubase... But it's definitely doable, I have a button for adding a Neutron EQ on the selected track or tracks.

In Reaper, you call back an SWS action. With SWS you can save FXs to a "slot" and use an action called "Paste FX to selected track(s) (slot 1)", or some other slot number and it does it (you can have several buttons, I just have the one). Maybe Cubase has some similar functionality you can take advantage of for doing that?

I'd love to have it for sends instead, though, but have not found much luck with that yet. It requires very heavy scripting and I haven't had the time.


----------



## zig

jononotbono said:


> Is it possible to have a button that will show/hide a specific plugin used in a Cubase session


Yes, Generic remote is your friend!


----------



## jononotbono

zig said:


> Yes, Generic remote is your friend!


That simple? Right, I didn't think it was possible. Excellent.


----------



## zig

I have a fabfilter q3 on each audio track.
On GR upwindow define controller Midi ch & adress according to the button in OSC
On GR downwindow select : VSTmixer /selected/ and here I choose : insert 1/fafbfilter/edit. Done!
Select the audio track you want to edit , Press your button in OSC and ...abracadabra window plugin popup. just one button for as many tracks you want
you can also automate the internal settings of the plugin....


----------



## jononotbono

zig said:


> I have a fabfilter q3 on each audio track.
> On GR upwindow define controller Midi ch & adress according to the button in OSC
> On GR downwindow select : VSTmixer /selected/ and here I choose : insert 1/fafbfilter/edit. Done!
> Select the audio track you want to edit , Press your button in OSC and ...abracadabra window plugin popup. just one button for as many tracks you want
> you can also automate the internal settings of the plugin....


AH ok. Yeah, what I want to do is literally have a track (let's say with no plugins) and then press a button and suddenly, and instance of fab Q3 inserts on the tracks audio insert. What you're saying is that it's possible to bring up a plugin that already is loaded on the track? Which is one of my original questions so that's excellent man. Thanks!


----------



## jononotbono

I'm having a slight issue regarding using OSC on my Mac. I'm using a custom Touchbase Driver and the touchscreen is calibrated and works fine. However, when using Cubase, as soon as I tap anywhere on the touchscreen, the window takes Cubase out of the app that is in focus. Is there a setting in OSX or for OSC that will not make Cubase go out of focus? 

What is happening is that I have Cubase open, then I go to press a button in OSC on the touch screen and the only thing that happens that the Cubase windows aren't in focus (video display disappears and all plugins etc). And the button on the touch screen doesn't register. Then I press the touch screen button again and it responds instantly and the command sends to Cubase. However, I then have to click on Cubase and it's back in focus again and video display and Plugins all pop back up again. 

Is there some setting somewhere similar to Always on Top but to make Apps outside of Cubase not interfere with Cubase? 

I might have to start using OSC with a PC networked to my Mac if I can't remedy this issue and just wondering if someone here knows what's causing this?


----------



## zig

sorry no idea..
For the plugin question, maybe here. :








Add "insert plugin" key command


Hi everybody. So here is script for C 9.5. ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Select an Insert <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< !1:: ; Alt+1 hotkey. Y:=114 ; (114) Sleep 10...




forums.steinberg.net




If you find the solution, please share !


----------



## jononotbono

zig said:


> If you find the solution, please share !


I think the solution is... Use a dedicated computer for the touch screen 😂


----------



## Caleb Joshua

jononotbono said:


> I think the solution is... Use a dedicated computer for the touch screen 😂


I tripped out for a while on this and i ended up with another machine under my desk. more cables, more heat, more fan noise, 35 more watts. It does work as intended though. Im running windows and my problem was i did not like the mouse cursor jumping to the button and then having to move it back to my main display. I find it hard to believe theres no work around.


----------



## Caleb Joshua

jononotbono said:


> AH ok. Yeah, what I want to do is literally have a track (let's say with no plugins) and then press a button and suddenly, and instance of fab Q3 inserts on the tracks audio insert. What you're saying is that it's possible to bring up a plugin that already is loaded on the track? Which is one of my original questions so that's excellent man. Thanks!


I made a track, and added 4 fx plug-ins. In the remote, you create vst mixer/selected/ins 1 2 etc,/edit. 
Then you make the button send the 4 ccs to the 4 or however many edit commands and then that button will toggle open the plug ins on the selected track. if you have a synth or a piece of hardware with a vst editor plugin and want a dedicated button to toggle open it, you have to make a folder for them at the very top of your arranger and then create the edit ins line in the remote and then never move its location. if you dont do it that way, everytime you add a track or render something it will change what that button opens.


----------



## Drjay

MauroPantin said:


> I have this problem occasionally and have found CSS so frustrating that I just plan on bypassing this issue entirely using data64 to create the icons and text and everything else for each button and call it a day. I only have one screen though, so I don't need it to be response, I imagine that's a much more arduous goal. I just need a good time window with a couple of days of downtime to get it done.


Good to know, I‘m not alone with my aversion to css  
I probably give up on the responsive thing. I can make it work but the code gets too cluttered. I will use two versions instead. I agree, base64 images are your friend. I design them in Affinity Designer, which is good and a bargain in my opinion.


----------



## Drjay

Gosh, so many posts since last night. It becomes almost impossible to follow.
Great thread by the way


----------



## Drjay

jononotbono said:


> I'm having a slight issue regarding using OSC on my Mac. I'm using a custom Touchbase Driver and the touchscreen is calibrated and works fine. However, when using Cubase, as soon as I tap anywhere on the touchscreen, the window takes Cubase out of the app that is in focus. Is there a setting in OSX or for OSC that will not make Cubase go out of focus?
> 
> What is happening is that I have Cubase open, then I go to press a button in OSC on the touch screen and the only thing that happens that the Cubase windows aren't in focus (video display disappears and all plugins etc). And the button on the touch screen doesn't register. Then I press the touch screen button again and it responds instantly and the command sends to Cubase. However, I then have to click on Cubase and it's back in focus again and video display and Plugins all pop back up again.
> 
> Is there some setting somewhere similar to Always on Top but to make Apps outside of Cubase not interfere with Cubase?
> 
> I might have to start using OSC with a PC networked to my Mac if I can't remedy this issue and just wondering if someone here knows what's causing this?


Similar thing under Windows 10, but at least touches are registered instantly. But I would like the plugin windows to be visible all the time, even when Cubase lost the focus.


----------



## jononotbono

Caleb Joshua said:


> I tripped out for a while on this and i ended up with another machine under my desk. more cables, more heat, more fan noise, 35 more watts. It does work as intended though. Im running windows and my problem was i did not like the mouse cursor jumping to the button and then having to move it back to my main display. I find it hard to believe theres no work around.


There isn't. Dedicated computer is the way. It's annoying because my touchscreen is working really well with OSX (The Touchbase drivers have really been sorted out over the past few years and it feels good) but this windows going out of focus is unacceptable nonsense for a smooth touchscreen experience. 

Also, to get over that problem you had with the mouse not returning, Touchbase drivers have an option that returns cursor to position (and hides cursor on click). There's software (that's free) that PC users can use called Panda. It does exactly that.


----------



## jononotbono

Drjay said:


> Similar thing under Windows 10, but at least touches are registered instantly. But I would like the plugin windows to be visible all the time, even when Cubase lost the focus.


It's not possible. Sorry man, I have tried to figure this out and spoken to someone that literally specialises in touchscreens and building OSC controllers for people and he just said it's the behaviour of Cubase. So, dedicated computer.

I just networked a Mac Mini with my touch screen and it's using Synergy for sharing my main computers mouse and Keyboard (In case anyone reads this later and wants to know of a solution for keyboard and mouse sharing).

Anyway, the time has now come to install OSC on the touchscreen computer and get back on with this!


----------



## jononotbono

So regarding using OSC on a networked computer.

In the OSC server window there is a "send" option. What should I put in here and how should it be typed for this to send messages to my main machine? An ip address? Not sure what the port number would be. Any help would be great. Trying to keep this day down to not 24hrs of problem solving haha

Edit...

I don't want to use it in a browser. Just use it in client window headless mode (the window on the networked computer).

I'm just not understanding this...


----------



## Manaberry

If you are using MIDI ports with rtpMIDI, you don't need any IP. (Because the MIDI ports are already "linked" between your machines with rtpMIDI).


----------



## jononotbono

Manaberry said:


> If you are using MIDI ports with rtpMIDI, you don't need any IP. (Because the MIDI ports are already "linked" between your machines with rtpMIDI).


Ah ok. I'll have a re-read because I was using IAC.


----------



## jononotbono

I'll set up rtpmidi. Thanks. I'm actually going to buy an actual Midi interface for the touch computer. This way I can literally run midi in and out cables to my midi interface on my main computer and I don't think anything will be more solid and reliable as that. In fact I have a Steinberg Midex8 laying about in the studio I never sold so that might be great (if I can get it working with Catalina).


----------



## Loïc D

robgb said:


> Not sure I understand the need for OSCulator with Open Stage Control. I used OSCulator in conjunction with TouchOSC (because it made set up easier), but abandoned it once I switched to Open Stage Control. Setup in Open Stage Control is pretty straightforward.


Really ? I'm quite struggling with OSC messages.
AFAIK, OSCulator is sending messages when you select a track and that's a big benefit.
BUT, I can't manage to send the same OSC message from OSCulator > LPX and get it interpreted (The Learn Assignment does nothing when I send the OSC message).

I've tried to use LPX < OSCulator > O-S-C configuration using MIDI (CC127 to control & sync Mute button on selected track) but I end up with infinite loop where M goes on/off.

It has already taken too much time, and it's like this everytime I try to set a control surface.
My main goal is articulation switching, but it seems not possible to select notes in editor and assign an articulation by choosing one on surface control.

To me, OSC + LPX = nightmare.
I'm on the verge to ditch all this and resume making music.


----------



## Loïc D

jononotbono said:


> I'll set up rtpmidi. Thanks. I'm actually going to buy an actual Midi interface for the touch computer. This way I can literally run midi in and out cables to my midi interface on my main computer and I don't think anything will be more solid and reliable as that. In fact I have a Steinberg Midex8 laying about in the studio I never sold so that might be great (if I can get it working with Catalina).


Exactly what Junkie XL explained in a recent video.


----------



## Manaberry

jononotbono said:


> I'll set up rtpmidi. Thanks. I'm actually going to buy an actual Midi interface for the touch computer. This way I can literally run midi in and out cables to my midi interface on my main computer and I don't think anything will be more solid and reliable as that. In fact I have a Steinberg Midex8 laying about in the studio I never sold so that might be great (if I can get it working with Catalina).


I'm interested! Feel free to share what you are gonna use to do so. That software stuff drives me nuts!


----------



## jononotbono

Loïc D said:


> Exactly what Junkie XL explained in a recent video.


Did he? Yeah, it's a good idea. I mean, why not? I've never done that before and I've been sitting here trying to figure this out and be as solid as possible and just looking at my Motu Midi express thinking "I wish I could make use of the spare ports". 

RTPMidi is PC only by the way so for Mac it's a no go.


----------



## jononotbono

Manaberry said:


> I'm interested! Feel free to share what you are gonna use to do so. That software stuff drives me nuts!


Yeah I hate it. It's always a drag and usually temperamental. Dogs Brown.


----------



## jononotbono

FFS. The Midex 8 unsupported drivers aren't compatible with Catalina. Annoying. So what is the alternative to RTPmidi for me to send messages over the network when the server is on OSX?


----------



## jononotbono

I have figure out how to send messages over the network with two macs. Simple. Just use Midi Network setup on both computers and then once you set up the names (Local and Bonjour) you have a port number and inside OSC on the server, type the port number, make sure the midi devices listed show Network "Whatever the name is". Then in Cubase assign midi port Network "Whatever name is".

Probably very basic for everyone here but seeing a button work is definitely winning!


----------



## zig

jononotbono said:


> So let's just say that you're writing some music and you want to load an instance of a Reverb. Press a button and Reverb loads on the selected track?


I did a test with keayboard maestro triggered by OSC to create instruments from track archive (and keep all routings), it works very well. Creating a plugin insert with this system should work as well.


----------



## Loïc D

Trying KM also.
Encouraging so far.
My use case : I select notes in LPX piano roll, on my tablet I choose an articulation => applied to notes.
Still needs proofing & debugging though.


----------



## Drjay

On Windows AutoIT works fine as well. Although you‘ll probably need to program a little bit more than with KM.


----------



## jononotbono

zig said:


> I did a test with keayboard maestro triggered by OSC to create instruments from track archive (and keep all routings), it works very well. Creating a plugin insert with this system should work as well.


Great. I’m not using KM but I certainly could try it out.


----------



## jononotbono

O.k, so just being curious, what's the count on how many commands you have programmed with Cubase? I just hit 760. Brain is slightly melting so it's time for a beer.

Curious at how ridiculous people's OSC controllers have got since starting with 1 button 😂


----------



## MauroPantin

Well... After seeing it on Trevor Morris's AMA yesterday where he showed a bit of his OSC template I'm building a virtual Harp to play glissandos on mine. So I am in the process of adding another 47 buttons shaped like a harp and entering the code this weekend if I get the time for it.


----------



## gst98

MauroPantin said:


> Well... After seeing it on Trevor Morris's AMA yesterday where he showed a bit of his OSC template I'm building a virtual Harp to play glissandos on mine. So I am in the process of adding another 47 buttons shaped like a harp and entering the code this weekend if I get the time for it.


Was literally going to ask about this. I thought I was pretty happy with metagrid, but this is awesome!


----------



## gst98

jononotbono said:


> What?
> 
> Something like this? Keep up people 😂


Wow. Have you managed to find a way to build in key presets for the harp pedals?


----------



## jononotbono

gst98 said:


> Wow. Have you managed to find a way to build in key presets for the harp pedals?


Not yet. Keys and scales + modes are the next thing that need to be sorted out with it. I also don't just want it for Harp and Harp Glisses so it becomes a lot more complex when you start thinking about how it can be used with anything else. Distance between buttons/Strings become a consideration and all sorts of other stuff. I've kind of paused on this because since connecting my touch screen to a networked machine I suddenly thought "Fuck, I now no longer have a touch screen with any commands I use daily"... so it's on hold at the minute and my focus has been building a working controller getting all commands actually working. Which sounds simple but when you want everything in intuitive nested panels and tabs that don't become a drag when going from one thing to the next, is surprisingly time consuming.


----------



## jononotbono

Slight change of subject but not...

I've been wondering how to make videos with OSC and having this on a separate computer. Using OBS is the only choice to make videos especially with screen sharing (not the only choice but you know what I mean - Its amazing) but I was wondering if it's possible to share a screen with a networked computer. Instead of buying a dedicated video capture card. It turns out it is (I'm probably very late to this party haha).

So yesterday I figured this out. Basically there's a company called NDI. You install NDI tools. And it consists of all sorts of plugins. Basically, install OBS on your master computer. Then install OBS on your secondary/touch screen computer. You then need to download the NDI OBS plugin on each computer. You can then use the NDI plugin for OBS on your main computer to capture the screen on your secondary computer. Last night I felt like a king getting this to work.

Just thought someone here might like to know about this. 

NDI Tools
https://www.ndi.tv/tools/

NDI plugin for OBS
https://obsproject.com/forum/resources/obs-ndi-newtek-ndi™-integration-into-obs-studio.528/


----------



## gst98

jononotbono said:


> Not yet. Keys and scales + modes are the next thing that need to be sorted out with it. I also don't just want it for Harp and Harp Glisses so it becomes a lot more complex when you start thinking about how it can be used with anything else. Distance between buttons/Strings become a consideration and all sorts of other stuff. I've kind of paused on this because since connecting my touch screen to a networked machine I suddenly thought "Fuck, I now no longer have a touch screen with any commands I use daily"... so it's on hold at the minute and my focus has been building a working controller getting all commands actually working. Which sounds simple but when you want everything in intuitive nested panels and tabs that don't become a drag when going from one thing to the next, is surprisingly time consuming.


Man, that's the thing that's held me back on OSC - it's all the time spent trying to get things to work. I think I may be best sticking to simple metagrid.

I did have a play with Logic remote though. Turns out there is a gliss mode on the keyboard! This will do pretty nicely for now. Only thing is it's only velocity-sensitive to the first note - a newer iPad might do this though.







There is even a scale Mode!


----------



## jononotbono

gst98 said:


> I think I may be best sticking to simple metagrid.


Metagrid is amazing.

The important question is to ask yourself is what it is you want to do and does Metagrid do everything already for you? If so, why even bother changing?

It's very easy to get caught up in a weird world of "I need the latest shiny new thing! My music is gonna be so better from it". And then you go down a Rabbit hole and days, months, YEARS get lost down there. However, there is a negative side! 😂


----------



## gst98

jononotbono said:


> Metagrid is amazing.
> 
> The important question is to ask yourself is what it is you want to do and does Metagrid do everything already for you? If so, why even bother changing?
> 
> It's very easy to get caught up in a weird world of "I need the latest shiny new thing! My music is gonna be so better from it". And then you go down a Rabbit hole and days, months, YEARS get lost down there. However, there is a negative side! 😂


That's what I'm scared of! Honestly, the tease for Metagrid 2.0 with 2-way communication is exciting because I think it will (hopefully) answer most of the requests I have. The biggest thing for me is an articulation switcher that reads the articulation set in Logic so it can change per track.


----------



## jononotbono

gst98 said:


> 2-way communication is exciting


It is very exciting. 

It's actually what I'm trying to get working at the minute. This thread is a monster and leading to a headache as a few people have gone over how to do this in OSC in different ways. I definitely want to disable tracks so I need to re-read some stuff.


----------



## Hisham

I would be really grateful if I can get hold of manual for OSC, since I am not a programmer, I get stuck sometimes.
for example: I cannot seem to be able to create tabs, instead I am using modals to mimic tabs, and it gets sticky to move between them.
Also, I failed to create functional widgets INSIDE matrix....
many thanks


----------



## Markrs

Hisham said:


> I would be really grateful if I can get hold of manual for OSC, since I am not a programmer, I get stuck sometimes.
> for example: I cannot seem to be able to create tabs, instead I am using modals to mimic tabs, and it gets sticky to move between them.
> Also, I failed to create functional widgets INSIDE matrix....
> many thanks


There is an online manual:
https://openstagecontrol.ammd.net/docs/getting-started/introduction/


----------



## Hisham

Markrs said:


> There is an online manual:
> https://openstagecontrol.ammd.net/docs/getting-started/introduction/


Thank you for your response, read it more than once, but it is too basic and there are points that is not really mentioned there, maybe it assumes that you know basic programming skills already...


----------



## Markrs

Hisham said:


> Thank you for your response, read it more than once, but it is too basic and there are points that is not really mentioned there, maybe it assumes that you know basic programming skills already...


You are right, I think if you want to go more advanced it would require some JavaScript and CSS knowledge.


----------



## Hisham

Markrs said:


> You are right, I think if you want to go more advanced it would require some JavaScript and CSS knowledge.


I don't know if this counts as using your generosity, but do you think you can help me with howto create functional widgets INSIDE matrix?


----------



## Markrs

Hisham said:


> I don't know if this counts as using your generosity, but do you think you can help me with howto create functional widgets INSIDE matrix?


I wish I could help, but I don't really have any coding skills and I have also parked going down the OSC rabbit hole for now. The people on this thread are super helpful, so hopefully someone is able to help you.


----------



## Hisham

Markrs said:


> I wish I could help, but I don't really have any coding skills and I have also parked going down the OSC rabbit hole for now. The people on this thread are super helpful, so hopefully someone is able to help you.


Many thanks for your time anyways, you are absolutely right, OSC is a rabbit hole, if you are not careful, it turn out to be more of a time waster than a time saver


----------



## Loïc D

Yup, I’m in the rabbit hole and still digging. Ok I chose the long road with Logic Pro + Osculator + Open stage control + Keyboard master.
I also regret the lack of exemples with O-S-C and limited documentation.

Right now I’m struggling to try getting the label of the pressed button on a switch (no pb with the value)


----------



## Drjay

Sorry to say that, but - in my opinion- on the long run you will have to get acquainted with javascript if you want to accomplish more complex tasks.
You probably know the O-S-C forum. There you can find lots of advice and especially Jean-Emmanuels posts are really helpful.
@Loïc D : What exactly are you trying to do? Does @{button_X.label} help?


----------



## Loïc D

I’ll be trying thanks.
For the record, I’m familiar with JS (used to be JS developer years ago) but this implementation is quite tricky


----------



## Drjay

Loïc D said:


> I’ll be trying thanks.
> For the record, I’m familiar with JS (used to be JS developer years ago) but this implementation is quite tricky


Sorry, I did not mean you. I was referring to the posts of Markrs and Hisham. I agree the O-S-C implementation is tricky. Especially for me, since I grew up with procedural languages and even after years the ‚everything is an object‘ approach drives me nuts.


----------



## jononotbono

I'm overjoyed that I have got dynamic buttons working. I had a look at @Mihkel Zilmer files and followed his comments.

Well, I have it mostly working. When I load Mihkel's OSC template and with Cubase it switches different buttons on OSC according to the selected track in Cubase. 

When I applied this to my own template, at first it only showed the labels and buttons for the arts. Now, I have the art labels showing but all other labels don't hide when I click on other tracks in Cubase. Just wondering what I am missing?


----------



## zig

@jononotbono I think I remember having encountered this problem too...
It's hard to answer you without seeing the code. It may be a conflict in the module.export section.
My template is almost finished, if time is on my side I will post it soon.


----------



## jononotbono

Thanks man. I'm actually;ly having another difficulty now. I am using JXL Brass as a testing library and I am getting errors. Am I right in thinking that the tremolo plugin from Cubase is a bit ropey? Missing values at times? I keep getting errors and have checked over and over that I have each track using correct rate and spacial settings to go through port and CC values and I have to keep turning some onto the same value as the previous track for the buttons to change to the correct layouts in OSC. Just wondering if I don't know about something unknown here (and I very aware most problems are usually human error so it's likely something I have already done with my OSC is interfering with things).


----------



## jononotbono

Regarding my above comment of the Tremolo plugin. I have now finally got 15 Instrument tracks working and for an example I changed the names of the buttons (all of JXLBrass patches have the same Arts in them so I just wrote a different combo of arts purely to see if the buttons would change).

Note the screen shot below and the values of the Tremolo plugin. Some have the same values. They go from left to right up to 15 Instruments worth...







And now check out the screen of the js file. The fact the Tremolo plugin is using same values and in the js file I have written out 15 lines of code to show the arts per 15 instrument tracks. There must be a logical explanation for this?






Without having the values exact, it's going to make for some confusing times down the line when consulting the Oracle. Aka The Google Spreadsheet with every Control Change, Prog Change, Midi Note and CC assignments, Generic Remote Lists etc.


----------



## zig

@jononotbono
I also noticed that Tremolo was sometimes a little fancy! The solution I found is to skip a value when there is a bug.
I use the tremolo system for instrument tracks, mainly synthesizers (zebra, serum, omnisphere...) which allows me to load a graphical interface in OSC with the plugins controls.
I kept the var instrument part only for the kontakt/VI tracks.
My Tremolo setup is a bit different, I use Spatial as Bank ( args[1] )& and Rate as ctrl number (
args[2])


----------



## jononotbono

zig said:


> @jononotbono
> I also noticed that Tremolo was sometimes a little fancy! The solution I found is to skip a value when there is a bug.
> I use the tremolo system for instrument tracks, mainly synthesizers (zebra, serum, omnisphere...) which allows me to load a graphical interface in OSC with the plugins controls.
> I kept the var instrument part only for the kontakt/VI tracks.
> My Tremolo setup is a bit different, I use Spatial as Bank ( args[1] )& and Rate as ctrl number (
> args[2])


Amazing. I don't suppose you know how I can add some text that is literally just for displaying the selected Track name on OSC when I click on a track in Cubase? It would be lovely to be instantly see the track names. I noticed you made a panel doing this but I also noticed it was just for Midi Tracks.

Currently I'm not using VEPro. I will again but I'm just using 1 computer at the minute.


----------



## jononotbono

zig said:


> I use the tremolo system for instrument tracks, mainly synthesizers (zebra, serum, omnisphere...) which allows me to load a graphical interface in OSC with the plugins controls.


This is exactly what I've been planning on doing since realising the power of OSC. Having a contextual window whereby you click on a track and specific buttons, knobs, mics, controls for specific Sample libraries and Synths etc. It's gotta be the slickest way. And also probably the most horrendously deep amount of time figuring out! 😂


----------



## jononotbono

Got another question and my scripting knowledge is pathetic hence why I'm asking.

This CSS code...






This script is for each button. I decided I wanted to not have the labels in Lowercase so I changed it to

text-transform:uppercase

I hit enter/return and all of a sudden, all 55 buttons show and then when I click on selected tracks, the art names change but the buttons don't disappear (all 55 remain showing) and even when a track has two arts and let's say the previously clicked track has 10 arts, the 10 arts labels remain visible and the 2 arts labels change. So there must be a reason for that but unfortunately I don't know why.


----------



## Nicksaya

I’m hAving a problem with coloring button. I created a red button but at some point in process when I touch it it goes black and stays black. Any help appreciated. Thanks.


----------



## jononotbono

Nicksaya said:


> I’m hAving a problem with coloring button. I created a red button but at some point in process when I touch it it goes black and stays black. Any help appreciated. Thanks.


Change the button type to tap or push. You most likely have it set to toggle (which means the switch will stay switched on or off until you press it again). Or change the colour of both states so you can’t tell. Totally depends on context!


----------



## jononotbono

I made a video. I hear this is the place for all things OSC...


----------



## Danje

Thank you Jono for sharing these video's on the OSC project. It's inspiring to see you making so much progress.

Brian Rivlin's video on OSC was an eye opener for me too. It got me started together with this thread. The almost endless possibilities with OSC really makes a dream of mine come true. And yes, it definitely also doubles as a luring rabbit hole.

I made some progress myself by setting up a seperate little computer (NUC) dedicated to OSC. After a long time of searching for solutions for the (un)focus problem I realized it can only reasonable be done with OSC running on another machine.

At first I found the learning curve for OSC almost too steep. So many details which weren't clear, also because I never learned how to code in javascript. Analyzing examples from others has helped tremendously. Therefore I think it would be highly appreciated if you are willing to share some parts of your OSC template.

There's a few things I wonder about. Does nearly every button in your template correspond to a different command in Cubase? All 2000+ of them? For example, the 12x2 transpose buttons, are they connected to 24 almost similar yet seperate Cubase commands? It would be great if somehow a variable in OSC could be transmitted to Cubase's Logical Editor. That way 24 different key commands may be reduced to a single command plus a parameter (the amount to transpose). I'm not sure if that can conveniently be done on the side of Cubase.

I'm still trying to get my head around how to use global variables without the need to delve deeply into Javascript.


----------



## Drjay

Danje said:


> There's a few things I wonder about. Does nearly every button in your template correspond to a different command in Cubase? All 2000+ of them? For example, the 12x2 transpose buttons, are they connected to 24 almost similar yet seperate Cubase commands? It would be great if somehow a variable in OSC could be transmitted to Cubase's Logical Editor. That way 24 different key commands may be reduced to a single command plus a parameter (the amount to transpose). I'm not sure if that can conveniently be done on the side of Cubase.
> 
> I'm still trying to get my head around how to use global variables without the need to delve deeply into Javascript.


Passing a variable to The logical editor is not possible. But you can reduce the amount of work (a little) by using consecutive controller numbers, so you can use offsets. Additionally you can use text editors instead of the GUI to copy and paste from the Cubase xmls to other documents (json, text snippets). This way you can for example create array definitions which in turn can be used in the widget definitions . A text editor with column edit functions comes in handy for this task (eg. Notepad++). You could also program command line scripts converting xml to json. The sky is the limit  
At least these techniques save you from donkey work, like copying and typing button descriptions etc.
Variables can be accessed by the @{} statement which can practically used everywhere. I think there is also a new VAR statement, but I never tried it.


----------



## Nicksaya

Manaberry said:


> My pleasure!


How would I go about creating a general fader that I can use to write automation on any selected track in Cubase?


----------



## Nicksaya

jononotbono said:


> Change the button type to tap or push. You most likely have it set to toggle (which means the switch will stay switched on or off until you press it again). Or change the colour of both states so you can’t tell. Totally depends on context!


Thanks. I am trying to create a general fader that I can use to write automation with on any track that I am on in Cubase. 
any help appreciated! Thanks


----------



## jononotbono

Nicksaya said:


> Thanks. I am trying to create a general fader that I can use to write automation with on any track that I am on in Cubase.
> any help appreciated! Thanks


I haven’t done that yet but it’s on my list of things to do. I have an Avid Dock which has a 100m Motorised fader that I use for Automation so it’s not been a priority for me. If you figure it out before me I’d love to hear about it!


----------



## jononotbono

Might as well chuck in the Cubase Automation panel. It never ends


----------



## jononotbono

Nicksaya said:


> Thanks. I am trying to create a general fader that I can use to write automation with on any track that I am on in Cubase.
> any help appreciated! Thanks


I have now sorted that out. It's actually very simple to do. I'll screen shot a few things for you in a bit.


----------



## Manaberry

Sneak peek of Jono's template next year:


----------



## Loïc D

jononotbono said:


> Might as well chuck in the Cubase Automation panel. It never ends


“One screen to rule them all and in the darkness bind them”


----------



## jononotbono

Hans Zimmer Strings has 26 Mic Positions. It's been bothering for a while how gluttonous that library is and specifically how I can't see them all at the same time. Finally sorted that issue.


----------



## MauroPantin

Holy shit, the dedication! If music doesn't pan out you can probably apply for a job at SpaceX


----------



## jononotbono

MauroPantin said:


> Holy shit, the dedication! If music doesn't pan out you can probably apply for a job at SpaceX


Haha! Yeah I can be obsessive over anything to do with music and I just want to make something decent.
What’s SpaceX?


----------



## jononotbono

I've got a few questions if any OSC wizard here could help with...

When using the Faders, I am typing the Fader name in the HTML slot in the inspector. Works fine and looks good with the name at the top of the fader. However, I would also like to write something at the bottom of the faders. How would I go about doing that?

I also have a question about text in general. I tried my Controller on my iPad earlier just to see if it would work and because I have designed this using percentages, all widgets keep their proportions which I love. However, the text does not. I have been typing the button names into the "label" option in the inspector. I'm wondering if this is correct and instead should the names be written using the CSS option in the inspector? And if so, could someone give me an example of code I could try out? I apologise if this is a super noob question but I'm not a coder and just trying to figure out what I need as I go.


----------



## MauroPantin

jononotbono said:


> What’s SpaceX?


The most revolutionary rocket company in the world (probably). They land rockets upright. Look it up, it's fun and amazing.



jononotbono said:


> I have been typing the button names into the "label" option in the inspector. I'm wondering if this is correct and instead should the names be written using the CSS option in the inspector? And if so, could someone give me an example of code I could try out? I apologise if this is a super noob question but I'm not a coder and just trying to figure out what I need as I go.


The only way I've found to get the text to work as the rest does with percentages is using the "vw" unit for text sizing in CSS. It stands for "viewport width" and it represents a percentage of the viewport. So for example, 1vw is 1% of the size of your browser window.

The only problem with it is that you have to use these small values for it to look like "normal" text size, because 1vw is usually pretty big.

The css property goes like this:

font-size:1vw

As far as I am aware you don't have to re-do the entire template, but can rather take the CSS property for the "label" section in the main css theme and re-adjust the text from there, so you find the ".text-container label" property and add that before the property is closed, like so:

.text-container label {
*****whatever is here*****
font-size:0.8vw !important;
}


And that should override all the label font size at the same time, linking them all to the screen size and resizing relative to it.

There is another way to re-do it with a responsive thing, where it actually jumps to a different font size depending on the screen size but it's browser dependent and I just didn't want to get too technical, so I never researched it. This worked for me, give it a shot and if not I can at least point you in the right direction.


----------



## jononotbono

MauroPantin said:


> The most revolutionary rocket company in the world (probably). They land rockets upright. Look it up, it's fun and amazing.
> 
> 
> The only way I've found to get the text to work as the rest does with percentages is using the "vw" unit for text sizing in CSS. It stands for "viewport width" and it represents a percentage of the viewport. So for example, 1vw is 1% of the size of your browser window.
> 
> The only problem with it is that you have to use these small values for it to look like "normal" text size, because 1vw is usually pretty big.
> 
> The css property goes like this:
> 
> font-size:1vw
> 
> As far as I am aware you don't have to re-do the entire template, but can rather take the CSS property for the "label" section in the main css theme and re-adjust the text from there, so you find the ".text-container label" property and add that before the property is closed, like so:
> 
> .text-container label {
> *****whatever is here*****
> font-size:0.8vw !important;
> }
> 
> 
> And that should override all the label font size at the same time, linking them all to the screen size and resizing relative to it.
> 
> There is another way to re-do it with a responsive thing, where it actually jumps to a different font size depending on the screen size but it's browser dependent and I just didn't want to get too technical, so I never researched it. This worked for me, give it a shot and if not I can at least point you in the right direction.


Thanks man, I'm gonna give it a go in a bit!

Well this is depressing. I go to create a new button and this is apparently the 735th button...







I thought it would be so much more by now 😂


----------



## jononotbono

I need to find some arrow icons. In fact, a whole selection of decent icons would be good. Is there anything for sale that can be used in either a non commercial or commercially released product?


----------



## Manaberry

jononotbono said:


> I need to find some arrow icons. In fact, a whole selection of decent icons would be good. Is there anything for sale that can be used in either a non commercial or commercially released product?


Jono... Please, don't take that path. You will never be able to return.
You can install the downloaded fonts on your system and use them directly in OSC (I did that will Dorico's official font to get the icons)


----------



## jononotbono

Manaberry said:


> Jono... Please, don't take that path. You will never be able to return.
> You can install the downloaded fonts on your system and use them directly in OSC (I did that will Dorico's official font to get the icons)


Haha! Just some Arrows are fine for today. It's a disturbing amount of time ploughed into this thing already! I can only imagine the time sink doing every icon would be as well!

Whilst you're here, I was wondering if you knew how to make text appear on the the bottom of a Fader?

Using the HTML field, if I type a name for a fader it appears at the top, which is great. However, I'm just wondering if it's possible to have text appear in the space at the bottom as well?


----------



## Manaberry

I have no idea haha. I sometimes use a text widget to do so.


----------



## jononotbono

Manaberry said:


> I have no idea haha. I sometimes use a text widget to do so.


That is a good work around


----------



## Drjay

jononotbono said:


> I need to find some arrow icons. In fact, a whole selection of decent icons would be good. Is there anything for sale that can be used in either a non commercial or commercially released product?


OSC has the majority of free icons of Fontawsome built in. You can use it in the label or html fields with the syntax ‚^your-glyph-name-here‘. E.g. ‚^angle-left‘


----------



## jononotbono

Drjay said:


> OSC has the majority of free icons of Fontawsome built in. You can use it in the label fields with the syntax ‚^your-glyph-name-here‘. E.g. ‚^angle-left‘


Yeah I've just been trying that. Just trying to figure out how to make them larger which involves css. 

I'm wondering how everyone knows what codes to use when choosing colours when using css. Is there some kind of chart somewhere that tells you this information?


----------



## Drjay

jononotbono said:


> Yeah I've just been trying that. Just trying to figure out how to make them larger which involves css.
> 
> I'm wondering how everyone knows what codes to use when choosing colours when using css. Is there some kind of chart somewhere that tells you this information?


I normally use the the color picker of one of the colors in the GUI. As soon as you confirm the dialog box you‘ll find the corresponding rgba string in the text field. Then simply copy it over to your css. The format is simple: a string of three or four two digit hex numbers (r,g,b and a) indicating the amount of the respective basic color.


----------



## jononotbono

Drjay said:


> I normally use the the color picker of one of the colors in the GUI. As soon as you confirm the dialog box you‘ll find the corresponding rgba string in the text field. Then simply copy it over to your css. The format is simple: a string of three or four two digit hex numbers (r,g,b and a) indicating the amount of the respective basic color.


Makes total sense man. Thank you


----------



## jononotbono

Got another question. I've set up the expression map and dynamic buttons changing and it works well using the Trem plugin on Instrument tracks due to lack of Midi sends etc.

Is there a way of doing this without the Trem plugin? It's a great workaround but it would be nice not having to use it. Also, is there a way for this to work with both Midi and instrument tracks?

I've been thinking a bit about when the articulations show on set up buttons and wondering how to further the custom module so when you click on a track, the instruments mic positions, and all controls appear as well. I can't see why that's not possible. I'm thinking like with the buttons you pre set up, you would do the same with faders, knobs and buttons for controls. I'm just lost on how to script it but the brain is turning about this.

I've also just watched videos on that Flow 2 by Artificial Harmonics and my word, those guys have got some OSC chops! Makes me realise how pathetic I am at this stuff! 😂


----------



## Drjay

jononotbono said:


> Got another question. I've set up the expression map and dynamic buttons changing and it works well using the Trem plugin on Instrument tracks due to lack of Midi sends etc.
> 
> Is there a way of doing this without the Trem plugin? It's a great workaround but it would be nice not having to use it. Also, is there a way for this to work with both Midi and instrument tracks?
> 
> I've been thinking a bit about when the articulations show on set up buttons and wondering how to further the custom module so when you click on a track, the instruments mic positions, and all controls appear as well. I can't see why that's not possible. I'm thinking like with the buttons you pre set up, you would do the same with faders, knobs and buttons for controls. I'm just lost on how to script it but the brain is turning about this.
> 
> I've also just watched videos on that Flow 2 by Artificial Harmonics and my word, those guys have got some OSC chops! Makes me realise how pathetic I am at this stuff! 😂


I did not use the Tremolo plugin. I programmed a VST FX plugin myself, which establishes an osc connection and passes the track information (including the track name, color etc.) to O-S-C. But it works for instrument tracks only, since Cubase does not allow 3rd party plugins on midi tracks. A different solution (which is used by 14bit midi, as far as I remember) uses the Mackie Control remote device. With some logic in the custom script you can parse the Mackie sysex and get the track information from there. I started implementing it but did not like the solution (Tbh I was to lazy to implement parts of the logic, to get the correct track and initialise the track array). The next solution uses the WK Audio ID remote device. It spits out sysex for every track and you can extract the track names and go on from there. Same story, I‘m too lazy to reverse engineer the protocol (it is not documented) and only build a proof of concept in Max. But it is easier as the MCU solution.
With regards to the automatic selection of faders and knobs: same logic as for the keys. I have a panel with e.g. ten faders and I store the controls (cc, label, color etc.) in a json file. Everytime I select a track the controls are read from the json and updated accordingly. With some extra code, you can additionally include a custom Gui for every instrument.


----------



## jononotbono

Drjay said:


> I did not use the Tremolo plugin. I programmed a VST FX plugin myself, which establishes an osc connection and passes the track information (including the track name, color etc.) to O-S-C. But it works for instrument tracks only, since Cubase does not allow 3rd party plugins on midi tracks. A different solution (which is used by 14bit midi, as far as I remember) uses the Mackie Control remote device. With some logic in the custom script you can parse the Mackie sysex and get the track information from there. I started implementing it but did not like the solution (Tbh I was to lazy to implement parts of the logic, to get the correct track and initialise the track array). The next solution uses the WK Audio ID remote device. It spits out sysex for every track and you can extract the track names and go on from there. Same story, I‘m too lazy to reverse engineer the protocol (it is not documented) and only build a proof of concept in Max. But it is easier as the MCU solution.
> With regards to the automatic selection of faders and knobs: same logic as for the keys. I have a panel with e.g. ten faders and I store the controls (cc, label, color etc.) in a json file. Everytime I select a track the controls are read from the json and updated accordingly. With some extra code, you can additionally include a custom Gui for every instrument.


Wow That's amazing. Lot's to learn! You programmed your own plugin? That's incredible man!


----------



## Drjay

jononotbono said:


> Wow That's amazing. Lot's to learn! You programmed your own plugin? That's incredible man!


Thanks for the compliment, but it guess it is not incredible, but pure obsession to programming and remote controlling everything  That‘s also the reason I will probably never create any piece of music; I spend years to program this and that with regards to remote controls...
Juce makes VST programming a lot easier. You can grab a plugin template and work your way from there. But I have to admit it was tedious and some small looking problem took me hours to solve.


----------



## pbuckingham

jononotbono said:


> I'll set up rtpmidi. Thanks. I'm actually going to buy an actual Midi interface for the touch computer. This way I can literally run midi in and out cables to my midi interface on my main computer and I don't think anything will be more solid and reliable as that. In fact I have a Steinberg Midex8 laying about in the studio I never sold so that might be great (if I can get it working with Catalina).


I'm using a Dell All-in-One running windows10 and Chrome(client)..connects fine over the network to my Mac to control Cubase...can share how if need be....


----------



## jononotbono

pbuckingham said:


> I'm using a Dell All-in-One running windows10 and Chrome(client)..connects fine over the network to my Mac to control Cubase...can share how if need be....


Thanks but all good now. Networked and all working fine


----------



## Ronny D. Ana

On my Android 11 Tablet (Galaxy Tab S7) I use the Chrome Browser App as client for Open Stage Control 1.9.8. I am very new to both (Android 11 and Open Stage Control) so maybe I am missing something. The issue is: Nevertheless I have the option "Prevent sleep" active or not, the screen goes dark after the configured timeout in the android setting "display --> screen timeout". I thought that "Prevent sleep" would overwrite the screen timeout when it is open.
Any help would be appreciated!


----------



## jononotbono

Just wondering if anyone here has the issue of these messages appearing in the bottom right hand corner not disappearing? Every time I restart OSC, it's the only time I can get rid of them. Bit annoying when I need to see the bottom corner.


----------



## pbuckingham

jononotbono said:


> Just wondering if anyone here has the issue of these messages appearing in the bottom right hand corner not disappearing? Every time I restart OSC, it's the only time I can get rid of them. Bit annoying when I need to see the bottom corner.


You on 1.9.7? Mine seems to hide after a few seconds on chrome.


----------



## jononotbono

pbuckingham said:


> You on 1.9.7? Mine seems to hide after a few seconds on chrome.


On 1.9.8. Funny enough, it’s not done it since writing that message.

Anyone else feel they have lost their lives to OSC? 😂


----------



## pbuckingham

jononotbono said:


> On 1.9.8. Funny enough, it’s not done it since writing that message.
> 
> Anyone else feel they have lost their lives to OSC? 😂


Hah! Left the warren and 100% in the underworld now. Its dark down here......


----------



## jononotbono

pbuckingham said:


> Hah! Left the warren and 100% in the underworld now. Its dark down here......


You didn’t leave the Warren. As if!? The Gaul you have to even think you have that kind of choice and power. No...

The Warren SUCKED YOU IN 😂


----------



## Markrs

If anyone is like me and a bit nervous about getting into Open Stage Control a YouTuber called Mack Music has started some tutorials on it that might be useful. He welcomes any requests for areas to cover, including any technical ones as he is also a programmer (he also has started doing videos on JUCE as well).


----------



## DJN

Hello everyone, I have decided to jump in and enjoy the fun! 

I'm just starting and trying to get caught up with you all. So, sorry for the basic questions. I have downloaded the latest version (v1.9.9) on two different machines, (1) my main Cubase PC Windows 10, and (2) a Dell 2130 touchscreen, also Windows 10. When I select "List MIDI Devices" the Cubase PC, I get a full list of available ports. But when I select "List MIDI Devices" on the Dell touchscreen PC, it's giving me an error message.
"(ERROR,MIDI) python-rtmidi not found (or wrong version) (running with python 3.7.0)

Can someone please help me understand why I am getting the midi error message on one PC and not the other? Any help will be greatly appreciated!!


----------



## Drjay

DJN said:


> Hello everyone, I have decided to jump in and enjoy the fun!
> 
> I'm just starting and trying to get caught up with you all. So, sorry for the basic questions. I have downloaded the latest version (v1.9.9) on two different machines, (1) my main Cubase PC Windows 10, and (2) a Dell 2130 touchscreen, also Windows 10. When I select "List MIDI Devices" the Cubase PC, I get a full list of available ports. But when I select "List MIDI Devices" on the Dell touchscreen PC, it's giving me an error message.
> "(ERROR,MIDI) python-rtmidi not found (or wrong version) (running with python 3.7.0)
> 
> Can someone please help me understand why I am getting the midi error message on one PC and not the other? Any help will be greatly appreciated!!


I‘d like to help you, but honestly, I‘ve got no clue. Maybe a user rights/install problem? Works like a charm on my PCs.


----------



## DJN

Thanks for the reply. Yes, I agree it seems like a small install/rights issue. I did a clean install of Windows 10 on the touchscreen hoping that would fix the error, but no luck. Now just need to go through all the options step by step until I find a solution.


----------



## pbuckingham

DJN said:


> Thanks for the reply. Yes, I agree it seems like a small install/rights issue. I did a clean install of Windows 10 on the touchscreen hoping that would fix the error, but no luck. Now just need to go through all the options step by step until I find a solution.


Hey DJN...I am presuming you are using the touchscreen as the controller. If so you don't need to have OST on that machine at all...just a browser to act as the client. Am I missing something?


----------



## MauroPantin

pbuckingham said:


> Hey DJN...I am presuming you are using the touchscreen as the controller. If so you don't need to have OST on that machine at all...just a browser to act as the client. Am I missing something?


@DJN

This is correct. If both devices are in the same LAN network there's no need to have it installed on both, you just access it with IP and port number through a regular browser. It is also easier to manage in terms of MIDI ports and other misc. stuff if you are not planning on using the touchscreen standalone for anything. So if Cubase list the ports and it works there, you're good to go. Just take note of the address that OSC spits out in the console when it starts running, something like:

(INFO) Server started, app available at 
http://172.30.24.101:12388 
http://192.168.1.150:12388 
http://127.0.0.1:12388
Those are similar to my personal ones, I changed the numbers a bit just for the sake of safety. You have to take the second one (the one that starts with 192) and plug that as it is on a web browser in your tablet and then you should be golden.


----------



## DJN

pbuckingham said:


> Hey DJN...I am presuming you are using the touchscreen as the controller. If so you don't need to have OST on that machine at all...just a browser to act as the client. Am I missing something?


Thank for your reply! Yes, you are correct. I am successful running osc on a browser on the touchscreen as you suggested, and that works perfect. I am hoping to find a way to run osc completely on the touchscreen alone and only have it send/receive midi to the main PC. It's just a preference, I feel better not running additional processing on the same machine as my DAW if I can.


----------



## pbuckingham

DJN said:


> Thank for your reply! Yes, you are correct. I am successful running osc on a browser on the touchscreen as you suggested, and that works perfect. I am hoping to find a way to run osc completely on the touchscreen alone and only have it send/receive midi to the main PC. It's just a preference, I feel better not running additional processing on the same machine as my DAW if I can.


As far as I know, I don't think that is possible. You need to have the host running on the machine that Cubase is on. It uses next to zero resources, so I wouldn't worry about that.


----------



## DJN

@pbuckingham / @MauroPantin 
Thank you both for your help! After installing a clean Windows 10 on the touchscreen, I just finished updating all the drivers via the Dell website. Now OSC is working perfectly on the touchscreen without the midi error and now shows available ports from the "List MIDI Devices." Yes, it seems possible (so far) to have it only running on the touchscreen, sending midi via rtpMIDI. I just made a quick test with one button sent from the touchscreen pc to the cubase pc, works as expected! Maybe this isn't the best way to set it up, but I'll continue down this path and see what happens!


----------



## mackmusic

Markrs said:


> If anyone is like me and a bit nervous about getting into Open Stage Control a YouTuber called Mack Music has started some tutorials on it that might be useful. He welcomes any requests for areas to cover, including any technical ones as he is also a programmer (he also has started doing videos on JUCE as well).



Hi everyone. Thank you very much for the referral Mark! I'm by no means an expert but I'm really loving Open Stage Control so far and I hope to get quite deep into it as my skill and confidence level increases. 

I just joined the forum firstly to say thank you directly Mark it's much appreciated, secondly to add anything I can to other discussions and finally, as you mentioned in the comments, there are others here who are doing pretty advanced stuff, so I will check that out as soon as I can.

In the mean time, if you do see anything you like on my YouTube or you want any more direct guidance then please let me know, and as Mark said, I will do my best to respond.

Thanks,
Mack Music


----------



## jononotbono

Hey everyone,

I'm trying to create a display window that shows Timecode. When I have OSC running on my main computer (using OSX and two IAC ports for input and output) I can see timecode in a text label when using /mtc

That all works fine.

However, I have OSC on a Mac Mini with my touch screen connected and I have this computer networked to my main computer. Everything is working fine except for displaying timecode. I'm just wondering if there are any known problems with doing this?

I have 2 IAC ports on the Mac Mini (named the same as the Main computer) but for my commands to work in Cubase I am using Apple's Midi Network Setup and within Cubase I am selecting Midi input and output to be the networked midi ports. Whatever I try, I just can't get the timecode to show on a text label.

In the debugger I can see a wall of data constantly streaming when I hit play or record in Cubase. So I'm not sure what I'm doing wrong. Timecode just does not display in the text box. Really odd.

I also have another question about Timecode.

When I had it working with OSC running natively on the main computer, I noticed that Timecode would display in a Text label but only when playing or recording. If I used the mouse and clicked anywhere, the Timecode values would not update. And this basically renders this functionality as useless because the whole point of having a TC display is so when you stop/scrub/nudge to find exact points for editing, you can have an exact measurement. And a lot of this kind of work involves clicking and moving the cursor manually. I'm hoping it's just something I'm not doing right as I would love a Time Display (and Bars and Beats) on my OSC controller .

Any help would be amazing. And many thanks

Jono


----------



## Loïc D

Do you see any TC data in OSC debugger when you do one of the following actions ?

Besides, I’ve made great progress in my template.
And also managed a reliable solution for changing articulations of selected notes in LPX. Huge time saver.

EDIT: when things cool down and my template is less a WIP, I plan to make a video explaining the whole process around LPX/Osculator/O-S-C/Keyboard Maestro.


----------



## mackmusic

jononotbono said:


> Hey everyone,
> 
> I'm trying to create a display window that shows Timecode. When I have OSC running on my main computer (using OSX and two IAC ports for input and output) I can see timecode in a text label when using /mtc
> 
> That all works fine.
> 
> However, I have OSC on a Mac Mini with my touch screen connected and I have this computer networked to my main computer. Everything is working fine except for displaying timecode. I'm just wondering if there are any known problems with doing this?
> 
> I have 2 IAC ports on the Mac Mini (named the same as the Main computer) but for my commands to work in Cubase I am using Apple's Midi Network Setup and within Cubase I am selecting Midi input and output to be the networked midi ports. Whatever I try, I just can't get the timecode to show on a text label.
> 
> In the debugger I can see a wall of data constantly streaming when I hit play or record in Cubase. So I'm not sure what I'm doing wrong. Timecode just does not display in the text box. Really odd.
> 
> I also have another question about Timecode.
> 
> When I had it working with OSC running natively on the main computer, I noticed that Timecode would display in a Text label but only when playing or recording. If I used the mouse and clicked anywhere, the Timecode values would not update. And this basically renders this functionality as useless because the whole point of having a TC display is so when you stop/scrub/nudge to find exact points for editing, you can have an exact measurement. And a lot of this kind of work involves clicking and moving the cursor manually. I'm hoping it's just something I'm not doing right as I would love a Time Display (and Bars and Beats) on my OSC controller .
> 
> Any help would be amazing. And many thanks
> 
> Jono


So, I've been thinking about this today. You should only ever need OSC server installed and running the machine that runs your DAW (Cubase) and any client (Mac Mini with touchscreen say) on the same network should access your OSC instance via a browser (e.g. Safari, preferably in full screen mode) and everything should be fine. There should be no reason to "network" any midi messages, as far as I can tell, as the OSC server is the only bit that interfaces with IAC. Did you try this already?

Also, I downloaded a Cubase Elements trial and I got MTC data appearing in a text widget with the /mtc address no problem. I was able to access this OSC page from my phone and the timecode was updating while the transport was playing or while you scrub through or click on a clip the timeline. All I did was set it up as below (OSC is the name of my loopMidi device in Windows)






Hopefully this helps and I'm not missing the point massively here!


----------



## DJN

Scripting Question:
I have created a panel with multiple tabs, I would like to be able to switch to a specific tab on the panel when it receives a specific midi input sent from the DAW. Is this possible? I could achieve this is Lemur with selecttab(Panel, 1); (with the midi addresses set on the tab MIDI_ARGS).

I'm still learning basic scripting in OSC, so any help will be greatly appreciated!


----------



## mackmusic

Sure. This wasn't quite as easy as I thought it should be!

Essentially you need to send/set the 'value' of your tab container to be the index of the tab you want active. So, in this example, I have a panel widget that has 3 tabs with the id of 'panel_maintabs', a script widget somewhere with the OSC target set to my MPK mini keyboard and it's listening to '/note' events. If the note is middle C then tab 0 is selected, if it's C#4 the it's tab 1 and if it's D4 then tab 2 is selected.






You could of course change this to listen to the '/control' address if you wanted to (rather than note events!) and then parse out the element of the CC message you want to use to set the appropriate tab. Use console.log here to see what the data looks like so you can pull out the element you need.

FYI: noteOn messages looks like this [1,62,53] if you debug them in the console. This is an array of 3 numbers [channel, note number, velocity]. So, as this object uses zero-based indexing, value[1] means the value at index 1, which is actually the second item in the value object (0,1,2). This is the note number and this is what I wanted to use to decide the tab index for this example. You will also notice the tab index uses zero-based indexing set('panel_maintabs',0) as well, as do most things in JavaScript! And my apologies if this is all well known to you already, but sometimes it isn't obvious to non-programmers 

Hope this helps!


----------



## Drjay

mackmusic said:


> Sure. This wasn't quite as easy as I thought it should be!
> 
> Essentially you need to send/set the 'value' of your tab container to be the index of the tab you want active. So, in this example, I have a panel widget that has 3 tabs with the id of 'panel_maintabs', a script widget somewhere with the OSC target set to my MPK mini keyboard and it's listening to '/note' events. If the note is middle C then tab 0 is selected, if it's C#4 the it's tab 1 and if it's D4 then tab 2 is selected.
> 
> 
> 
> 
> 
> 
> You could of course change this to listen to the '/control' address if you wanted to (rather than note events!) and then parse out the element of the CC message you want to use to set the appropriate tab. Use console.log here to see what the data looks like so you can pull out the element you need.
> 
> FYI: noteOn messages looks like this [1,62,53] if you debug them in the console. This is an array of 3 numbers [channel, note number, velocity]. So, as this object uses zero-based indexing, value[1] means the value at index 1, which is actually the second item in the value object (0,1,2). This is the note number and this is what I wanted to use to decide the tab index for this example. You will also notice the tab index uses zero-based indexing set('panel_maintabs',0) as well, as do most things in JavaScript! And my apologies if this is all well known to you already, but sometimes it isn't obvious to non-programmers
> 
> Hope this helps!


In these cases I tend to use code like: set(‚panel_maintabs‘, value[1]-60). But maybe it is just poor man‘s Kernighan Ritchie style


----------



## DJN

mackmusic said:


> Sure. This wasn't quite as easy as I thought it should be!
> 
> Essentially you need to send/set the 'value' of your tab container to be the index of the tab you want active. So, in this example, I have a panel widget that has 3 tabs with the id of 'panel_maintabs', a script widget somewhere with the OSC target set to my MPK mini keyboard and it's listening to '/note' events. If the note is middle C then tab 0 is selected, if it's C#4 the it's tab 1 and if it's D4 then tab 2 is selected.
> 
> 
> 
> 
> 
> 
> You could of course change this to listen to the '/control' address if you wanted to (rather than note events!) and then parse out the element of the CC message you want to use to set the appropriate tab. Use console.log here to see what the data looks like so you can pull out the element you need.
> 
> FYI: noteOn messages looks like this [1,62,53] if you debug them in the console. This is an array of 3 numbers [channel, note number, velocity]. So, as this object uses zero-based indexing, value[1] means the value at index 1, which is actually the second item in the value object (0,1,2). This is the note number and this is what I wanted to use to decide the tab index for this example. You will also notice the tab index uses zero-based indexing set('panel_maintabs',0) as well, as do most things in JavaScript! And my apologies if this is all well known to you already, but sometimes it isn't obvious to non-programmers
> 
> Hope this helps!


Thank you for your help! As I am a beginner at scripting osc, I really appreciate your clear, step-by-step explanation and example. I am able to successfully recreate your example, now I am trying to plugin "/control" and have it listen for specific midi control messages. Are midi messages represented by [channel,CC#,value] ??


----------



## jononotbono

mackmusic said:


> So, I've been thinking about this today. You should only ever need OSC server installed and running the machine that runs your DAW (Cubase) and any client (Mac Mini with touchscreen say) on the same network should access your OSC instance via a browser (e.g. Safari, preferably in full screen mode) and everything should be fine. There should be no reason to "network" any midi messages, as far as I can tell, as the OSC server is the only bit that interfaces with IAC. Did you try this already?
> 
> Also, I downloaded a Cubase Elements trial and I got MTC data appearing in a text widget with the /mtc address no problem. I was able to access this OSC page from my phone and the timecode was updating while the transport was playing or while you scrub through or click on a clip the timeline. All I did was set it up as below (OSC is the name of my loopMidi device in Windows)
> 
> 
> 
> 
> 
> 
> Hopefully this helps and I'm not missing the point massively here!


Hey man, sorry for the late reply. I've been lost in the OSC underworld.

Ok so I initially has OSC on my main DAW machine. And I have 2 virtual midi ports set up on the main DAW machine. The reason for this is to have an input and an output so it avoids any midi feedback when sending midi (and timecode) to OSC from the DAW). I also don't use OSC in a browser. The reason/s for this are because I have a 27" touch screen and it's so much faster using OSC from, literally, OSC (there's a term for using it in that way in the documentation but can't remember it at the minute).

Once I realised that have a touchscreen plugged in to your main DAW computer is problematic regarding apps going in and out of focus (As soon as you touch the touch screen the DAW goes out of focus and vice versa) I then decided to network a second computer of which my Touch screen is plugged into directly. The networked computer (mac mini) is plugged into my DAW computer (Mac Pro). I set up an input and output Midi port exactly the same way as with the Mac Pro. Using IAC (I know with PC you need something like LoopMidi but luckily with OSX they have this basically built in with IAC.

Right, so, at this point, I have an input and output on both computers. It was here that I was having trouble. All of a sudden my Cubase Generic remotes that were set with the inputs and outputs of the DAW machine weren't connecting with OSC. So I looked into the midi networking options of OSX and once I created a connection, I selected the network midi ports for my Cubase Generic Remotes and hey presto, OSC was sending messages to Cubase. And it works amazingly well...

Until Timecode.

For some reason I can't show timecode. When I initially set this all up on one computer, I could send timecode to a text label in OSC so I know something to do with this network connection is messing things up. In the debugger I am seeing Timecode data constantly stream but it's not changing from 00:00:00:00. Until I activate sysex and mtc in the server. Then, in the debugger I am seeing the timecode data exactly as it is in Cubase and when I stop and click anywhere in Cubase, the Timecode updates. But it still won't show on the text label. Totally puzzled by this. I might film this on my iPhone and post it unlisted just to demonstrate what is happening and hopefully you or anyone else may spot something stupid I have mostly done or forgotten to do.

Yeah, I understand using OSC with a browser if your intention is to use it with an iPad but I don't see the point when you have a larger touch screen running from a computer and you can run it directly from the computer. I stop working on this issue to get the rest of my controller finished as it already sucked a day of my life away and figure time is best used elsewhere right now! 😂

Anyway, thanks for taking the time to help! I'll be sure to mention you in my next YouTube video I make on the controller I'm making!


----------



## mackmusic

DJN said:


> Thank you for your help! As I am a beginner at scripting osc, I really appreciate your clear, step-by-step explanation and example. I am able to successfully recreate your example, now I am trying to plugin "/control" and have it listen for specific midi control messages. Are midi messages represented by [channel,CC#,value] ??


No worries, glad I could help and yes, CC messages are just like you described. When in doubt RTM  https://openstagecontrol.ammd.net/docs/midi/midi-messages/#control-channel-cc-value. Yeah, I really don't want to be that guy, but the docs are actually pretty good for Open Stage Control. But again, they're obviously written by a developer, so if that's not your background they can appear a little obtuse to the casual observer!


----------



## DJN

mackmusic said:


> No worries, glad I could help and yes, CC messages are just like you described. When in doubt RTM  https://openstagecontrol.ammd.net/docs/midi/midi-messages/#control-channel-cc-value. Yeah, I really don't want to be that guy, but the docs are actually pretty good for Open Stage Control. But again, they're obviously written by a developer, so if that's not your background they can appear a little obtuse to the casual observer!


I appreciate the positive feedback, I'm right with you on always RTM. I'm working my way through it, just need a little help in the beginning translating the coding language. I've got a grip on the nouns, now working on verbs and adjectives


----------



## jononotbono

Can someone explain to me why you would use a Clone Container?

Does it save on resources somehow? I'm taking a guess here but instead of duplicating many faders that all do the same thing you create the main fader and then create clones? Or have I got this wrong?

Perhaps you create 1 fader that is assigned to, for example, a CC value. Then if I clone that, can you just change the CC value so OSC then thinks there is only 1 fader but it does multiple things? Just read the documentation but I still don't understand it. No change here then 😂


----------



## Loïc D

I’m wondering the same and could not find a proper answer in the forums too...


----------



## mackmusic

I did - cough - post a video about this on my YouTube channel  I think they're great for duplicating collections of widgets together. Let me know if this helps shed any light on them:  I use them with variables in the parent to pass on different values for OSC commands etc.


----------



## jononotbono

mackmusic said:


> I did - cough - post a video about this on my YouTube channel  I think they're great for duplicating collections of widgets together. Let me know if this helps shed any light on them:  I use them with variables in the parent to pass on different values for OSC commands etc.



I will check your video out later man for sure! Do you know if it reduces any strain on resources?

I’ve not been designing my controller for iPads but I thought I’d see how it runs via a browser on an iPad earlier and it was laggy. When running on my main touch screen and not in a browser it’s instant which is why it’s got me wondering about performance.


----------



## Loïc D

@jononotbono 
On Logic through OSCulator, I have no pb sending and seeing SMPTE and beats. At play time and any transport operation.
So, not an OSC issue. Maybe Cubase ?


----------



## jononotbono

Loïc D said:


> @jononotbono
> On Logic through OSCulator, I have no pb sending and seeing SMPTE and beats. At play time and any transport operation.
> So, not an OSC issue. Maybe Cubase ?


What’s OSCulator?

I’m gonna revisit this issue once I’ve finished a list of stuff I’ve written to do. And that list has got to 3 pages of A4. Best put the kettle on 😂


----------



## InLight-Tone

Drjay said:


> That‘s also the reason I will probably never create any piece of music; I spend years to program this and that with regards to remote controls...


And there is the danger unless that's your goal of course...


----------



## Markrs

Drjay said:


> That‘s also the reason I will probably never create any piece of music; I spend years to program this and that with regards to remote controls...





InLight-Tone said:


> And there is the danger unless that's your goal of course...


That is the reason I have parked this for now. I am currently having 1-1 lessons to help me progress with my music and I know if I get into this is will be absorbed as I love playing with this sort of stuff.

That is not to say that I won't do it at some point, as I will, just hoping with the great people on here and some good YouTube videos I can bypass a lot of side tangents.


----------



## Drjay

jononotbono said:


> Can someone explain to me why you would use a Clone Container?
> 
> Does it save on resources somehow? I'm taking a guess here but instead of duplicating many faders that all do the same thing you create the main fader and then create clones? Or have I got this wrong?
> 
> Perhaps you create 1 fader that is assigned to, for example, a CC value. Then if I clone that, can you just change the CC value so OSC then thinks there is only 1 fader but it does multiple things? Just read the documentation but I still don't understand it. No change here then 😂


Iirc, I read something on the OSC site that clones have no positive impact on resources, since the clones are basically copies.
It saves you from donkey work, like entering consecutive cc messages manually (you can use formulas instead), changing attributes for objects for every single widget, automatic numbering of of widgets and stuff like that. But honestly I never found a real use case, since those things could be done -more or less elegantly - in other ways too.


----------



## jononotbono

Drjay said:


> Iirc, I read something on the OSC site that clones have no positive impact on resources, since the clones are basically copies.
> It saves you from donkey work, like entering consecutive cc messages manually (you can use formulas instead), changing attributes for objects for every single widget, automatic numbering of of widgets and stuff like that. But honestly I never found a real use case, since those things could be done -more or less elegantly - in other ways too.


Thanks man


----------



## Loïc D

jononotbono said:


> What’s OSCulator?
> 
> I’m gonna revisit this issue once I’ve finished a list of stuff I’ve written to do. And that list has got to 3 pages of A4. Best put the kettle on 😂


OSCulator is a software that’s seen as control surface in Logic. It outputs all actions to OSC messages and allows the redirection or transformation of messages.
I use it only to send OSC messages to outside world. I guess you could get the same with OSC Touch but I don’t know if messages can be read outside of OSC Touch app.

I guess you don’t need this with Cubase.

EDIT : also OSCulator allows you to turn controllers like WiiMote or WACOM tablets to MIDI controller.


----------



## jononotbono

Loïc D said:


> OSCulator is a software that’s seen as control surface in Logic. It outputs all actions to OSC messages and allows the redirection or transformation of messages.
> I use it only to send OSC messages to outside world. I guess you could get the same with OSC Touch but I don’t know if messages can be read outside of OSC Touch app.
> 
> I guess you don’t need this with Cubase.
> 
> EDIT : also OSCulator allows you to turn controllers like WiiMote or WACOM tablets to MIDI controller.


Yeah doesn't sound like it's needed for Cubase.


----------



## jononotbono

I just had to restart my computer as for some reason my keyboard stopped working. So once I restarted, I loaded my OSC JSON file and I get the error

"Maximum Call Stack Size Exceeded"

And I can't open my session. I'm not sure why or what has happened. Could someone let me know what the problem is? I've literally not added anything today except for assigning buttons and faders. I'm worried the file is corrupted? So much work has gone into this version. I have a back up but will lose at least 20hrs worth of work if I have to revert to it.

Many thanks


----------



## jononotbono

Regarding my last post, man, Jean is so amazing. I messaged on the OSC forum and he instantly asked for the JSON. He debugged it within 10 minutes and said to me...

"
I don't know how it ended up here but at line 53122 a clone widget has its widgetIdproperty set to its own id, thus causing an infinite loop (aka maximum call stack exceeded). Editing this property in the file fixes your session.

Normally the editor prevents from saving a session with this kind of errors, but there might be some edge cases undiscovered yet."

So my controller may have discovered a bug of some sorts. Anyway, the guy is a legend and problem all sorted now. I edited the code and it opened!


----------



## xques

Hi there! My name is Xavi, and I found your thread about OSC. Nice work!
I'm on mac with the last version of OSC, and i'm trying to do the @Mihkel Zilmer Articulation reader. I have the project file, but the MIDI ports are different.
I'm using the IAC driver that i used when i was in Lemur, IAC 1 I/O for CC's and DAW control and IAC 2 Out for the send from cubase to Lemur.
I want to use that ports, and use the Zilmer's template as starting point.
Can you help me?
Thanks you!


----------



## mackmusic

jononotbono said:


> Regarding my last post, man, Jean is so amazing. I messaged on the OSC forum and he instantly asked for the JSON. He debugged it within 10 minutes and said to me...
> 
> "
> I don't know how it ended up here but at line 53122 a clone widget has its widgetIdproperty set to its own id, thus causing an infinite loop (aka maximum call stack exceeded). Editing this property in the file fixes your session.
> 
> Normally the editor prevents from saving a session with this kind of errors, but there might be some edge cases undiscovered yet."
> 
> So my controller may have discovered a bug of some sorts. Anyway, the guy is a legend and problem all sorted now. I edited the code and it opened!


Glad you got it sorted. Outside of a memory error I couldn't have told you what it was without debugging your template and the source. Nice catch on the possible bug!


----------



## mackmusic

xques said:


> Hi there! My name is Xavi, and I found your thread about OSC. Nice work!
> I'm on mac with the last version of OSC, and i'm trying to do the @Mihkel Zilmer Articulation reader. I have the project file, but the MIDI ports are different.
> I'm using the IAC driver that i used when i was in Lemur, IAC 1 I/O for CC's and DAW control and IAC 2 Out for the send from cubase to Lemur.
> I want to use that ports, and use the Zilmer's template as starting point.
> Can you help me?
> Thanks you!


I've no idea what the articulation reader is but first thing to do is start the OSC app and then go to the "list midi devices" menu. This will give you the IDs of the midi devices you have installed/connected. You will need to use these IDs in your OSC startup config e.g. MYMIDIDEVICENAME:midiINid,midiOUTid. This is well documented in the getting started thread somewhere on this forum. If you need any other help please do ask, maybe with some more information and some screenshots to help understand what you're trying to do.


----------



## xques

mackmusic said:


> I've no idea what the articulation reader is but first thing to do is start the OSC app and then go to the "list midi devices" menu. This will give you the IDs of the midi devices you have installed/connected. You will need to use these IDs in your OSC startup config e.g. MYMIDIDEVICENAME:midiINid,midiOUTid. This is well documented in the getting started thread somewhere on this forum. If you need any other help please do ask, maybe with some more information and some screenshots to help understand what you're trying to do.


Yes, i have it connected and working with buttons that send values to cubase, but i can recieve the info from cubase


----------



## mackmusic

xques said:


> Yes, i have it connected and working with buttons that send values to cubase, but i can recieve the info from cubase


do you mean "*can't* receive the info"?  can you share a template and more about what you're trying to do please?


----------



## xques

Take a look at page 7 to @Mihkel Zilmer template and js file, it's the articulations section


----------



## jononotbono

xques said:


> Take a look at page 7 to @Mihkel Zilmer template and js file, it's the articulations section


Hey man, if you're looking at page 7, then open up Mihkel's template, open up the JS Custom module file. Look at what is happening and reverse engineer it? If you have Mihkel's template working, then you have that working. Then you have to figure out how to make it work for you. What is it you are having trouble with specifically? I ask this because I went through this a few weeks ago and after reading everything carefully I managed to get it working. All the information is in this epic thread man!


----------



## xques

I think its a midi problem, from cubase or osc midi ports, i can choose the articulations, but the name doesnt show, i'm migrating from lemur and now i'm lost😂 i will check all the thread again, step by step


----------



## Loïc D

Yes, OSC waters are very cold at first but when you’re getting used to it you can swim fast


----------



## jononotbono

xques said:


> I think its a midi problem, from cubase or osc midi ports, i can choose the articulations, but the name doesnt show, i'm migrating from lemur and now i'm lost😂 i will check all the thread again, step by step


Ah man, we're all lost here. And one thing leads to another! I understand the struggle! When you do get it working, you will jump for joy. Well, I did!


----------



## xques

I have it! thanks to all of you! now I will try to create from scratch following the example from Mihkel.


----------



## xques

ok! after several times trying, i have another problem... I want two buttons to increase/decrease one by one midi CC 32 (to change between kontakt instrument banks) value (0 o 127). My first attempt only do it once. 
thoughts?


----------



## Drjay

xques said:


> ok! after several times trying, i have another problem... I want two buttons to increase/decrease one by one midi CC 32 (to change between kontakt instrument banks) value (0 o 127). My first attempt only do it once.
> thoughts?


There are many ways to skin the cat. I would probably use two tap buttons sending +/-1 to a variable and the variable sends out its value as cc32. I personally find it easier to do this in the custom script but you can code it via widget attributes in the GUI as well.

I attached an an example file for a "GUI" solution. It's not very nice, but you (hopefuly) get the idea.


----------



## Danje

Drjay said:


> Passing a variable to The logical editor is not possible. But you can reduce the amount of work (a little) by using consecutive controller numbers, so you can use offsets. Additionally you can use text editors instead of the GUI to copy and paste from the Cubase xmls to other documents (json, text snippets). This way you can for example create array definitions which in turn can be used in the widget definitions . A text editor with column edit functions comes in handy for this task (eg. Notepad++). You could also program command line scripts converting xml to json. The sky is the limit
> At least these techniques save you from donkey work, like copying and typing button descriptions etc.
> Variables can be accessed by the @{} statement which can practically used everywhere. I think there is also a new VAR statement, but I never tried it.


Hi Drjay,

Your reply has stimulated me to really dive into the use variables in Open Stage Control. It took me a while and quite some effort to grasp it but I'm glad I persisted! Open Stage Control is a wonderful gift from mr. Doucet. 
So, I thank you for your this (which I should have done right away).

Working with editors and text files - Cubase's xml in particular - is the way to go indeed. However writing scripts to automatically convert between the files is a territory I'd like to stay clear of. It may be a second nature to you yet for me it'll take tons of time which can't be spent on actual composing.

Too bad there are no direct ways to send variables into the Logical Editors. Incremental steps are an acceptable altenative even though far from ideal.


Do you know if it possible to set the song position pointer in Cubase by sending a MIDI command? I'm trying to figure out if I can hit anywhere on a bar on the touch screen and have a corresponding song position sent to Cubase.
I tried to sent MIDI Time Code messages and Song Position messages from OSC or Bome MIDI Translator, but so far Cubase doesn't recognize these MIDI commands. I may be doing something wrong.


----------



## Drjay

Danje said:


> Hi Drjay,
> 
> Your reply has stimulated me to really dive into the use variables in Open Stage Control. It took me a while and quite some effort to grasp it but I'm glad I persisted! Open Stage Control is a wonderful gift from mr. Doucet.
> So, I thank you for your this (which I should have done right away).
> 
> Working with editors and text files - Cubase's xml in particular - is the way to go indeed. However writing scripts to automatically convert between the files is a territory I'd like to stay clear of. It may be a second nature to you yet for me it'll take tons of time which can't be spent on actual composing.
> 
> Too bad there are no direct ways to send variables into the Logical Editors. Incremental steps are an acceptable altenative even though far from ideal.
> 
> 
> Do you know if it possible to set the song position pointer in Cubase by sending a MIDI command? I'm trying to figure out if I can hit anywhere on a bar on the touch screen and have a corresponding song position sent to Cubase.
> I tried to sent MIDI Time Code messages and Song Position messages from OSC or Bome MIDI Translator, but so far Cubase doesn't recognize these MIDI commands. I may be doing something wrong.


You are welcome  
I never tried MTC. I use markers instead, which can be set via the generic remote.


----------



## jononotbono

Danje said:


> Hi Drjay,
> 
> Your reply has stimulated me to really dive into the use variables in Open Stage Control. It took me a while and quite some effort to grasp it but I'm glad I persisted! Open Stage Control is a wonderful gift from mr. Doucet.
> So, I thank you for your this (which I should have done right away).
> 
> Working with editors and text files - Cubase's xml in particular - is the way to go indeed. However writing scripts to automatically convert between the files is a territory I'd like to stay clear of. It may be a second nature to you yet for me it'll take tons of time which can't be spent on actual composing.
> 
> Too bad there are no direct ways to send variables into the Logical Editors. Incremental steps are an acceptable altenative even though far from ideal.
> 
> 
> Do you know if it possible to set the song position pointer in Cubase by sending a MIDI command? I'm trying to figure out if I can hit anywhere on a bar on the touch screen and have a corresponding song position sent to Cubase.
> I tried to sent MIDI Time Code messages and Song Position messages from OSC or Bome MIDI Translator, but so far Cubase doesn't recognize these MIDI commands. I may be doing something wrong.


Yes. You must type in mtc and sysex

Actually I'm a bit drunk right now

Type sysex then mtc
So...

sysex mtc OSCtoJNB:-1,0 etc
Plus your midi port names (if you have more than 1)

Remember, It is what you want! Not what you're told


----------



## jononotbono

This video is now so out of date but maybe it's a bit of fun. If you're like me, you're constantly fucking around in the dark. Trying to piece together bits of code. Trying to make things work. This switch, that switch. Well, believe me. If I can figure some of this stuff out, you can as well!


----------



## jononotbono

I re-apologise. I'm not/wasted at the minute.


----------



## Smikes77

Can you set up a dedicated page for something like omnisphere so you can control everything from osc?


----------



## Drjay

Smikes77 said:


> Can you set up a dedicated page for something like omnisphere so you can control everything from osc?


Of course, you can.  I guess your question needs to be more specific. What exactly do you want to achieve, which DAW, etc. It also depends on the available parameters of Omnisphere.


----------



## Smikes77

Drjay said:


> Of course, you can.  I guess your question needs to be more specific. What exactly do you want to achieve, which DAW, etc. It also depends on the available parameters of Omnisphere.



i would like to control all the parameters, so anything that you could assign a cc for.. Basically any knob or button that could be assigned something. I have Cubase 11 pro.


----------



## Drjay

Sorry, I don‘t want to bother you, but I still don‘t get the problem. You can assign every controller to (almost) any widget. If you like to have a different page in the GUI , the simplest solution is to make the root widget tabbed and add the widgets to new tab.
I was asking for your Daw, since in Cubase you can also control the Vst parameters via the generic remote, which can be a better solution under some circumstances.
If you never tried OSC and you want to know if it is worth diving into it, I‘d say definitely ‚YES‘.


----------



## Marco

Hey guys, I am developing my own template in open stage, everything is pretty smooth but I can't figure out a way to send a midi out from cubase to open stage that can be used to switch a keyswitch control page for instance. 

Any help? 

thank you so much =)


----------



## xques

Marco said:


> Hey guys, I am developing my own template in open stage, everything is pretty smooth but I can't figure out a way to send a midi out from cubase to open stage that can be used to switch a keyswitch control page for instance.
> 
> Any help?
> 
> thank you so much =)


Create two ports in IAC or loopmidi, call them OsctoDaw and DawtoOsc, the first will send the info to daw, and the other will recieve the info from daw, that option is the best. Take a look at Mihkel tutorial


----------



## DJN

Hello all,
I'm working in Cubase using Mihkel's articulation switching method. I'm trying to understand how the Custom Module script works in detail. I would like to alter the script to select multiple tabs in OSC, rather than populate names within a panel. I was able to achieve this in Lemur, but the scripting knowledge required for OSC is over my head at the moment. Any help or recommendations for sources to learn basic scripting skills will be greatly appreciated!


----------



## Marco

xques said:


> Create two ports in IAC or loopmidi, call them OsctoDaw and DawtoOsc, the first will send the info to daw, and the other will recieve the info from daw, that option is the best. Take a look at Mihkel tutorial


Hey man, thank you for the head-up, appreciate it. I have been looking but I can't find the tutorial you are talking about, is it in this thread and I am missing it or is it somewhere else? =)


----------



## TheMadAtheist

Nice, might be what I'm looking for, I'm already using SpaceDesk to use my tablet as a 2nd monitor connected via USB. Also want to use it as a shortcut input for stuff like Gimp so I resize, rotate and select tools while leaving the main image on the PC monitor.

Can this work over USB?


----------



## timbit2006

I just had a cool idea.
Can anyone think of a clever way to emulate a ribbon control like on the CS-80 into OSC?
Pitchbend from center is obvious but the difference with CS-80, you can finger anywhere and it pitches up/down from that slide point so things like trills are really easy and fun
I don't know why I hadn't thought of that until now, I'll probably have time to try to figure it out a week or two. Might as well see if anyone else has experience until then.


----------



## robgb

TheMadAtheist said:


> Nice, might be what I'm looking for, I'm already using SpaceDesk to use my tablet as a 2nd monitor connected via USB. Also want to use it as a shortcut input for stuff like Gimp so I resize, rotate and select tools while leaving the main image on the PC monitor.
> 
> Can this work over USB?


Yes. Search the OSC website forum for details.


----------



## jononotbono

Fuck. It's been a while. What have I missed?  x


----------



## Smikes77

timbit2006 said:


> I just had a cool idea.
> Can anyone think of a clever way to emulate a ribbon control like on the CS-80 into OSC?
> Pitchbend from center is obvious but the difference with CS-80, you can finger anywhere and it pitches up/down from that slide point so things like trills are really easy and fun
> I don't know why I hadn't thought of that until now, I'll probably have time to try to figure it out a week or two. Might as well see if anyone else has experience until then.


Oh jeez, and now @jononotbono has seen it, you’ve given him more ideas. And he’ll expand on it too. I’m gonna change his name to jononotelon.


----------



## pbuckingham

Smikes77 said:


> Oh jeez, and now @jononotbono has seen it, you’ve given him more ideas. And he’ll expand on it too. I’m gonna change his name to jononotelon.


It's funny and yes I'm surprised I haven't seen one in Jono's template....I just made one this week. Not sure why it took me forever to think of it either since the alternative is so expensive. I'll post it....


----------



## pbuckingham

Here it is Vangelis fans....you will have to make a separate IAC driver. I called mine OSCtoMIDI. And activate "In All Midi" in Cubase. This will prevent the dreaded "Midi Echo". Works great! Don't mind my mess of a template...its a WIP.


----------



## jononotbono

Smikes77 said:


> Oh jeez, and now @jononotbono has seen it, you’ve given him more ideas. And he’ll expand on it too. I’m gonna change his name to jononotelon.


NO MORE


----------



## jononotbono

pbuckingham said:


> Here it is Vangelis fans....you will have to make a separate IAC driver. I called mine OSCtoMIDI. And activate "In All Midi" in Cubase. This will prevent the dreaded "Midi Echo". Works great! Don't mind my mess of a template...its a WIP.



What is this? A fader that's sending out pitch bend?


----------



## jononotbono

Smikes77 said:


> Oh jeez, and now @jononotbono has seen it, you’ve given him more ideas. And he’ll expand on it too. I’m gonna change his name to jononotelon.


FFS. I’ve already done that. It’s in a few places (including Vertically - not just horizontal) to minimise page hopping. They spring to centre and also snap to any position you tap.

Was getting excited for a second 😂


----------



## Manaberry

It's funny. I've come here with that software and now, all of you guys have a way more advanced template than me haha


----------



## jononotbono

Manaberry said:


> It's funny. I've come here with that software and now, all of you guys have a way more advanced template than me haha


Things have got seriously out of control man 😂


----------



## timbit2006

pbuckingham said:


> Here it is Vangelis fans....you will have to make a separate IAC driver. I called mine OSCtoMIDI. And activate "In All Midi" in Cubase. This will prevent the dreaded "Midi Echo". Works great! Don't mind my mess of a template...its a WIP.



Damn I love this place. VI Control has the best community.
I had the feeling a VI genius would know the way to do it.


----------



## pbuckingham

jononotbono said:


> What is this? A fader that's sending out pitch bend?


Exactly


----------



## pbuckingham

jononotbono said:


> FFS. I’ve already done that. It’s in a few places (including Vertically - not just horizontal) to minimise page hopping. They spring to centre and also snap to any position you tap.
> 
> Was getting excited for a second 😂


Your's is of course way better looking...dammit! When is the jono template hitting the market?!?


----------



## jononotbono

pbuckingham said:


> Your's is of course way better looking...dammit! When is the jono template hitting the market?!?


That is a very good question. 😂

At the min I’m just finalising an Articulation Expression Map System and then I think I’m on the final climb of this journey and then doing the last things I have on a list of things to do (for version 1). However, I’ve been saying this for about 2 months as the workload has been insane to do this. Im very much looking forward to getting out of Base Camp 😂


----------



## Danje

There must be some clever programming under the hood here ...


----------



## jononotbono

Danje said:


> There must be some clever programming under the hood here ...


WTF man! Whose been leaking my stuff (all over the pavement). 😂


----------



## jononotbono

It's a relieving moment. Articulation system figured out!


----------



## jononotbono

Articulation System.

No plugin needed.
No Quick Controls needed.
No Generic Remotes Needed.
No Automation Lanes used.

I'm excited! Which is rare. 😂


----------



## Drjay

jononotbono said:


> Articulation System.
> 
> No plugin needed.
> No Quick Controls needed.
> No Generic Remotes Needed.
> No Automation Lanes used.
> 
> I'm excited! Which is rare. 😂


MCU ?


----------



## Manaberry

jononotbono said:


> It's a relieving moment. Articulation system figured out!


----------



## RaztoR

jononotbono said:


> Articulation System.
> 
> No plugin needed.
> No Quick Controls needed.
> No Generic Remotes Needed.
> No Automation Lanes used.
> 
> I'm excited! Which is rare. 😂


This sounds very promising! I started designing my own OSC interface a while ago which led me to look for a practical method to automatically identify and name articulations. The main idea would then be to dynamically populate an articulation matrix inside of OSC depending on the instrument-/MIDI track I've selected inside of Cubase. 

I've looked into various solutions presented here on VI-Control. Some use JavaScript and manual input for naming the articulations and their respective attributes. While this can be a fine solution for an articulation mapper, I would like improve upon that idea by automating the naming task which would save me from having to manually write down all the articulations for the hundreds and hundreds of articulations found in my latest scoring template. 

The question is how feasible this idea is, if at all. Ideas on how to approach the problem are more than welcome. Does anyone know if there is there a way to receive articulation data or similar information from sampler hosts like Kontakt, OPUS and Play using VST2/VST3? 

I've looked into Steinberg's VST SDK and observed that VST 3.7.3 added a flag for notifying key-switch changes. I was thinking that there might be a way to fetch data from the sampler and convert the data to a readable format using C++; followed by sending that data to OSC.

Thank you for your time.


----------



## Drjay

Since you had a look at the VST SDK, I assume you have programming experience. 
At one point or the other you will not get along without manual steps. I personally use a Powershell script to extract data from Cubase expression maps and convert it into JSON, which in turn is used by my OSC controller. Excel, a text editor with column edit functions (e.g. Notepad++) and OCR software (MS OneNote is fine) can come in handy too.


----------



## RaztoR

Drjay said:


> Since you had a look at the VST SDK, I assume you have programming experience.
> At one point or the other you will not get along without manual steps. I personally use a Powershell script to extract data from Cubase expression maps and convert it into JSON, which in turn is used by my OSC controller. Excel, a text editor with column edit functions (e.g. Notepad++) and OCR software (MS OneNote is fine) can come in handy too.


It is more than understandable that there will be manual steps along the way, that is to be expected. My intention is to see if those manual steps can be optimally reduced. That aside, your approach seem like an excellent alternative to what I had in mind. I had overlooked the possibility of using powershell to extract data from the Cubase expression maps along with the usage of an OCR software. I appreciate the suggestion, thank you for the feedback.

Regarding my programming experience. I am most comfortable with C++, followed by C, C# and Java. But I still have a lot to learn.


----------



## blaggins

I've started on a little utility that parses Cubase expression maps to extract information about the articulation, keyswitch, and UACC info. It's in python but you might find it helpful:









Utility-Scripts-for-Composers/expression-map-parser.py at main · tpoots/Utility-Scripts-for-Composers


Collection of useful scripts for composers. Contribute to tpoots/Utility-Scripts-for-Composers development by creating an account on GitHub.




github.com





easiest way to run it is to just call it from the command line like:
>python expression-map-parser.py {path-to-directory-containing-expression-maps} --csv

(note the "--csv" flag at the end). This will parse every expression map contained in the directory and dump a CSV with all the articulation, keyswitch, and UACC details for each expression map. I've been using it to design the UI for my OSC articulation controller, like you I have found it very useful to get a list of all the articulations possible in a given library without having to manually type them all out.

The script does other stuff too if you don't add the "--csv" flag but that is fairly specific to my OSC configuration and requires a few more variables to be set up. I posted a quick and dirty blurb about how that works here https://vi-control.net/community/th...nd-cubase-expression-maps.114281/post-4912751 and I may eventually get around to cleaning the code up a bit and properly "releasing" the OSC controller plus associated utility scripts at some point.


----------



## Drjay

@RaztoR: You’re welcome


----------



## Ibofobi

I just started to look into making an OSC controller as well. A generic articulation switcher would be my main goal. Did any of you find a generic way of identifying which track is selected in Cubase, without having to manually put some MIDI transformer or plugin sending specific identifier values on each and every track?


----------



## blaggins

Ibofobi said:


> I just started to look into making an OSC controller as well. A generic articulation switcher would be my main goal. Did any of you find a generic way of identifying which track is selected in Cubase, without having to manually put some MIDI transformer or plugin sending specific identifier values on each and every track?


I have not found a way to do this. I have a poly pressure input transformer on each track. OSC is configured to send a PP 0 message whenever *any* track is selected (which is routed to the selected track automatically of course) and each track transforms PP0 into a different channel/value combo and sends it back to OSC. It's not as painful as it sounds if you make your OSC controller configuration driven. For example in mine, the channel identifies the "library" and the PP value identifies which instrument number within that library, so the incoming PP message is decoded and a single JS script is called that sets up the UI appropriately.


----------



## Ibofobi

tpoots said:


> I have not found a way to do this. I have a poly pressure input transformer on each track. OSC is configured to send a PP 0 message whenever *any* track is selected (which is routed to the selected track automatically of course) and each track transforms PP0 into a different channel/value combo and sends it back to OSC. It's not as painful as it sounds if you make your OSC controller configuration driven. For example in mine, the channel identifies the "library" and the PP value identifies which instrument number within that library, so the incoming PP message is decoded and a single JS script is called that sets up the UI appropriately.


Ok, I will probably have to consider such a solution. Thanks for your answer!


----------



## Drjay

If you are looking for a quick and stable solution, I suggest to use the one mentioned above with the transformer, this way it only works with midi tracks though. In order to use it with instrument tracks, you‘ll have to use a plugin in the FX chain and get the values via the generic remote. 
But there are other solutions as well, using e.g. the MCU protocol, or EUCON. Eucon is not feasible imo, since the protocol is not published. I am currently using MCU, but the solution it is a little bit fiddly; it takes some effort to make it run robust.


----------



## Ibofobi

Drjay said:


> If you are looking for a quick and stable solution, I suggest to use the one mentioned above with the transformer, this way it only works with midi tracks though. In order to use it with instrument tracks, you‘ll have to use a plugin in the FX chain and get the values via the generic remote.
> But there are other solutions as well, using e.g. the MCU protocol, or EUCON. Eucon is not feasible imo, since the protocol is not published. I am currently using MCU, but the solution it is a little bit fiddly; it takes some effort to make it run robust.


Aha, I'll look into MCU and see how that could be utilized also then. Thanks!


----------



## RaztoR

tpoots said:


> I've started on a little utility that parses Cubase expression maps to extract information about the articulation, keyswitch, and UACC info. It's in python but you might find it helpful:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Utility-Scripts-for-Composers/expression-map-parser.py at main · tpoots/Utility-Scripts-for-Composers
> 
> 
> Collection of useful scripts for composers. Contribute to tpoots/Utility-Scripts-for-Composers development by creating an account on GitHub.
> 
> 
> 
> 
> github.com
> 
> 
> 
> 
> 
> easiest way to run it is to just call it from the command line like:
> >python expression-map-parser.py {path-to-directory-containing-expression-maps} --csv
> 
> (note the "--csv" flag at the end). This will parse every expression map contained in the directory and dump a CSV with all the articulation, keyswitch, and UACC details for each expression map. I've been using it to design the UI for my OSC articulation controller, like you I have found it very useful to get a list of all the articulations possible in a given library without having to manually type them all out.
> 
> The script does other stuff too if you don't add the "--csv" flag but that is fairly specific to my OSC configuration and requires a few more variables to be set up. I posted a quick and dirty blurb about how that works here https://vi-control.net/community/th...nd-cubase-expression-maps.114281/post-4912751 and I may eventually get around to cleaning the code up a bit and properly "releasing" the OSC controller plus associated utility scripts at some point.


That's a very convenient tool, thank you for sharing. Although for some reason it does not actually work as intended when executed. No CSV file is created and the command line simply prints: ExpressionMapName, Articulation, Keyswitch, UACC

I had re-installed python from the Windows Store just before trying it out, could critical dependencies be missing? Although no errors were thrown mentioning any missing dependencies.
The commands I tried in sequence, using the command line tool in Administrator mode:
1. D:
2. cd <locationContainingThePythonScript>
3. python expression-map-parser.py {D:\Example\Directory\For\ExpressionMaps} --csv
Removing the brackets for the directory causes the script to throw an AttributeError at line 376, so I assume they're meant to be there. I'll dive into python some more later if need be to better understand the language's semantics.


----------



## blaggins

RaztoR said:


> 3. python expression-map-parser.py {D:\Example\Directory\For\ExpressionMaps} --csv[/ICODE]
> Removing the brackets for the directory causes the script to throw an AttributeError at line 376, so I assume they're meant to be there. I'll dive into python some more later if need be to better understand the language's semantics.


I should clarify, the brackets aren't needed (they are just there to indicate that you have to fill in the argument yourself). You do have to put the path in quotes though. For example this is the exact invocation I used on Windows:

python expression-map-parser.py "E:\Audio\Cubase Projects\Expression Maps\Spitfire Audio\Olafur Arnalds Chamber Evolutions"


----------



## RaztoR

tpoots said:


> I should clarify, the brackets aren't needed (they are just there to indicate that you have to fill in the argument yourself). You do have to put the path in quotes though. For example this is the exact invocation I used on Windows:
> 
> python expression-map-parser.py "E:\Audio\Cubase Projects\Expression Maps\Spitfire Audio\Olafur Arnalds Chamber Evolutions"


That's what I assumed to be the case at first. But when I tried that it also resulted in the following error:
 File "D:\locationContainingThePythonScript\expression-map-parser.py", line 376, in <module>
articulation = articulationElement.find(".//*[@name='description']").get('value').strip()
AttributeError: 'NoneType' object has no attribute 'get'

Seems to be related to a function call/assignment error. Any ideas? Faulty expression map description formatting on my end?


----------



## Sub3OneDay

Drjay said:


> If you are looking for a quick and stable solution, I suggest to use the one mentioned above with the transformer, this way it only works with midi tracks though. In order to use it with instrument tracks, you‘ll have to use a plugin in the FX chain and get the values via the generic remote.
> But there are other solutions as well, using e.g. the MCU protocol, or EUCON. Eucon is not feasible imo, since the protocol is not published. I am currently using MCU, but the solution it is a little bit fiddly; it takes some effort to make it run robust.



Yes agre e - very stable but as you say massive limitation is that it only works for midi tracks - simply because instrument temracks don’t have a midi send, only insert. It’s my number one on the list of things I wish cubase had!

You mention about a plug-in on the insert but I’m not aware of one? Are you?!


----------



## blaggins

RaztoR said:


> Seems to be related to a function call/assignment error. Any ideas? Faulty expression map description formatting on my end?


Your expression map is probably ok, it's likely my script doesn't account for all the possibilities of the way expression maps can be formatted since I've only tested it with the ones I use myself.

Do you want to send me an example of an expression map that isn't working? I can try it locally and see if I can figure out what's going on....


----------



## RaztoR

tpoots said:


> Your expression map is probably ok, it's likely my script doesn't account for all the possibilities of the way expression maps can be formatted since I've only tested it with the ones I use myself.
> 
> Do you want to send me an example of an expression map that isn't working? I can try it locally and see if I can figure out what's going on....


That's nice of you to do, thank you. I'll send it over PM in that case.


----------



## Drjay

Sub3OneDay said:


> Yes agre e - very stable but as you say massive limitation is that it only works for midi tracks - simply because instrument temracks don’t have a midi send, only insert. It’s my number one on the list of things I wish cubase had!
> 
> You mention about a plug-in on the insert but I’m not aware of one? Are you?!


The idea is to insert any plugin (does not matter which one) in the insert FX chain of the instrument, must be in the same slot for every instrument you want to control. Pick any number of vst Parameters (e.g. compressor treshhold, attack time). These n parameters and their values serve the same purpose as the callback values in the midi track transformer, so set them a value according to your scheme (e.g. attack 123 = VSL Oboe)
Assign them in a generic remote. Pseudocode for generic remote: selectedTrack->Insert1->ParameterN.
Mute the Plugin (can't remember, whether the generic remote still gets updated if you disable the plugin, just try it). Every time you click on a new instrument track, or change the parameter in the plugin the values are send out via the generic remote.
I created a small vst plugin for this purpose, which provides me with other track parameters, which is great, but only works with instrument, audio, fx etc. tracks. So this another dead end, since in Cubase cannot use custom midi plugins


----------



## Sub3OneDay

Drjay said:


> The idea is to insert any plugin (does not matter which one) in the insert FX chain of the instrument, must be in the same slot for every instrument you want to control. Pick any number of vst Parameters (e.g. compressor treshhold, attack time). These n parameters and their values serve the same purpose as the callback values in the midi track transformer, so set them a value according to your scheme (e.g. attack 123 = VSL Oboe)
> Assign them in a generic remote. Pseudocode for generic remote: selectedTrack->Insert1->ParameterN.
> Mute the Plugin (can't remember, whether the generic reote still gets updated if you disable the plugin, just try it). Every time you click on a new instrument track, or change the parameter in the plugin the values are send out via the generic remote.
> I created a small vst plugin for this purpose, which provides me with other track parameters, which is great, but only works with instrument, audio, fx etc. tracks. So this another dead end, since in Cubase cannot use custom midi plugins


This sounds really promising - are you saying that if you assign the plug-in parameter on each instrument track to say 116, and then for tracks 1-50(say) you put 116-1, 116-2 etc, when selected the track, the generic remktw will fire out 116-1, or 116-2 etc. 

I suppose one way that cc value hits OSC it doesn’t need to distinguish between instrument and midis track?…


----------



## Drjay

Sub3OneDay said:


> This sounds really promising - are you saying that if you assign the plug-in parameter on each instrument track to say 116, and then for tracks 1-50(say) you put 116-1, 116-2 etc, when selected the track, the generic remktw will fire out 116-1, or 116-2 etc.
> 
> I suppose one way that cc value hits OSC it doesn’t need to distinguish between instrument and midis track?…


Yes, it doesn‘t need to distinguish (if you don‘t want to). But since you can use as many virtual midi ports as you like, you could do all kinds of routings.


----------



## Sub3OneDay

Drjay said:


> Yes, it doesn‘t need to distinguish (if you don‘t want to). But since you can use as many virtual midi ports as you like, you could do all kinds of routings.


So I've tested this - with limited success.

It works as described above with some modification of my custom module, but the difficulty that I have is that I have already implemented over 1000 midi tracks that use the challenge and response version that works as follows:

Select Track > Cubase Sends cc127 - OSC reads 127 and sends back cc126 - Cubase Transformer on track midi send coverts the cc126 to a specific CCxxx Val xx to define identify track and OSC variable in the custom module.

If I implement the plugin version on instrument tracks as suggested by @Drjay above I get two triggered cc values into OSC every track selection which can't be distinguished between an instrument track, or a midi track.

It's seems it's an "either or" on these solutions and since I have spent hours building the template on the challenge response version I'm reluctant to move away from it.

What I really need is a plug-in that can sit in the insert of the instrument track and work like the transformer on a midi-send, passing through the midi data that is used to play the instrument track and just filtering out the midi message that triggers it to send the identifying cc value.


----------



## Drjay

Please have a look at my other post. 
As always there are many solutions. Not sure, I fully understood the mechanism you are using, but I would not use the insert fx to get the track selected message. I would use the fx to get the instrument of the track. If you put your code to update the OSC gui in a subroutine, you can implement a different logic to evaluate the feedback from instrument and midi tracks and then call the subroutine. Additionally try a different ‚selected track‘ command in the generic remote. There must be three, midi mixer-> selected, VST Mixer -> selected and Mixer -> selected. 1st one only reacts on midi tracks, 2nd to all, 3rd to audio and midi, as far as I remember.


----------



## Sub3OneDay

So I was/am using the Mihkel Zilmer method on my midi tracks. 
And I understand the method you have outlined in your other post - I have set that up to work on my instrument tracks - using almost the same settings as you have to ensure I get it exactly right.

The difficulty I have having is I can't get the last bit as you describe to work - that being:


Drjay said:


> Please have a look at my other post.
> Additionally try a different ‚selected track‘ command in the generic remote. There must be three, midi mixer-> selected, VST Mixer -> selected and Mixer -> selected. 1st one only reacts on midi tracks, 2nd to all, 3rd to audio and midi, as far as I remember.


No matter what I set each mixer to in each generic remote, they always both fire so I end up with 2 midi messages appearing into OSC and because they both arrive each time with various data, it is difficult, if not impossible to use any logic code to chose which routine to run.


----------



## Drjay

Hard to tell  Stupid question: Did you check the value? If you change from a midi track to an instrument track, the instrument cmd sends value 127 and the midi cmd value zero.


----------



## RaztoR

A vision that I have is to create a free and open solution for dynamic articulation and DAW management that can enhance the productivity of composers without being restricted to just one particular DAW. Several individuals on VI-Control have developed some handy scripts to automate tedious tasks such as converting maps between Cubase, Reaper and Studio one. What if some of us got together to develop a GUI-enabled/user-friendly toolkit that can:

1. Handle batch conversions for articulations between a few DAWs such as DP, S1, Reaper and Cubase.
2. Generate articulation maps that are relatively DAW agnostic, presuming the first feature is implemented.
3. Generate Open Stage Control script(s) responsible for populating the screen with named articulation panels based on some key attributes, such as: articulation type (long, short, effect/deco, custom).
4. Generate OSC script(s) to fill the articulation panels with buttons/matrix switches which in turn control articulations using program change, key switches or CC messages.

Alternatively a multi-dimensional array for complex articulations sets that are split between extra attributes such as mutes. i.e.
List 1: "Sordino Staccato, Sordino Marcato [...]"
List 2: "Staccato, Marcato [...]"

5. Track visibility, instrument tag and search features?

After more than a week of investigation, research and experimenting I've made remarkable progress towards implementing a solution for messaging OSC when a track is selected inside Cubase without the need of any track inserts. I reverse-engineered key SysEx messages used by the WK-Audio ID remote device inside of Cubase, which seemed to be the only SysEx-based remote controller in Cubase that will send a message that contains the track name of the track you've selected. I made a functional implementation of converting the SysEX data to a readable format using Max MSP. This data can then be interpreted by OSC as a command that can, for example, update the GUI to display the articulations for the track you've selected; presuming you have programmed a script for that inside of OSC. Keep in mind that the SysEx data from Cubase only sends a few string letters, less than 7 if I recall correctly. This means that this method will only work if you prefix your track names by using, for example a number system in sequence: "0001 <name>" for track #1, "0002 <name>" for #2 and so on.

I've also been programming a custom solution using @tpoots's Python scripts to tag expression maps based on attributes such as instrument family, sample developer and whether or not it uses Opus or Kontakt. Unfortunately this is not a universal solution since it is tailored to the specific naming conventions I've used for my maps.

The next step I was in the middle of implementing was a method to automatically sort the instruments parsed to the JSON file generated by the python script, based on the Cubase template layout that I use. However, after some thinking I decided to investigate the EuCon SDK. Since the Avid Control app is able to automatically display all the tracks inside of Cubase in the right order and color without any extra user-input, I want to see if I am able to use the EuCon protocol to implement a similar feature for OSC.

With these things in mind. If there is anyone here that is willing to collaborate in developing a foundation for a solution that can be maintained and updated by the community, send me a message. While there are paid alternatives out there that solves many of the problems I want to deal with, I would like to make an effort in developing a free and open solution that can be further improved upon over time. Wishful thinking as it may be, I am willing to give it a try.


----------



## Drjay

Due to the length restriction I stopped using WK-Audio ID sysex and moved to MCU, which works perfectly fine on my side. The problem I see with the MCU solution is robustness. It involves parsing the screen sysex for specific strings and if by chance something is messed up, the whole mechanism goes nuts. WK-Audio should be more robust, since it uses a more or less dedicated message.
EUCON would probably the best soluton. But how did you get hold of the SDK? I searched up and down the internet and could not get hold of it, let alone a documentation. Reverse engineering with Wireshark is possible but tedious. Additionally I imagine one would run into legal problems with EUCON, since they would probably ask you to sign an NDA. But that is just a guess I never bothered with it.
I like your idea of a standard expression/artucalation meta format in JSON. If one could agree at least on a set of standard tags, we could share these maps and get rid of the donkey work since everyone could contribute their maps. Everyone could convert them to a specific format afterwards to their liking.
Agreeing on this standard will probably be very tedious. I have changed my internal JSON format a couple of times myself


----------



## RaztoR

Drjay said:


> EUCON would probably the best soluton. But how did you get hold of the SDK? I searched up and down the internet and could not get hold of it, let alone a documentation. Reverse engineering with Wireshark is possible but tedious. Additionally I imagine one would run into legal problems with EUCON, since they would probably ask you to sign an NDA. But that is just a guess I never bothered with it.


You can apply for an evaluation license directly from Avid: https://developer.avid.com/
Scroll down to the "Transport SDK" section and you will find EuCon there. A few button presses, a license agreement and you will be able to download an evaluation toolkit. It's all C++ as far as I've observed thus far. Although I am not sure if it contains all the relevant classes and libraries to create a functional test environment.


Drjay said:


> I like your idea of a standard expression/artucalation meta format in JSON. If one could agree at least on a set of standard tags, we could share these maps and get rid of the donkey work since everyone could contribute their maps. Everyone could convert them to a specific format afterwards to their liking.
> Agreeing on this standard will probably be very tedious. I have changed my internal JSON format a couple of times myself


It will certainly easier said than done to agree on a particular standard, but I believe it is worth exploring the idea in order to see what we can come up with. That aside, I appreciate the feedback


----------



## Drjay

RaztoR said:


> You can apply for an evaluation license directly from Avid: https://developer.avid.com/
> Scroll down to the "Transport SDK" section and you will find EuCon there. A few button presses, a license agreement and you will be able to download an evaluation toolkit. It's all C++ as far as I've observed thus far. Although I am not sure if it contains all the relevant classes and libraries to create a functional test environment.
> 
> It will certainly easier said than done to agree on a particular standard, but I believe it is worth exploring the idea in order to see what we can come up with. That aside, I appreciate the feedback


Ah, thanks! A typical case of not seeing the woods for the trees 
Hopefully I can refrain from downloading the SDK in the upcoming weeks, since I know what is gonna happen…


----------



## RaztoR

Drjay said:


> Ah, thanks! A typical case of not seeing the woods for the trees
> Hopefully I can refrain from downloading the SDK in the upcoming weeks, since I know what is gonna happen…


Hah! Delaying the inevitable, are we? Unless you have other priorities in mind, why not? _It's waiting to be explored_

On a more serious note, you're welcome. I'll refresh my mind on the C++ language and will likely investigate the toolkit thoroughly afterwards. We'll see what my findings are


----------



## blaggins

RaztoR said:


> A vision that I have is to create a free and open solution for dynamic articulation and DAW management that can enhance the productivity of composers without being restricted to just one particular DAW...


That is a sweeping and bold proposal! I don't have a lot of time in the near term but I would certainly participate in an open source project like that. I write code for a living and it might be fun to combine my professional interests with my musical ones.


----------



## Drjay

My question is, whether the idea is to have a meta format and convert this to the different daw ‚expression formats‘. Or to write some kind of proxy which for example converts whatever midi you throw at it to key switches, ctrl etc.


----------



## RaztoR

tpoots said:


> That is a sweeping and bold proposal! I don't have a lot of time in the near term but I would certainly participate in an open source project like that. I write code for a living and it might be fun to combine my professional interests with my musical ones.


I am happy to see some shared enthusiasm for the idea and would more than welcome any assistance that can be provided! There's no rush. It will certainly be easier said than done and will very likely require an initial target objective that is feasible to achieve. From there one can expand the scope of the project's features when suitable. For example, I know that there have been solutions for converting maps between Reaper, Cubase and Studio One. On the surface, these implementations do not seem to have immense complexity required for them.

Because of this, I thought the main relevant DAWs (for starters) to solve for would be those three, and possibly Logic. I haven't looked at any of the public solutions for Logic so I won't comment on those, but I'm aware that they exist. I would love to extend and include features for FL Studio and Blake Robinson's BRSO articulate plugin, but doubt that would be a feasible task to aim for anytime soon.



Drjay said:


> My question is, whether the idea is to have a meta format and convert this to the different daw ‚expression formats‘. Or to write some kind of proxy which for example converts whatever midi you throw at it to key switches, ctrl etc.


A very valid and important question. I can see some benefits and drawbacks for both ideas from an implementation and usage standpoint. My initial idea was to have a meta format similar to what you described. Furthermore, the format could include extra tags that are mostly relevant for filtering instruments inside of OSC when desired. The tags could also be used to create and manage custom track visibility presets. I.e. The user could look up all "Woodwind"-tagged patches inside of their DAW and OSC template, or add custom tags to instruments in batches for similar purposes. An instrument's metadata should be able to contain several tags for convenience.

That aside, another idea would be to discuss and visualize drafts for a prototype using flowcharts or modeling languages like _Unified Modeling Language_ (UML), D_ata-Flow Diagram _(DFD), _Entity-Relationship Diagram_ (ERD) or similar. From there, one can get a top-down view and identify potential issues, strengths or design flaws that might be missed before the development started. One could also create a survey to investigate what features individuals would like to see within specified limits.



Spoiler: Dream scenario



A wishful, naïve idea would be to collaborate with multiple DAW developers and get them on board for a unified solution. But I very much doubt that would happen for a myriad of reasons, such as conflict of interest and lack of tangible data to prove an economical benefit.


----------



## jononotbono

And this is always the first problem. A bunch of super intelligent coders get together and decide on a standard that professionals don't use and then wonder why you fucking failed! 😂

Sorry. I felt swearing would get your attention.


----------



## RaztoR

jononotbono said:


> And this is always the first problem. A bunch of super intelligent coders get together and decide on a standard that professionals don't use and then wonder why you fucking failed! 😂
> 
> Sorry. I felt swearing would get your attention.
> 
> [...]
> I realise that some people would probably find my last comment a little abrasive. Despite it being the truth. I'm not going to apologise. No one should apologise for being honest 😂


That made me chuckle, there is nothing to apologize for. I like what you've been doing with your solution in tandem with Clelson Lopes; can only imagine the amount of time and effort that has taken to get the project to where it is right now.

You're right that it can be rather atypical for a bunch of programmers get together without the knowledge, experience or wisdom to design a product for their intended market, but that is hardly the case here is it? The target group are not exclusively professionals, what made you think that? Not to mention that the straw-manning demonstrated does little to contribute to a healthy, tangible discussion.


jononotbono said:


> I realise that some people would probably find my last comment a little abrasive. Despite it being the truth. I'm not going to apologise. No one should apologise for being honest 😂
> 
> Standardisation...
> 
> Such a great idea. Honestly, I dream of that. Here's the question...
> 
> HOW ARE YOU GOING TO DO THAT?
> 
> Every library. Every articulation. ????????
> 
> And something you aren't thinking about. Not a single person above has even thought about (or at least commented) consistency...
> 
> [...]
> 
> x


You raise very valid and important points, especially the consistency. However, most of what you've written seem to based on a gross misunderstanding of the intended scope and ambition of the project. The goal I had in mind is not to make a universal solution for every DAW or user in existence at v1. Essentially, I observed a problem of mine and extrapolated that there are likely to be others that may want to contribute to a solution that can be maintained or updated over time. This in turn might (hopefully) lead to an improved solution that works in other edge cases as well. How and to what extent that solution deals with said problem remains to be seen - nothing has been determined.

The key is to start small: What are some common articulations? Pizzicato, Staccato, Col Legno, Legato, Sustain? One idea could be to identify a core list, then design a layout and a (somewhat/fully) automated system that maps those articulations to an interface, make a few scripts to abstract away other common tasks such as map conversions; use a shared web platform and allow users to upload their own maps to a common database with a few strict rules when it comes to naming conventions. That way the database can eventually end up having a large set of expression maps that can be shared and modified at leisure. Individuals may also want to share track templates or presets for a set of instruments in conjunction with compatible maps. With some work, one might be able to create a setup wizard that handles basic template creations by, for example, having modular track templates a lá @storyteller's OTR. There are plenty of ideas that comes to mind.

This is far from being a fully thought-out solution, but it will at the very least give you a few ideas about how this problem can be approached. I might be wrong, but it seems to me that you've made many inaccurate presumptions about the ideas that thus far have been shared; at the very least the ideas I've had in mind. Most of the scenarios and remarks you've written are completely irrelevant, I'd agree otherwise that the entire concept would have to be reconsidered altogether.

So with that in mind, allow me to clarify a few things in case they have been misunderstood:

1. There's no one-size-fit-all solution, nor do I believe that any of us here are deluding ourselves believing that we can make a jacket that suits everyone "on the planet". Like you yourself stated, we all have our different wants and needs - but that doesn't prevent us from asking questions, to investigate whether or not we can find a solution for common (enough) problems. Sure, if we want to become tailors for professionals, we can copy what they do based on what they believe to be right for the job. If you applied the same principle not too long ago, we would have been stuck transcribing score sheets and not do any sort of programming work. Just because someone is a professional does not make them an immediate authority for innovation, creativity or problem solving - nor does it mean that they are omniscient individuals that knows the exact limits and needs for themselves or others. Still, there are plenty of things that can be gained from exploring tailored solutions and making use of the experiences of said professionals, no doubts about that.

2. To further add to this. Sometimes an idea has to be presented before someone realizes that something was missing all along, or that it is something that they want to be realized - Apple iPhone 2007? Neural-Network based sampling and synthesis for physical modeling of acoustic instruments? Dynamically generated game stories and branching story-paths based on future innovations related to deep learning? I could tell you all about some very exciting things that is going on in that area, but I digress.

3. Most composers/producers don't deal with maps because the work they do (EDM for example) has no trend or need for it. This in turn makes articulation management less likely to be a worthwhile priority for DAW developers, because it does little to cater to their main clients. The users that do use articulations and key switches are stuck with implementations that do not scale well or lack features for batch editing, OSC messaging and similar. Again, you do not have to be a professional to make this observation, nor realize that there might be a way to work around the limits and simultaneously help others with automated processes. Ever used a good editor? It might not be a big red button that does everything for the user, but can save them an immense amount of time none the less.

4. There are plenty of commercialized tools out there that do what I have in mind, but not in its entirety. And if there is a such solution in existence, they remain proprietary, commercialized and thus unlikely to be meaningful for hobbyists, students or small-time composers out there which in turn will unlikely lead to any meaningful progress within the niché market that articulation-based users find themselves in. The solution that we create might end up becoming widely adopted - or not. I want to first and foremost solve the problems that I have, and I believe that these problems encompasses more than just my own wants and needs. This lead me to question whether or not many of the obstacles I have can be abstracted away to a great extent, saving myself and possibly others a lot of time while also giving me something meaningful to spend time on and grow as a developer. What that solution ends up looking like and what problems it actually ends up solving remains to be seen.


5. It's also amusing, and a bit curious to observe the assumption that none of us here are professionals that are are dealing with so-called solutions to non-existent problems. To be fair, I may no longer be an Audio Lead at a game studio, nor have I attended any of the private AAA game audio and composer gatherings at a certain company for a while. But I still know people that would love what I have in mind. I believe I understand what you're trying to say here. Which is, to not needlessly reinvent a wheel that no one would like to use. Am I understanding the intended message correctly? If true, That is fair and understandable, although I think it would be better if you at least know the individuals you interact with and know for certain what they have in mind before you give said advice.

While I appreciate that you're taking the time to respond with what I hopefully believe to be well-intended attempts at raising valid criticism, how about we first ask questions and seek understanding before jumping the gun? It makes things a lot easier to focus on problem-solving, look for a common goal to strive for. Even seemingly insane ideas may have useful concepts that can be borrowed.

You're more than welcome to add your input as I encourage constructive criticism. And I'd happily have you on board if you're willing and believe that we can come up with a workable solution. I am not expecting an utopian solution, but I believe there's plenty of room for feasible improvement.

Thank you for your time


----------



## Sub3OneDay

I really like where this is going and I admire the passion you clearly have to develop something universal.

I think the difficulty lies in the fact that we each have our own workflow and one of the benefits of OSC for example is that we can design an interface that compliments that.

And we each have our own problems to solve…
I have wrestled with articulation maps in OSC for a while (like a year or so), and I have had a functioning OSC panel which populates articulations reliably when MIDI tracks are selected. But the limitations of my method are that it won't work on instrument tracks.

I have spent the last week or so trying various solutions that are on this thread that use a plug in on the instrument track - with varying degrees of success, but again I see limitations with this on very large (1000+ track) templates.

The final challenge I have been looking at is around using a combination of methods
- Challenge and response on the MIDI tracks
- Plugin values on the instrument tracks

I have been using my limited JS knowledge to try to use my custom module to determine which track has been selected but this has proved unreliable as I have discovered that my DAW (cubase), whilst excellent on other areas, is not totally reliable in how it responds when the generic remote is set up.

Equally, the messages that are retuned to OSC and the through my custom module cannot be interpreted with enough detail (at least with my skills) to distinguish between instrument and midi track.

I have had to admit defeat on this for the moment.

The only solution that I can see to reliably solve this is to create a plugin that sits in the instrument insert and mimics or creates a midi send. This is beyond my current coding skills.

Unless of course Steinberg do the right thing and put midi sends on instrument tracks. 

I would be more than happy however to support the initiatives above and have over the years created all sorts of spreadsheets and tools to manipulate expression maps and generic remote xml - they all make my workflow easier - the only problem is they are also a tool to aid procrastination when what I should be doing is writing music!


----------



## Drjay

Sub3OneDay said:


> Equally, the messages that are retuned to OSC and the through my custom module cannot be interpreted with enough detail (at least with my skills) to distinguish between instrument and midi track.


Well, you can distinguish them see my post here



Sub3OneDay said:


> I have been using my limited JS knowledge to try to use my custom module to determine which track has been selected but this has proved unreliable as I have discovered that my DAW (cubase), whilst excellent on other areas, is not totally reliable in how it responds when the generic remote is set up.


Are you sure the generic remote ist unreliable? I confess, I was pulling my hair out several times when dealing with the generic remote, but in the end it it was working as expected (I admit I never tried it with 1000+ tracks). Imo it's more about inconsistencies, abandoned parameters and strange design decissions from Steinberg. Best example is track numbering. You definitely can get track numbers from the generic remote (and select tracks from remote), but in order to do so properly, you have to write some ugly code on the receiver side to keep track of certain things.
As far as I can see, the send order of the generated midi messages is consistent (top to bottom), even nrpn messages are send in a consistent order, which makes parsing easier.
In some cases the usage of callback functions ('events'), status variables and timers/intervals in js helps to aggregate all the different midi messages together. Of course the usage of timers waiting for a certain event is bad programming in the sense of being totally unreliable and not robust and should be avoided. But used in conjunction with status variables you can do a lot.
But in general the generic remote ist really powerful (e.g. to change the generic remote via the generic remote itself, which I think is quite clever)


----------



## Drjay

RaztoR said:


> That made me chuckle, there is nothing to apologize for. I like what you've been doing with your solution in tandem with Clelson Lopes; can only imagine the amount of time and effort that has taken to get the project to where it is right now.
> 
> You're right that it can be rather atypical for a bunch of programmers get together without the knowledge, experience or wisdom to design a product for their intended market, but that is hardly the case here is it? The target group are not exclusively professionals, what made you think that? Not to mention that the straw-manning demonstrated does little to contribute to a healthy, tangible discussion.
> 
> You raise very valid and important points, especially the consistency. However, most of what you've written seem to based on a gross misunderstanding of the intended scope and ambition of the project. The goal I had in mind is not to make a universal solution for every DAW or user in existence at v1. Essentially, I observed a problem of mine and extrapolated that there are likely to be others that may want to contribute to a solution that can be maintained or updated over time. This in turn might (hopefully) lead to an improved solution that works in other edge cases as well. How and to what extent that solution deals with said problem remains to be seen - nothing has been determined.
> 
> The key is to start small: What are some common articulations? Pizzicato, Staccato, Col Legno, Legato, Sustain? One idea could be to identify a core list, then design a layout and a (somewhat/fully) automated system that maps those articulations to an interface, make a few scripts to abstract away other common tasks such as map conversions; use a shared web platform and allow users to upload their own maps to a common database with a few strict rules when it comes to naming conventions. That way the database can eventually end up having a large set of expression maps that can be shared and modified at leisure. Individuals may also want to share track templates or presets for a set of instruments in conjunction with compatible maps. With some work, one might be able to create a setup wizard that handles basic template creations by, for example, having modular track templates a lá @storyteller's OTR. There are plenty of ideas that comes to mind.
> 
> This is far from being a fully thought-out solution, but it will at the very least give you a few ideas about how this problem can be approached. I might be wrong, but it seems to me that you've made many inaccurate presumptions about the ideas that thus far have been shared; at the very least the ideas I've had in mind. Most of the scenarios and remarks you've written are completely irrelevant, I'd agree otherwise that the entire concept would have to be reconsidered altogether.
> 
> So with that in mind, allow me to clarify a few things in case they have been misunderstood:
> 
> 1. There's no one-size-fit-all solution, nor do I believe that any of us here are deluding ourselves believing that we can make a jacket that suits everyone "on the planet". Like you yourself stated, we all have our different wants and needs - but that doesn't prevent us from asking questions, to investigate whether or not we can find a solution for common (enough) problems. Sure, if we want to become tailors for professionals, we can copy what they do based on what they believe to be right for the job. If you applied the same principle not too long ago, we would have been stuck transcribing score sheets and not do any sort of programming work. Just because someone is a professional does not make them an immediate authority for innovation, creativity or problem solving - nor does it mean that they are omniscient individuals that knows the exact limits and needs for themselves or others. Still, there are plenty of things that can be gained from exploring tailored solutions and making use of the experiences of said professionals, no doubts about that.
> 
> 2. To further add to this. Sometimes an idea has to be presented before someone realizes that something was missing all along, or that it is something that they want to be realized - Apple iPhone 2007? Neural-Network based sampling and synthesis for physical modeling of acoustic instruments? Dynamically generated game stories and branching story-paths based on future innovations related to deep learning? I could tell you all about some very exciting things that is going on in that area, but I digress.
> 
> 3. Most composers/producers don't deal with maps because the work they do (EDM for example) has no trend or need for it. This in turn makes articulation management less likely to be a worthwhile priority for DAW developers, because it does little to cater to their main clients. The users that do use articulations and key switches are stuck with implementations that do not scale well or lack features for batch editing, OSC messaging and similar. Again, you do not have to be a professional to make this observation, nor realize that there might be a way to work around the limits and simultaneously help others with automated processes. Ever used a good editor? It might not be a big red button that does everything for the user, but can save them an immense amount of time none the less.
> 
> 4. There are plenty of commercialized tools out there that do what I have in mind, but not in its entirety. And if there is a such solution in existence, they remain proprietary, commercialized and thus unlikely to be meaningful for hobbyists, students or small-time composers out there which in turn will unlikely lead to any meaningful progress within the niché market that articulation-based users find themselves in. The solution that we create might end up becoming widely adopted - or not. I want to first and foremost solve the problems that I have, and I believe that these problems encompasses more than just my own wants and needs. This lead me to question whether or not many of the obstacles I have can be abstracted away to a great extent, saving myself and possibly others a lot of time while also giving me something meaningful to spend time on and grow as a developer. What that solution ends up looking like and what problems it actually ends up solving remains to be seen.
> 
> 
> 5. It's also amusing, and a bit curious to observe the assumption that none of us here are professionals that are are dealing with so-called solutions to non-existent problems. To be fair, I may no longer be an Audio Lead at a game studio, nor have I attended any of the private AAA game audio and composer gatherings at a certain company for a while. But I still know people that would love what I have in mind. I believe I understand what you're trying to say here. Which is, to not needlessly reinvent a wheel that no one would like to use. Am I understanding the intended message correctly? If true, That is fair and understandable, although I think it would be better if you at least know the individuals you interact with and know for certain what they have in mind before you give said advice.
> 
> While I appreciate that you're taking the time to respond with what I hopefully believe to be well-intended attempts at raising valid criticism, how about we first ask questions and seek understanding before jumping the gun? It makes things a lot easier to focus on problem-solving, look for a common goal to strive for. Even seemingly insane ideas may have useful concepts that can be borrowed.
> 
> You're more than welcome to add your input as I encourage constructive criticism. And I'd happily have you on board if you're willing and believe that we can come up with a workable solution. I am not expecting an utopian solution, but I believe there's plenty of room for feasible improvement.
> 
> Thank you for your time


I treated jononotbono's post as british humor. But it seems parts of his or maybe other posts had been deleted, while Europe was asleep.

Kudos, I really appreciate you post. You spend some time and effort to present some common problems in the customer<->IT relationship and IT in general (thinking about the new buzz word 'agnostic' atm  ) based on this simple example.

The goal should not be to create a jack of all trades program. A simple JSON file with all key switches, articulation labels, artic. colors, artic. groups, library and instrument names etc. would be sufficient for a start. Basicly some kind of flat file database. Additionally one or two converters to Cubase, Logic etc. Thats it. One could easily add custom tags to this data structure to do custom things, without breaking the rest.
I would not even agree on a common set of standard articulations. One could introduce a group tag or an 'alias tag' for every articulation which could be used instead of the articulation label. Worse come worse one could stick to the spitfire UACC scheme (although it does not fit very well even in the Spitfire universe itself)

I mean, how many of us spend lots of time to key in the names of articulations and assigning midi commands over and over. If we would collect this information in a repository in a standard format we could save time and money.


----------



## jononotbono

RaztoR said:


> That made me chuckle, there is nothing to apologize for. I like what you've been doing with your solution in tandem with Clelson Lopes; can only imagine the amount of time and effort that has taken to get the project to where it is right now.
> 
> You're right that it can be rather atypical for a bunch of programmers get together without the knowledge, experience or wisdom to design a product for their intended market, but that is hardly the case here is it? The target group are not exclusively professionals, what made you think that? Not to mention that the straw-manning demonstrated does little to contribute to a healthy, tangible discussion.
> 
> You raise very valid and important points, especially the consistency. However, most of what you've written seem to based on a gross misunderstanding of the intended scope and ambition of the project. The goal I had in mind is not to make a universal solution for every DAW or user in existence at v1. Essentially, I observed a problem of mine and extrapolated that there are likely to be others that may want to contribute to a solution that can be maintained or updated over time. This in turn might (hopefully) lead to an improved solution that works in other edge cases as well. How and to what extent that solution deals with said problem remains to be seen - nothing has been determined.
> 
> The key is to start small: What are some common articulations? Pizzicato, Staccato, Col Legno, Legato, Sustain? One idea could be to identify a core list, then design a layout and a (somewhat/fully) automated system that maps those articulations to an interface, make a few scripts to abstract away other common tasks such as map conversions; use a shared web platform and allow users to upload their own maps to a common database with a few strict rules when it comes to naming conventions. That way the database can eventually end up having a large set of expression maps that can be shared and modified at leisure. Individuals may also want to share track templates or presets for a set of instruments in conjunction with compatible maps. With some work, one might be able to create a setup wizard that handles basic template creations by, for example, having modular track templates a lá @storyteller's OTR. There are plenty of ideas that comes to mind.
> 
> This is far from being a fully thought-out solution, but it will at the very least give you a few ideas about how this problem can be approached. I might be wrong, but it seems to me that you've made many inaccurate presumptions about the ideas that thus far have been shared; at the very least the ideas I've had in mind. Most of the scenarios and remarks you've written are completely irrelevant, I'd agree otherwise that the entire concept would have to be reconsidered altogether.
> 
> So with that in mind, allow me to clarify a few things in case they have been misunderstood:
> 
> 1. There's no one-size-fit-all solution, nor do I believe that any of us here are deluding ourselves believing that we can make a jacket that suits everyone "on the planet". Like you yourself stated, we all have our different wants and needs - but that doesn't prevent us from asking questions, to investigate whether or not we can find a solution for common (enough) problems. Sure, if we want to become tailors for professionals, we can copy what they do based on what they believe to be right for the job. If you applied the same principle not too long ago, we would have been stuck transcribing score sheets and not do any sort of programming work. Just because someone is a professional does not make them an immediate authority for innovation, creativity or problem solving - nor does it mean that they are omniscient individuals that knows the exact limits and needs for themselves or others. Still, there are plenty of things that can be gained from exploring tailored solutions and making use of the experiences of said professionals, no doubts about that.
> 
> 2. To further add to this. Sometimes an idea has to be presented before someone realizes that something was missing all along, or that it is something that they want to be realized - Apple iPhone 2007? Neural-Network based sampling and synthesis for physical modeling of acoustic instruments? Dynamically generated game stories and branching story-paths based on future innovations related to deep learning? I could tell you all about some very exciting things that is going on in that area, but I digress.
> 
> 3. Most composers/producers don't deal with maps because the work they do (EDM for example) has no trend or need for it. This in turn makes articulation management less likely to be a worthwhile priority for DAW developers, because it does little to cater to their main clients. The users that do use articulations and key switches are stuck with implementations that do not scale well or lack features for batch editing, OSC messaging and similar. Again, you do not have to be a professional to make this observation, nor realize that there might be a way to work around the limits and simultaneously help others with automated processes. Ever used a good editor? It might not be a big red button that does everything for the user, but can save them an immense amount of time none the less.
> 
> 4. There are plenty of commercialized tools out there that do what I have in mind, but not in its entirety. And if there is a such solution in existence, they remain proprietary, commercialized and thus unlikely to be meaningful for hobbyists, students or small-time composers out there which in turn will unlikely lead to any meaningful progress within the niché market that articulation-based users find themselves in. The solution that we create might end up becoming widely adopted - or not. I want to first and foremost solve the problems that I have, and I believe that these problems encompasses more than just my own wants and needs. This lead me to question whether or not many of the obstacles I have can be abstracted away to a great extent, saving myself and possibly others a lot of time while also giving me something meaningful to spend time on and grow as a developer. What that solution ends up looking like and what problems it actually ends up solving remains to be seen.
> 
> 
> 5. It's also amusing, and a bit curious to observe the assumption that none of us here are professionals that are are dealing with so-called solutions to non-existent problems. To be fair, I may no longer be an Audio Lead at a game studio, nor have I attended any of the private AAA game audio and composer gatherings at a certain company for a while. But I still know people that would love what I have in mind. I believe I understand what you're trying to say here. Which is, to not needlessly reinvent a wheel that no one would like to use. Am I understanding the intended message correctly? If true, That is fair and understandable, although I think it would be better if you at least know the individuals you interact with and know for certain what they have in mind before you give said advice.
> 
> While I appreciate that you're taking the time to respond with what I hopefully believe to be well-intended attempts at raising valid criticism, how about we first ask questions and seek understanding before jumping the gun? It makes things a lot easier to focus on problem-solving, look for a common goal to strive for. Even seemingly insane ideas may have useful concepts that can be borrowed.
> 
> You're more than welcome to add your input as I encourage constructive criticism. And I'd happily have you on board if you're willing and believe that we can come up with a workable solution. I am not expecting an utopian solution, but I believe there's plenty of room for feasible improvement.
> 
> Thank you for your time


All good man. I was just attempting to be humorous but I am looking forward to seeing what you come up with.


----------



## Ibofobi

Sub3OneDay said:


> The only solution that I can see to reliably solve this is to create a plugin that sits in the instrument insert and mimics or creates a midi send. This is beyond my current coding skills.


I tried this the other day but could not make it work. I got an error (from the underlying Windows library) when trying to open a MIDI port from within the plugin. Still, the same code run just fine from a standalone executable whilst Cubase was running. Perhaps this is a limitation imposed by Cubase, but I don't know.


----------



## RaztoR

Update: After investigating the EuCon evaluation SDK I have noticed that it does not contain all the header files required to compile a functional test environment straight out-of-the-box if I keep it simple. I am not sure if said header files are mandatory or if we can work around them to access all the required EuCon features for our solution. If someone more knowledgeable is willing to take a look at the SDK that would be great.

There's an individual over at the Reaper forums that I am considering getting in touch with. They've been working on an EuCon solution for Reaper specifically.



jononotbono said:


> All good man. I was just attempting to be humorous but I am looking forward to seeing what you come up with.





> Spoiler: Citation
> 
> 
> 
> [...]
> I realise that some people would probably find my last comment a little abrasive. Despite it being the truth. I'm not going to apologise. No one should apologise for being honest 😂
> 
> 
> Standardisation...
> 
> 
> Such a great idea. Honestly, I dream of that. Here's the question...
> 
> 
> HOW ARE YOU GOING TO DO THAT?
> 
> 
> Every library. Every articulation. ????????
> 
> 
> And something you aren't thinking about. Not a single person above has even thought about (or at least commented) consistency...
> 
> 
> CONSISTENCY
> 
> 
> You can't have every articulation appearing on any button. There needs to be consistency.
> 
> For example, Legato needs to appear on the same button/widget/whateveryoureprogramming in that EXACT location EVERY time. Now do that with EVERY articulation of every library in existence! It's impossible! (For the general public)! This is EXACTLY where you realise you can be hired by professionals to give them what they need. Or just waste your time and make a system for everyone, that no pro will ever use (because they already have a system they use), but fans of your YouTube channel or whatever forum you frequent.
> 
> 
> Would love a one stop shop for this but I don't think it's possible. Keep me in the loop haha
> 
> 
> Trying to make something for every person on the planet? Man, I love the sound that. Do me a favour and tell me how you're gonna do that?! I'll help if I can.
> 
> 
> Looking forward to seeing what you come up with!
> 
> 
> Something that might be important to add here...
> 
> 
> Most people going on about "Articulation systems", "Expression Map Systems" have never even tried expression maps or even tried writing music like this.
> 
> 
> Have a think about why you're bothering to do this? Copy professionals. They know a lot more than clever coders with great SOLOUTIONS to PROBLEMS THAT DON'T EXIST
> 
> 
> x


That makes sense, thank you for the clarification. Confusion will understandably happen given the nature of text-based communication due to the lack of vocal-intonation, body-language among other things. I digress.

-- I mean,_ what do you mean we can't make the perfect solution for everybody? If it can't brew me tea then I don't want it._

[A few weeks later]:




/j



Drjay said:


> I treated jononotbono's post as british humor. But it seems parts of his or maybe other posts had been deleted, while Europe was asleep.
> 
> Kudos, I really appreciate you post. You spend some time and effort to present some common problems in the customer<->IT relationship and IT in general (thinking about the new buzz word 'agnostic' atm  ) based on this simple example.
> 
> [...]


I appreciate the feedback, it is great see a similar enthusiasm and understanding about the idea.


Drjay said:


> [...]
> The goal should not be to create a jack of all trades program. A simple JSON file with all key switches, articulation labels, artic. colors, artic. groups, library and instrument names etc. would be sufficient for a start. Basicly some kind of flat file database. Additionally one or two converters to Cubase, Logic etc. Thats it. One could easily add custom tags to this data structure to do custom things, without breaking the rest.
> I would not even agree on a common set of standard articulations. One could introduce a group tag or an 'alias tag' for every articulation which could be used instead of the articulation label. Worse come worse one could stick to the spitfire UACC scheme (although it does not fit very well even in the Spitfire universe itself)
> 
> I mean, how many of us spend lots of time to key in the names of articulations and assigning midi commands over and over. If we would collect this information in a repository in a standard format we could save time and money.


I very much agree on this. That is essentially one of the main ideas I wanted to convey. A few additional concepts come to mind which could further expand the features of the system; but we'll cross that bridge once and if we actually get there.


Sub3OneDay said:


> I really like where this is going and I admire the passion you clearly have to develop something universal.
> 
> *I think the difficulty lies in the fact that we each have our own workflow and one of the benefits of OSC for example is that we can design an interface that compliments that.
> 
> And we each have our own problems to solve…*
> [...]


Very much so, it is going to be interesting to see what the end result will be if we decide to develop a solution.



Sub3OneDay said:


> [...]
> I have wrestled with articulation maps in OSC for a while (like a year or so), and I have had a functioning OSC panel which populates articulations reliably when MIDI tracks are selected. But the limitations of my method are that it won't work on instrument tracks.
> 
> I have spent the last week or so trying various solutions that are on this thread that use a plug in on the instrument track - with varying degrees of success, but again I see limitations with this on very large (1000+ track) templates.
> 
> The final challenge I have been looking at is around using a combination of methods
> - Challenge and response on the MIDI tracks
> - Plugin values on the instrument tracks
> 
> I have been using my limited JS knowledge to try to use my custom module to determine which track has been selected but this has proved unreliable as I have discovered that my DAW (cubase), whilst excellent on other areas, is not totally reliable in how it responds when the generic remote is set up.
> 
> Equally, the messages that are retuned to OSC and the through my custom module cannot be interpreted with enough detail (at least with my skills) to distinguish between instrument and midi track.
> 
> I have had to admit defeat on this for the moment.
> 
> The only solution that I can see to reliably solve this is to create a plugin that sits in the instrument insert and mimics or creates a midi send. This is beyond my current coding skills.
> 
> Unless of course Steinberg do the right thing and put midi sends on instrument tracks.
> 
> I would be more than happy however to support the initiatives above and have over the years created all sorts of spreadsheets and tools to manipulate expression maps and generic remote xml - they all make my workflow easier - the only problem is they are also a tool to aid procrastination when what I should be doing is writing music!


I can only imagine the amount of time and effort that was spent on trying to make that work for you. The method you described is one among a few others that I wanted to avoid altogether due to the tedious, repetitive work required; not to mention the inflexibility of it. It is more than understandable that you currently find yourself stuck. Abstracting away some of the programming tasks for the end user is what I hope to accomplish; making it easier for a non-programmer to get bi-directional communication working between OSC and their DAW of choice (presuming it is supported).


----------



## Sub3OneDay

RaztoR said:


> I can only imagine the amount of time and effort that was spent on trying to make that work for you. The method you described is one among a few others that I wanted to avoid altogether due to the tedious, repetitive work required; not to mention the inflexibility of it. It is more than understandable that you currently find yourself stuck. Abstracting away some of the programming tasks for the end user is what I hope to accomplish; making it easier for a non-programmer to get bi-directional communication working between OSC and their DAW of choice (presuming it is supported).


So , big exciting progress update - after a bit of extra effort, and some encouragement from here I finally got it working - I can now identify and map both instrument and midi tracks to my articulation panel, and amend vst quick controller labels and patches etc at the same time.

It still takes a bit of effort to set up all the objects in my custom file initially but that’s the next challenge - I think it would be great to make the custom module read the xml expression map directly and create the object variables so that if the expression maps are changed or added to the module will respond without having to go it and amend by hand.

Will post a video or some screen sg
Hots in the next day or so of what my OSC panel now does. 
Quite pleased.


----------



## RaztoR

Sub3OneDay said:


> So , big exciting progress update - after a bit of extra effort, and some encouragement from here I finally got it working - I can now identify and map both instrument and midi tracks to my articulation panel, and amend vst quick controller labels and patches etc at the same time.
> 
> It still takes a bit of effort to set up all the objects in my custom file initially but that’s the next challenge - I think it would be great to make the custom module read the xml expression map directly and create the object variables so that if the expression maps are changed or added to the module will respond without having to go it and amend by hand.
> 
> Will post a video or some screen sg
> Hots in the next day or so of what my OSC panel now does.
> Quite pleased.


Now that's exciting news indeed, looking forward to see what you've come up with. I've currently put my prototype articulation mapper on hold and focused on adding different features such as a primitive track visibility editor inside of OSC, search features and more. Furthermore I've experimented with different base colors along with the possibility of giving users a simple way of skinning the base GUI. I will later experiment with more color variations for different widget types and purposes, i.e. a green play button. See the attached images below for visual demonstrations.



Spoiler: Coffee skin














Spoiler: Red and black














Spoiler: Greyscale foundation














Spoiler: Work-in-progress search












On a different note, today I realized that the missing EuCon SDK files were installed on my system albeit inside a custom directory not mentioned in the manual. It seems like the SDK do in fact contain all the relevant header files needed to create a functional application for non-commercial purposes. @tpoots and other programmers with knowledge in C++ may be very interested in having a closer look at the SDK as it might solve many of our issues in a much more convenient manner.


----------



## Drjay

RaztoR said:


> It seems like the SDK do in fact contain all the relevant header files needed to create a functional application for non-commercial purposes.


Are you certain this is legal? I had a quick glance at the EULA and could not find an explicit statement with regards to non commercial usage. But since I am not a native speaker I am not sure especially when dealing with ‚legal English‘. Actually I’m not even sure when it comes to legal terms in my mother tongue 
Anyway, I would like to clarify this upfront before starting to develop something which can‘t be published after all.


----------



## RaztoR

Drjay said:


> Are you certain this is legal? I had a quick glance at the EULA and could not find an explicit statement with regards to non commercial usage. But since I am not a native speaker I am not sure especially when dealing with ‚legal English‘. Actually I’m not even sure when it comes to legal terms in my mother tongue
> Anyway, I would like to clarify this upfront before starting to develop something which can‘t be published after all.








Silliness aside. You raise an important question. I checked the EULA just now and it seems like it does not give the user any such rights to develop a non-commercial solution. It is strictly for evaluation purposes. Now the question is whether or not Avid would be even remotely interested in allowing a non-commercial license upon request with or without code obfuscation. I very much doubt it, but I can see how the idea could prove beneficial to them in the long-term depending on one's perspective. I know there are commercial EuCon solutions out there, it makes me wonder if they have been licensed or not. I think might be worth contacting Avid to see what they have to say, even if they're unlikely to grant us anything.


----------



## Manuel M.

RaztoR said:


> Now that's exciting news indeed, looking forward to see what you've come up with. I've currently put my prototype articulation mapper on hold and focused on adding different features such as a primitive track visibility editor inside of OSC, search features and more. Furthermore I've experimented with different base colors along with the possibility of giving users a simple way of skinning the base GUI. I will later experiment with more color variations for different widget types and purposes, i.e. a green play button. See the attached images below for visual demonstrations.
> 
> 
> 
> Spoiler: Coffee skin
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Spoiler: Red and black
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Spoiler: Greyscale foundation
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Spoiler: Work-in-progress search
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On a different note, today I realized that the missing EuCon SDK files were installed on my system albeit inside a custom directory not mentioned in the manual. It seems like the SDK do in fact contain all the relevant header files needed to create a functional application for non-commercial purposes. @tpoots and other programmers with knowledge in C++ may be very interested in having a closer look at the SDK as it might solve many of our issues in a much more convenient manner.


Man, I really like the clean and sleak look of it and am excited about the Search function. 
Another thing I have been looking for and already reached out to some of the coding-genius minds here is, you think there is a possibility to be able to switch articulations while editing and NOT while recording? So basically replacing the tedious task of (in Cubase‘ Key Editor) selecting a bunch of midi-notes, opening the drop-down menu at the top of the Key Editor, searching for the desired articulation within a that endless list VSL instruments present you with, to then select that articulation. Or, drawing them in, in the Articulations Lane in the bottom of the Key Editor. It would be really great if this was possible with the touch controller, the articulations nicely being layed out in front of you and you just need to tap the appropriate articulation.


----------



## RaztoR

Manuel M. said:


> Man, I really like the clean and sleak look of it and am excited about the Search function.
> Another thing I have been looking for and already reached out to some of the coding-genius minds here is, you think there is a possibility to be able to switch articulations while editing and NOT while recording? So basically replacing the tedious task of (in Cubase‘ Key Editor) selecting a bunch of midi-notes, opening the drop-down menu at the top of the Key Editor, searching for the desired articulation within a that endless list VSL instruments present you with, to then select that articulation. Or, drawing them in, in the Articulations Lane in the bottom of the Key Editor. It would be really great if this was possible with the touch controller, the articulations nicely being layed out in front of you and you just need to tap the appropriate articulation.


That is precisely what I have in mind for my own articulation mapper. The main problem for me is not about sending a program change message from OSC to Cubase as an example. That will be relatively easy to implement. The main problem for me is about developing a "convenient" solution to populate the screen with the appropriate articulations; a solution that will mostly take care of itself once it has been implemented. Because of how tedious it can be to maintain or update such a system, I have been looking into solutions that does not rely on Cubase's midi-send and/or generic remote for every MIDI-channel or instrument track. EuCon is the only ethernet-based protocol that comes to mind that would help circumvent MIDI limitations in tandem with being an applicable protocol for DAWs like Cubase, Digital Performer, Logic and Reaper.

I would have been all for making an open Ethernet protocol standard for control surfaces, synths and similar. But such notions will be fruitless if there's no incentive or priority from the consumers, DAW- and instrument-developers. Still, perhaps MIDI 2.0 will one day come to our aids for such endeavours. Again that's wishful thinking on my end; considering how slow certain creative industries are when it comes to adopting new standards on a wider scale. Technical debt 101.


----------



## Manuel M.

Yep, it's quite simple (even for me as someone with no coding skills) to send out Program Change messages or NoteOns. Especially with the help of @tpoots detailed comments in his template files he published on GitHub and his very clean way of writing, even I am somewhat able to understand what is going on there and might take a risk to play around with it. So far this whole touch controller thing was nothing but despair to me because I simply lack the necessary skills and that frustrates the sh*t out of me. I'd love to be able to get things working and bend them until I see them fit but seriously, there is just no way for me achieving any reasonable results in a forseeable future to aid me in what I need such a controller for in the first place... that is: writing music more efficiently and faster. So my hope really is on you guys here  I've been quietly following this thread for some weeks now and still don't feel like I can contribute anything of help to this community effort other than cheering you guys and asking for additional functions  It's amazing to see what @jononotbono has come up with and same counts true for @marcodistefano's Flow+. Still, this "transformer-trick" thing only is partially convincing to me as it definitely has it's flats in flexibility, is somewhat fragile and very tedious to maintain, as you've already stated. I guess anything expression map related will be a PITA until Steinberg updates their expression map-handling-system, after all.
@mrmiller's Patchboard really is superior in terms of integration and flexibility. I reached out to him earlier this week and basically asked the same thing with the "possibility of on-screen articulation switching while editing" since I'm considering to try Patchboard. He didn't reply yet, so I don't know if Patchboard is capable of doing that. However, Patchboard is utilizing EuCon and detects tracks based on their name and not on a midi-transformer. So he might be able to answer some of the EuCon legal concerns here as well.
Hmm... Well, I guess it doesn't really make sense to wait for the DAW-developers to introduce MIDI 2.0 and whatnot else. I can't remember when I first heard about MIDI 2.0 but it definitely seems like very long ago. However, MIDI is still one of the very few standards DAW-devs have agreed upon. So you probably have to develop the controller independently of DAW-developments if this endeavor is supposed to be leading somewhere in a somewhat forseeable future and thankfully accept any helpful developments happening on the DAW-end side  Or maybe that is just my impatience speaking to finally have some working touch controller


----------



## Drjay

Manuel M. said:


> So basically replacing the tedious task of (in Cubase‘ Key Editor) selecting a bunch of midi-notes, opening the drop-down menu at the top of the Key Editor, searching for the desired articulation within a that endless list VSL instruments present you with, to then select that articulation. Or, drawing them in, in the Articulations Lane in the bottom of the Key Editor


Good question. When I tried to insert or change articulations in Cubase step edit mode, it always failed. It seems the only ways to change articulations are the ones you described. I would be glad, if someone could prove me wrong. Of course you change the articulations while recording but this would mean you‘d have to go through every part just record the articulations in real time.


----------



## jononotbono

Manuel M. said:


> Or maybe that is just my impatience speaking to finally have some working touch controller


I know the feeling 😂


----------



## Manuel M.

Drjay said:


> Good question. When I tried to insert or change articulations in Cubase step edit mode, it always failed. It seems the only ways to change articulations are the ones you described. I would be glad, if someone could prove me wrong. Of course you change the articulations while recording but this would mean you‘d have to go through every part just record the articulations in real time.


Yeah, but that is certainly not what I imagine 21st century interactive touch screen porn to be. Having it all in front of you and then still having to go back to that old mouse and scroll through drop down menus is an absolute let down and sooo unsexy. 🤣🤣



jononotbono said:


> I know the feeling 😂


Ha, at least you got something to work on that gives you the feeling of „being in charge“ 😜 So how are you doing and progressing, anyways? 😊


----------



## jononotbono

Manuel M. said:


> Ha, at least you got something to work on that gives you the feeling of „being in charge“ 😜 So how are you doing and progressing, anyways? 😊


That's a good question.

Currently upgrading all faders. Basically I thought the faders were "done" and then I realized how shambolic I actually am. The different types of faders are now getting treatment so...

All audio faders (which include Selected track, Control Room, Listen, Click and Sends) now show a db value. They showed nothing before. Which is about as useful as a Rabbit with no teeth.

All CC faders - They show CC value.

All Mic Position Faders (technically these are CC faders) were showing CC value (like the CC faders) however, the grave mistake here was not actually making them display db because thats what Mic Positions are valued at. So the problem here is scaling the CC value and translating this to show db.

Then controller faders (which are also CC faders) that are for library controls (time stretch, reverb, - anything other than the CC faders that are Mod, Exp, Vib - the commonly used "performance" CCs)... which don't really require any value read out because barely any library shows a value. For example, load up a SPitfire library and see what value a Time Stretch controller shows... Nothing. Except physically being left and right.

Then on top of all that, it dawned on me that all of these faders that show db are currently set to +6db. Cubase allows the user to set their project to +6db and +12db. What happens if someone uses +12db and these faders are designed at +6db? They become utterly useless. So...

Now the faders will have a switch where you can instantly change their ranges and value to be either +6db or +12db and then everyone is happy.

Of course, all faders have the option to instantly tap and change the names/scribble strips. Select different Midi channels (useful for sending to outboard gear). Change the colour of the faders. And instantly change the CC value (excluding audio faders that are assigned to Generic Remotes - Audio and Sends).

There's also an auto save system so if the user changes any value, name, colour, fader position, everything will be remembered without having to save anything as its done for you.

My modesty prevents me from saying this but I've heard the JnB Controller has had a lot of thought put into a few things.

There's loads of other shit I'm busy with but honestly, all I can say is, if you are embarking on a journey to make a custom touch controller... pack your lunch because you're gonna be spending a lot of time down in the HOLE. Lets not even get started with expression map and articulation systems!
😂


----------



## Manuel M.

Wow, sounds absolutely awesome 😃 I suppose you’re not up for any predictions on when you are going to release that beast of a controller, aren‘t ya? 😜

Regarding the Time Stretch. As I mentioned on Discord. I have Time Stretch for libraries like Spitfire and VSL assigned to Pitch Bend since I don’t need it for anything else and it naturally snaps back to middle state. That way I am always with „original speed“ when I don’t use time stretching.

But man, this sounds so promising!! I really wish I could just ramble away with it 😅

EDIT: Nope, I absolutely do not plan to go on that journey. I really have to admit that I am lacking the skills and that getting myself acquainted with all of that is beyond what I want. There’s people like you, @Drjay, @RaztoR and before mentioned folks who really are into this and know what they are doing. I shamelessly acknowledge that and am happy to be a customer… with feature requests 😜🤣


----------



## jononotbono

Manuel M. said:


> Wow, sounds absolutely awesome 😃


It's not. Its beyond the beyondness of all things 😂


Manuel M. said:


> I suppose you’re not up for any predictions on when you are going to release that beast of a controller, aren‘t ya? 😜


I studied Jasper Blunk's business strategy and I can only say that the Jono not Bono Cubase Touch Controller will be released when it is released.
And of course when Jasper says so.


Manuel M. said:


> Regarding the Time Stretch. As I mentioned on Discord.


What Discord? Would love to join. Unless you're talking about my Discord. Of which, I'd like to formally and finally welcome you! 😂


Manuel M. said:


> I have Time Stretch for libraries like Spitfire and VSL assigned to Pitch Bend since I don’t need it for anything else and it naturally snaps back to middle state. That way I am always with „original speed“ when I don’t use time stretching.


Pitchbend in the JnB Controller... bends pitch. You won't be disappointed 😘



Manuel M. said:


> with feature requests 😜🤣


Spit it (THEM) out then... 😂


----------



## RaztoR

Spoiler: Work-in-progress












Update: Been experimenting with different types of layout designs and controller functionalities if I keep it simple. While it is far from finished, you can still get an idea as to what the end result might be for this particular feature. I still need to figure out a convenient way to populate each column and create a database that OSC will fetch relevant data from.

I have a few ideas as how one can make the columns more customizable for convenience. Like a settings menu where you can swap, hide or add different buttons whenever you press one of the cogwheel/edit buttons illustrated above. A feature to be considered for another time. Furthermore I will make sure that the shared icons in use are more consistent across the application. Currently you can see that the "libraries" button on the left has a book icon while the corresponding "library search" widget has a bookshelf. That's something that I'll update later.


----------



## Manaberry

You guys are doing so many cool stuff with OSC.
Should I be ashamed of not having updated my template for over a year now? Haha


----------



## ajsealy

Manaberry said:


> @jononotbono You should try the circular menu! Very useful to save room on your template!


I was trying to get this going to set my tools to, but I dont understand how to then assign each value within the menu to select the tools (my daw is cubase)

I can't use the "preArgs" to assign what midi channel and CC value because that would link it to the widget itself - not the different menu options within it.

I asked JE on the OSC forums but similar to the documentation, the help and support, while extremely valuable, doesnt seem to be geared toward those with little to no scripting experience.

I certainly COULD make a button widget for each tool I'm trying to assign, but that seems so inefficient. How do I assign the contents of a switch/circular menu in OSC to the desired tools (or anything) in my daw?


----------



## Drjay

ajsealy said:


> I was trying to get this going to set my tools to, but I dont understand how to then assign each value within the menu to select the tools (my daw is cubase)
> 
> I can't use the "preArgs" to assign what midi channel and CC value because that would link it to the widget itself - not the different menu options within it.
> 
> I asked JE on the OSC forums but similar to the documentation, the help and support, while extremely valuable, doesnt seem to be geared toward those with little to no scripting experience.
> 
> I certainly COULD make a button widget for each tool I'm trying to assign, but that seems so inefficient. How do I assign the contents of a switch/circular menu in OSC to the desired tools (or anything) in my daw?


I had a look at your post on the OSC forum. The answer is perfectly fine. You could do differently, but every solution will require scripting.


----------



## GtrJazz

Just curious are you guys running OSC on the same system as your DAW or on a separate slave?


----------



## jononotbono

GtrJazz said:


> Just curious are you guys running OSC on the same system as your DAW or on a separate slave?


Dedicated computer.


----------



## GtrJazz

Thanks Luke. Any new updates on your jnb touchscreen controller?


----------



## jononotbono

GtrJazz said:


> Thanks Luke. Any new updates on your jnb touchscreen controller?


Been working round the clock on it and at 6am had a new breakthrough on something so I'll make a short video soon on the next layer of Touch Hole nonsense.


----------



## GigStage

Manaberry said:


> Should I be ashamed of not having updated my template for over a year now?


An update sounds like a good idea! 

P.S. I've also found a nice OSC template for keyboardists on OSC forum: https://openstagecontrol.discourse.group/t/open-stage-control-and-gig-performer-keyboard-splits/1713


----------



## Drjay

Every time I think, my controller is almost finished, something new comes round the corner.
OSC version 1.12 got a canvas widget!  
Another couple of 'lost' weekends and maybe sleepless nights


----------



## Dewdman42

Drjay said:


> OSC version 1.12 got a canvas widget!


Oh that will open up a lot of possibilities.


----------



## jononotbono

Drjay said:


> Every time I think, my controller is almost finished


----------



## aftrshok99

I just made my first controller using OSC but I would like to add a fader that controls whatever track you have selected. I'm using cubase 11 pro but I just can't seem to figure out how to do this. I've looked at Joe's template but I don't understand what he did. Can someone help me out?

I think I just figured it out. If I enable quick controls for all my tracks, then once I select a different track my fader on my template controls the current selected track.

Is this the best way to do it?


----------



## mofam

Mihkel Zilmer said:


> Hmmm.. Yes - that is the exact incoming data that I see.
> 
> Just curious - when you load my OSC project, is the left side completely blank or does it have a grid of 55 empty buttons?
> 
> Also what version of OSC are you running? The project was created on 0.45.5 or 0.45.6.


Can you confirm that this setup works with Cubase 11 and the recent Open Stage Control 1.13.2?
I can't tell if I'm doing something wrong, or if It just doesn't work anymore


----------



## mofam

matthieuL said:


> Finally, I read, re-read, re-re-read pages 7 and 8 of this thread, and was able to make the Mihkel Zilmer project working. From there, I think I will be able to customize it.
> For others, don't give up !


I've been at it for 2 days now, I'm still not sure what I am missing. Any Tips?


----------



## Manaberry

@mofam I remember that one of the "recent" versions back then was breaking the custom script.


----------



## jononotbono

aftrshok99 said:


> I just made my first controller using OSC but I would like to add a fader that controls whatever track you have selected. I'm using cubase 11 pro but I just can't seem to figure out how to do this. I've looked at Joe's template but I don't understand what he did. Can someone help me out?
> 
> I think I just figured it out. If I enable quick controls for all my tracks, then once I select a different track my fader on my template controls the current selected track.
> 
> Is this the best way to do it?


Hey man, I totally understand how infuriating this journey is. As you could probably imagine, there are many ways to skin this cat.

If you want a fader to control the volume of a selected track, then a great way to do this is by using a Generic Remote. Here's a basic way of doing that...






So set the fader in OSC to use whatever midi channel you want (I'd advise not using Midi channel 1 although you can but it will require having dedicated midi ports to avoid anything being triggered on midi channel 1 (pretty much everything you use will use midi channel 1 and whatever cc address, for example, its universal that Midi channel 1 and CC1 is always used for controlling Mod data etc but this is a whole different area). So in this example screen shot, I choose midi channel 2, address 1. Set the mx value of 127 and this will mean the fader will have full range of 0 - 127 midi values (min and max), set the flags to receive and transmit (if you want it to be bidirectional).

Then underneath, in device, chose mixer (VST mixer also works), then channel/category, choose selected (meaning, the selected track) and then choose Volume for its action.

In OSC, on the fader widget, in the OSC inspector on the right,

address... set to /control
preargs [2,1]

And then your target is your midi port

That should get it working. Oh, don't forget to set the Cubase Generic Remote's midi input and output to the correct midi port otherwise nothing will work haha

As for quick controls. Yes, this is another way of working. 

Hope this helps man.


----------



## aftrshok99

jononotbono said:


> Hey man, I totally understand how infuriating this journey is. As you could probably imagine, there are many ways to skin this cat.
> 
> If you want a fader to control the volume of a selected track, then a great way to do this is by using a Generic Remote. Here's a basic way of doing that...
> 
> 
> 
> 
> 
> 
> So set the fader in OSC to use whatever midi channel you want (I'd advise not using Midi channel 1 although you can but it will require having dedicated midi ports to avoid anything being triggered on midi channel 1 (pretty much everything you use will use midi channel 1 and whatever cc address, for example, its universal that Midi channel 1 and CC1 is always used for controlling Mod data etc but this is a whole different area). So in this example screen shot, I choose midi channel 2, address 1. Set the mx value of 127 and this will mean the fader will have full range of 0 - 127 midi values (min and max), set the flags to receive and transmit (if you want it to be bidirectional).
> 
> Then underneath, in device, chose mixer (VST mixer also works), then channel/category, choose selected (meaning, the selected track) and then choose Volume for its action.
> 
> In OSC, on the fader widget, in the OSC inspector on the right,
> 
> address... set to /control
> preargs [2,1]
> 
> And then your target is your midi port
> 
> That should get it working. Oh, don't forget to set the Cubase Generic Remote's midi input and output to the correct midi port otherwise nothing will work haha
> 
> As for quick controls. Yes, this is another way of working.
> 
> Hope this helps man.


Thank you so much for going through all this detail. I’ll give it a try in a bit. One thing I have noticed is when I touch a button on my device that I’m controlling cubase with, the value keeps changing on something else.

Like if I tap to turn on the metronome and then tap to turn it off over and over a bunch of times in a row, it will make the pan Bali on one of the channels in the mixer change a certain amount for each press I do. Any ideas why?


----------



## iMovieShout

aftrshok99 said:


> Thank you so much for going through all this detail. I’ll give it a try in a bit. One thing I have noticed is when I touch a button on my device that I’m controlling cubase with, the value keeps changing on something else.
> 
> Like if I tap to turn on the metronome and then tap to turn it off over and over a bunch of times in a row, it will make the pan Bali on one of the channels in the mixer change a certain amount for each press I do. Any ideas why?


You could try tracing the MIDI output from your touchscreen MIDI ports, and also from Cubase (your PC). I've noticed that Cubase will often send out random MIDI signals when I'm using my touchscreens or even a MIDI instrument.
I use Protokol from Hexler, which is a free MIDI monitor app. Very helpful and better than most. Link below.

_Hexler_


----------



## Mihkel Zilmer

mofam said:


> Can you confirm that this setup works with Cubase 11 and the recent Open Stage Control 1.13.2?
> I can't tell if I'm doing something wrong, or if It just doesn't work anymore


Hi,

One of the updates along the way broke my original custom script from 2019.
I wrote a new custom script around January 2021, and uploaded new files in post #424, page 22. 





Open Stage Control (Tutorial) - An alternative to Lemur and TouchOSC


Hi there. I cannot help for now. Im not available as I have work to finish in high priority. It takes times to review your issues and find a solution, sadly. I hope someone will be able to help you in the meantime. I'm glad to see OSC getting an important place in your studio and your workflow...




vi-control.net





Are you using these files or the older ones from 2019?
I have not updated OSC in a while, currently the files from 2021 work with OSC 1.8.1, can't confirm if they work with more recent versions.


----------



## Nicksaya

MauroPantin said:


> Well... After seeing it on Trevor Morris's AMA yesterday where he showed a bit of his OSC template I'm building a virtual Harp to play glissandos on mine. So I am in the process of adding another 47 buttons shaped like a harp and entering the code this weekend if I get the time for it.


I’d love to know how to build the harp. I do it with the keyboard on touchscreen but the harp strings would be way cooler


----------



## Grizzlymv

I'm revisiting this since there was major updates since last time and it seems to be much more stable than back then. That being said, I was wondering if anyone managed to have a proper Meter that shows the actual loudness of the selected track? I did try with a Fader with a compact design, and it's values from 0 to 127, and in Cubase, I did set it to Mixer / Selected / Meter All and Transmit flag. It does shows activity, but it's definitely not correct. Even with the volume at the max, and seeing peaking in the red in Cubase, it barely goes above the half of the slider in OSC. Any ideas? Thanks in advance.


----------



## Grizzlymv

Hi guys. So as mentioned in my previous post, I've been back to Open Stage Control and the updates since the last version I used are tremondous!
It is now working super well and reliable. I pushed it further this time around with a bit of logic and dynamic. I didn't push it as far as others
with showing track information and loading expression maps dynamically. That may happen at some point but I wanted something light but fully functional.

My only drawback so far is the Mixer fader for the track. I can only have it one way for now (from OSC to Cubase). If I enable the Transmit in Cubase,
it doesn't return the exact same value to OSC for some reasons and changing back and forth between tracks will keep lowering the volume of a few DB everytime,
which can quickly mess up your project. So for now, until I figure out a fix, it's still one way.




Otherwise, as you can see in the screenshot, I've enabled an almost complete keyboard which helps with the track search, track preset and even the saving of the projects.
I often use the arrows to navigate. By defualt, the keyboard will be displayed when the Play button is not on (so no playback, no recording). Of course, you can close it manually
If you tap on one of the CC fader, it will also hide the keyboard automatically.




Part of that automation, when the playback/recording stop, the editing panel shows up. While playing, the expression maps panel will be displayed instead.
Again, you can manually display/hide them as you see fit. 

Speaking about expression maps, as before, they are static, not dynamic. Right now it only contains my config for the cinematic studio series, but you can expand with other tabs
if needed. They are just hidden for now. I did include my expression maps but I suspect most already have their own which differ, but I guess they can easily be adjusted.

As before, I'm sharing it in case some would be interested in. This time, you'll have to install Borne Midi Translator Classic (the free one) and import my keystroke config so the keyboard can work. It's still a 1920x1080 screen as I'm still using my old Surface Pro 2 for the screen.

Still have a few other ideas in mind, but for now, I feel that's a good start. Will most likely gonna wait for Cubase 12 for the next big iteration in hope it will bring some
improvements in the generic remote / osc controls. few months left to see if it's gonna be false hope.  In the meantime, if anyone had any clue for the track mixing fader bug I have,
that'd be helpful. 

Cheers


----------



## MauroPantin

Quick update for everyone: I've expanded OSC into my entire computer. Everything I have to do regularly or that requires a lot of clicks now has a shortcut in OSC. In the DAW, in Sibelius, in Dorico, and elsewhere, too. Even my folders for clients have a quick access.

They missing piece was AutoHotKey. OSC + MidiKey2Key + AutoHotKey automates just about anything you can think of in a Windows PC environment. Can't recommend this set up enough.


----------



## Grizzlymv

MauroPantin said:


> Quick update for everyone: I've expanded OSC into my entire computer. Everything I have to do regularly or that requires a lot of clicks now has a shortcut in OSC. In the DAW, in Sibelius, in Dorico, and elsewhere, too. Even my folders for clients have a quick access.
> 
> They missing piece was AutoHotKey. OSC + MidiKey2Key + AutoHotKey automates just about anything you can think of in a Windows PC environment. Can't recommend this set up enough.


how do you manage to emulate the mouse move/click for instance? I'm just thinking of an issue I have with the Add Track Preset screen for instance (or any search screen for that matter), by default, the focus isn't on the search box itself. so I always have to move the mouse, point and click to activate the focus. If there's a way to automate that so when I tap the Add Track Preset button, it opens the window by sending the command to Cubase, and then would auto activate the field, that would be a huge step up!  curious to know how you would approach this


----------



## MauroPantin

Grizzlymv said:


> how do you manage to emulate the mouse move/click for instance? I'm just thinking of an issue I have with the Add Track Preset screen for instance (or any search screen for that matter), by default, the focus isn't on the search box itself. so I always have to move the mouse, point and click to activate the focus. If there's a way to automate that so when I tap the Add Track Preset button, it opens the window by sending the command to Cubase, and then would auto activate the field, that would be a huge step up!  curious to know how you would approach this


Yes, there is a way to do that. I'm not sure about the Cubase part because I use Reaper, and I'm not sure if you can combine the OSC or MIDI message with the AHK external message that runs through MidiKey2Key. You might need to change the shortcut so that AHK does the entire thing, perhaps?

Anyway, for the clicking part: Sure! Provided the search box is always in the same place in your screen (in terms of pixel coordinates) you can have AutoHotKey move the mouse to that location and then click on it for you. It's quite simple to do once you understand how to do it and the macros run incredibly fast.

Here's two AutoHotKey scripts that might help you. Keep in mind I'm not a coder, so there's room for improvement in these, I'm sure. They're pretty rough but they get the job done. First one:


#SingleInstance,Force
CoordMode,Mouse,Screen
X_Pos := []
Y_Pos := []
~^LButton::
MouseGetPos, temp_X, temp_Y
X_Pos.Push(temp_X)
Y_Pos.Push(temp_Y)
Return
!+^r::
Loop, % X_Pos.Length()
{
MsgBox % X_Pos[A_Index]
MsgBox % Y_Pos[A_Index]
}
Return
ESC::ExitApp


This first one lets you figure out the coordinates for where on the screen you need your mouse to be located. You run this code in an AutoHotKey script, and then press and hold CTRL while you click through the places where you need your mouse to go, in order. Once you are done you let go of the CTRL key and press CTRL+ALT+SHIFT+R and you will get pop up messages with the coordinate pairs in order. First one is always X, then Y. You'll get 2 pop up messages per each click you performed before. Write those down somewhere and hit Escape on your keyboard.

Then you use this snippet and link it to your OSC shortcut


#SingleInstance,Force
CoordMode,Mouse,Screen
MouseGetPos, temp_X, temp_Y
MouseMove, YOURXCOORD, YOURYCOORD
MouseClick
MouseMove, temp_X, temp_Y
ExitApp 0


You have to replace the "YOURXCOORD" and "YOURYCOORD" with your previous numbers. This does a few things:

First command, MouseGetPos, will get your current mouse position and write that to a couple of variables. Last line, MouseMove will return your mouse to where it was using those variables. I did this because I found it annoying after some usage to be searching for my cursor in places where it originally wasn't. It's entirely optional to include those two lines, it's just my personal preference.

MouseClick is self explanatory.

You can do any sequence of clicks that you want, by simply stringing along sequences of MouseMove with the appropriate coordinates and MouseClick. Keep in mind, though, that sometimes when you click something the app you are using may take a few miliseconds before changing states, depending on what you are doing. In those instances you can add a "Sleep X" command, replacing the X with an arbitrary number in miliseconds to wait before proceeding.

Let me know if that helps 

EDIT: Not sure why the code snippets look weird in my post. Sorry about the formatting =/


----------



## Manaberry

I'm so glad to see you guys pushing Open Stage Control to the next level. 4 years ago, I would have not even imagined seeing such great ideas. Keep it up!


----------



## Sub3OneDay

So, really quick update as we’re super excited. 
A few of us over on the OSC forums have been working really hard with dynamic expression maps and we’ve created a great suit of custom module code that can read the track name from cubase and the use the xml of the expression maps directly to populate the maps in OSC. 

Yes, you heard it - no more transformer or midi send needed, an no more long massive objects or variables in the custom module. 

Just a path to your expression map folder in the custom module and a simple id number in your track names in cubase…

Boom.


----------



## blaggins




----------



## Manaberry

Sub3OneDay said:


> So, really quick update as we’re super excited.
> A few of us over on the OSC forums have been working really hard with dynamic expression maps and we’ve created a great suit of custom module code that can read the track name from cubase and the use the xml of the expression maps directly to populate the maps in OSC.
> 
> Yes, you heard it - no more transformer or midi send needed, an no more long massive objects or variables in the custom module.
> 
> Just a path to your expression map folder in the custom module and a simple id number in your track names in cubase…
> 
> Boom.


----------



## Arsenal

Just wanted to thank you for all the precious input (and memes haha) from you guys. I did use some kinda old of version of OSC with a custom creation of mine but not that much anymore as Im torn between the kinda native alternative option of S1 having a detachable macro touchbar (that has lots of bugs... already reported some of them to presonus but they dont really know much about that understandebly as Im using these UK tuio custom drivers to even be able to run touch on macOS) and using OSC an the same computer (I still think using a dedicated computer for Openstage is overkill, but willing to be convinced of a better workflow as Im used to using 2 computers nearly simultaniously. Got a 3 finger swipe gesture for opening and switching between native imac and mac mini screenshare window. Bad performance of course and no audio sharing)


----------



## jononotbono

Sub3OneDay said:


> So, really quick update as we’re super excited.
> A few of us over on the OSC forums have been working really hard with dynamic expression maps and we’ve created a great suit of custom module code that can read the track name from cubase and the use the xml of the expression maps directly to populate the maps in OSC.
> 
> Yes, you heard it - no more transformer or midi send needed, an no more long massive objects or variables in the custom module.
> 
> Just a path to your expression map folder in the custom module and a simple id number in your track names in cubase…
> 
> Boom.


Which thread is it? Looking forward to seeing what's been going on. Fuck, its already mid February. Time vanishes in the Touch Hole 😂


----------



## Garlu

jononotbono said:


> Which thread is it? Looking forward to seeing what's been going on. Fuck, its already mid February. Time vanishes in the Touch Hole 😂











THERE IT IS: the ultimate custom module for cubase users (at least for me)


The code looks good. i'm not sure try to comment out and add: return {address, args, host, port} and what i saw your MCU input is disabled in cubase. just connect it to OSCtoMCU. and one last thing, be sure OSC runs before cubase. shut down cubase and try again. and now i'm out. sorry...




openstagecontrol.discourse.group


----------



## jononotbono

Garlu said:


> THERE IT IS: the ultimate custom module for cubase users (at least for me)
> 
> 
> The code looks good. i'm not sure try to comment out and add: return {address, args, host, port} and what i saw your MCU input is disabled in cubase. just connect it to OSCtoMCU. and one last thing, be sure OSC runs before cubase. shut down cubase and try again. and now i'm out. sorry...
> 
> 
> 
> 
> openstagecontrol.discourse.group


Thanks Vanessa. I'll have a read over a nice morning coffee and before today's Touch bullshit commences 😂


----------



## Manaberry

Jeez, that thread is so overwhelming, I don't know where to start


----------



## jononotbono

Manaberry said:


> Jeez, that thread is so overwhelming, I don't know where to start


The whole journey is overwhelming. I think my hair has started to fall out and I'm now on my way to transforming into Gollum.


----------



## Markrs

jononotbono said:


> The whole journey is overwhelming.


I would say that for learning music as well. That could be why I played around with OSC, saw that it was super cool, but also a total black hole that will absorb all my free time and decided it could wait for another time.


----------



## jononotbono

Markrs said:


> I would say that for learning music as well. That could be why I played around with OSC, saw that it was super cool, but also a total black hole that will absorb all my free time and decided it could wait for another time.


I'm very much looking forward to writing music again. I've just got to 5000+ programmed articulations so will be doing some more videos soon and hopefully some drunken Sample library walk through/writing streams/videos. Depends whether I get permission from the Touch Hole.


----------



## Markrs

jononotbono said:


> I'm very much looking forward to writing music again. I've just got to 5000+ programmed articulations so will be doing some more videos soon and hopefully some drunken Sample library walk through/writing streams/videos. Depends whether I get permission from the Touch Hole.


You can also blame me Jono as I mentioned OSC on a live steam you were doing about another software touch controller, possibly Sherlock? Which means “I am the cause of all your pain” (for some reason that quote from Spectre suddenly popped into my head) 😂


----------



## Alex Fraser

Markrs said:


> I would say that for learning music as well. That could be why I played around with OSC, saw that it was super cool, but also a total black hole that will absorb all my free time and decided it could wait for another time.


I can concur. Was up until 3am pushing pixels around, feeding the Touch OSC OCD monster.

A very dangerous distraction.


----------



## Sub3OneDay

Manaberry said:


> Jeez, that thread is so overwhelming, I don't know where to start


it was a pretty intense few days - and in fact it’s over two threads as there’s another one about dragging the xml articulation files data using js.node.

Tomorrow I plan to tidy up the code as it’s full of debugging stuff still on my machine and I’ll post a link and maybe a mini tutorial. 

OSC black hole is a scarey place when you get dragged in…


----------



## jononotbono

*Intense 11 months


----------



## jononotbono

Markrs said:


> You can also blame me Jono as I mentioned OSC on a live steam you were doing about another software touch controller, possibly Sherlock? Which means “I am the cause of all your pain” (for some reason that quote from Spectre suddenly popped into my head) 😂


I hate you. Although I have now got a semi decent touch controller


----------



## MauroPantin

jononotbono said:


> *Intense 11 months


"Take a vacation! Lake OSC programming is the best place to lose track of time. Immerse yourself in our CSS beaches, take a tour of our Javascript peaks and our MIDI valleys. Or take a stroll next to our world-famous "One-More-Button" River. 

Lake OSC: A place that grabs a hold."


----------



## Sub3OneDay

MauroPantin said:


> Or take a stroll next to our world-famous "One-More-Button" River.


😆😆😆


----------



## jononotbono

Sub3OneDay said:


> 😆😆😆


Don’t know why you find this funny. When you discover Canvas Widgets… well… I now call them Button not Buttons (BnBs) 😂


----------



## Loïc D

Aah Canvas Widgets… a continent, an archipelago,…


----------



## Grizzlymv

little update, nowhere close to the super advanced versions you guys are talking about, but a modest attempt ahah. this time with configurable CC faders. Unfortunatley, haven't found yet how to save the config and load it so you'll have to set your CC values on the loading of the screen, but then it works. There's also an option for an XY panel which you configure your midi CCs again. That allow for greater flexibility. See the screenshot below and download file

That being said, anyone found how to have Cubase returning the values of the CC to OSC (if that's possible at all given it's midi?), like a motorized fader would behave?


----------



## Sub3OneDay

Grizzlymv said:


> Unfortunatley, haven't found yet how to save the config


If you set a variable to buffer the cc configuration into your custom module you could use a node.js node to save all the variables to a text file or xml and then drag them back in when you reload the session. This is how I pull all the expression maps into my articulation buttons so that I don’t have to keep creating or rewriting an articulation object every time I create a new expression map.

It’s quite efficient.


----------



## Sub3OneDay

Grizzlymv said:


> anyone found how to have Cubase returning the values of the CC to OSC (if that's possible at all given it's midi?), like a motorized fader would behave?


I can do it with quick controllers so if I move the QC in cubase it updates the faders in OSC. Not sure about cc values in general though but will check tomorrow when back at my machine and see if I can modify the method I’ve used.


----------



## Sub3OneDay

jononotbono said:


> Don’t know why you find this funny. When you discover Canvas Widgets… well… I now call them Button not Buttons (BnBs) 😂


I’m consciously not opening canvas widgets as a holiday destination in my studio currently as I’d like to write some music this decade.


----------



## Grizzlymv

Sub3OneDay said:


> If you set a variable to buffer the cc configuration into your custom module you could use a node.js node to save all the variables to a text file or xml and then drag them back in when you reload the session. This is how I pull all the expression maps into my articulation buttons so that I don’t have to keep creating or rewriting an articulation object every time I create a new expression map.
> 
> It’s quite efficient.


I'll have to read more on that as I haven't explored the custom modules yet, neither the read/save file operations. Wasn't aware that was possible. Thanks for the info!


----------



## Grizzlymv

Sub3OneDay said:


> I can do it with quick controllers so if I move the QC in cubase it updates the faders in OSC. Not sure about cc values in general though but will check tomorrow when back at my machine and see if I can modify the method I’ve used.


If you get a chance to detail your setup that'd be great. I did experiment a bit on that front, but nothing reacts on the OSC side. Are you using the same ports (in and out) than your Gerenic Remote or using a different? In my setup, I use toPCStudio for any OSC buttons for the Generic Remote, and use toPCStudioCC for the regular MIDI CC. For the record, I also tried with VST Quick Control instead of Track Quick Control (as shown below), but same result. I guess it's a small thing I'm missing, but just can't put the finger on it. 
Any hint there would be greatly appreciated


----------



## Grizzlymv

Alright so little update regarding the Midi CC faders. It seems that Midi CC are not designed to be used on motorized controllers. And then on top of it, with Instrument tracks, you don't get access to MIDI controls for some reason, which you get if your track is MIDI only. I did manage to get somewhere with the Quickcontrols, but then it end up recording into its own automation lane which prevent you to see it in the editor, which I'm not a fan of. So I abandonned the idea. 

Then, regarding the Mixer Volume (or VST Mixer volume) fader, the issues is that when you move from one track to another, Cubase send back a unit less then the "hardware / OSC" value is. So, the moment you set Cubase to both, Receive AND Transmit, everytime it will transmit, it's gonna be the value -1. so if was set to 100, then gets to 99, next time to select the track, will go to 98 and so on. 

Curiously, if you just set it to Transmit, no issue. If you just set it to Receive, no issue. It's really when both are on, R,T,, (Receive, Transmit). And that is happening even if no object in OSC are submitting to that address. For instance, in my generic remote (which is binded to toPCStudio both In and Out), I have the Mixer Volume on Selected to Midi 4, channel 108, Max value of 127. I then added a Text field, to show the value received from Cubase. that text field has address to /Control, preArgs [4,108] target: midi:toPCStudio. I can see the value decreasing every time I select the track. 

So I thought the text field would behave incorrectly and deleted it. but still same issue. so I pushed it to the extreme, and closed by OSC session. Surprise!... same thing. So it's really a Cubase thing. 

Then I found someone somewhere who posted on the Steinberg forum that Cubase does indeed send a value less to the hardware than itself. https://forums.steinberg.net/t/generic-remote-transmit-and-pickup-flags-difference/665355/9



> There is alway *1 unit less* in Cubase, then it is on the HW device, if you *control Volume* parameter (it’s visible especially if you control the Volume of the MIDI track). So if the HW device set 100, there is 99 in Cubase. The reason for this is, the Volume interprets 0 as *Off*, not as 0.
> 0(HW) = Off(Cubase)
> 1(HW) = 0(Cubase)
> …
> 126(HW) = 125(Cubase)
> 127(HW) = 127(Cubase)
> It doesn’t matter if you Receive and Transmit the value, or if you Receive it. Always 1 unit less.



So unless someone found an ingenious way to get around this, which doesn't require adding something to the track (like an insert or transformer or something attached to the track itself), I think the volume fader will remain a no go for me in OSC until Cubase fix that. 

I thought I'd share that for those who use both Cubase and Open Stage Control and wished to use the Mixer Volume from Cubase with a fader in OSC. I've seen several post about large template showing the mix console and such, just double check that issue before spending too much time in this like I did.  

Cheers


----------



## Grizzlymv

I wonder how this will affect / work with Open Stage Control...seems like massive changes in Cubase 12 in that regard


----------



## Manaberry

Gotta stay on 11 for now. Too scared to upgrade and I don't think those new features will change drastically how I compose. OSC however, was a major improvement.


----------



## Grizzlymv

Manaberry said:


> Gotta stay on 11 for now. Too scared to upgrade and I don't think those new features will change drastically how I compose. OSC however, was a major improvement.


I'll be able to let you know soon. I'm almost done doing the mapping. I can say that it's MUCH more easier to do now from the mapping perspective. But it get time to get used to the new way of doing it. I'll try to document it here later.


----------



## Grizzlymv

So. I spent quite a bit of time trying to make it works but this new Midi Remote is really different than the Generic Remote. It is much more flexible and powerful, but that also means you have to work it out a little more. I've been able to succesfully map all the features. However, for some reasons Cubase is constantly sending back messages to Open Stage Control. The same mapping in Generic Remote doesn't. I did experiment with just mapping the transport (Rewind, Forward, Cycle, stop, start, record) and just that is reproducing the issue. Not sure what's wrong but will clearly require more investigation.

That being said, I discovered that the Generic Remote is still present in Cubase 12. You get a nagging screen saying that it will be discontinued, but it still does work like in previous versions, so you can still safely use Cubase 12 with your OSC and Generic Remote for now. But they may drop it in 12.5 or 13, god knows. In the Steinberg forums, they mentioned they will keep supporting it until they are 100% sure the new Midi Remote can compensate for the Generic Remote. So should be safe there.


----------



## Sub3OneDay

Grizzlymv said:


> You get a nagging screen saying that it will be discontinued, but it still does work like in previous versions, so you can still safely use Cubase 12 with your OSC and Generic Remote for now. But they may drop it in 12.5 or 13, god knows.


This is the worry for me - I’ve spent ages building up a lot of GR lines - with literally hundreds of commands and macros. Would be awful if I lost all this.


----------



## jononotbono

Sub3OneDay said:


> This is the worry for me - I’ve spent ages building up a lot of GR lines - with literally hundreds of commands and macros. Would be awful if I lost all this.


I just tried Cubase 12. 

Everything is fine.

Cubase 12 (from 12 onwards) is abandoning Cubase Generic Remotes but they are still there. You can still use GRs. I would, if it was me, start thinking about changing over to the new MIDI Remote that has been implemented. But don't lose sleep. All your shit still works 

Sweet dreams


----------



## aftrshok99

I took my Osc layout that I was using on cubase 11 with the generic remote I spent so much time setting up. I thought I’d try using the new midi remote in cubase 12. I recreated one page of my template using the new midi remote. One problem I kept having was the stop button would flash quickly and I couldn’t change any setting on any other buttons. Not sure what the problem is or what is causing it. It’s a little frustrating. Any ideas why it does that.


----------



## mmoalem

Hi all - not sure if I am in the right thread for this - if you think this should go somewhere else just let me know...
Anyway, I am trying to build an osc inteface for ableton but the question I have is regarding OSC rather than ableton. 
I am trying to pull track names of ableton. I use a remote script called LiveOSC2 to do so. I got as far as creating a text widget and pointing it to the right osc address for LiveOSC and it half works. when I rename a track in ableton it 'pushes' the track name to the text widget which updates acordingly but what I would like to have is OSC pulling this info of ableton - maybe at fixed intervals or even having a button that sends a request for the tracks names and populate the text widgets... I assume i might need some kind of script but I am a complete noobe in regard to coding so any help will be appreciated...


----------



## Drjay

mmoalem said:


> Hi all - not sure if I am in the right thread for this - if you think this should go somewhere else just let me know...
> Anyway, I am trying to build an osc inteface for ableton but the question I have is regarding OSC rather than ableton.
> I am trying to pull track names of ableton. I use a remote script called LiveOSC2 to do so. I got as far as creating a text widget and pointing it to the right osc address for LiveOSC and it half works. when I rename a track in ableton it 'pushes' the track name to the text widget which updates acordingly but what I would like to have is OSC pulling this info of ableton - maybe at fixed intervals or even having a button that sends a request for the tracks names and populate the text widgets... I assume i might need some kind of script but I am a complete noobe in regard to coding so any help will be appreciated...


I do not want to discourage you, but without coding knowledge it will be very hard. Especially this python lib uses pretty Python specific coding style (I personally did not understand everything the do. E.g. decorators and what not). 
The lib contains getter and setters for the track names, you can call from OSC. You have to look into the code at github. Imo best would be to send out all attributes from python once a project is loaded and then rely on the listeners. Sorry, I could not help more, but this stuff is not easy. 
I based my Ableton remote control on this library: https://github.com/ideoforms/AbletonOSC
I found it easier to understand.


----------



## mmoalem

Drjay said:


> I do not want to discourage you, but without coding knowledge it will be very hard. Especially this python lib uses pretty Python specific coding style (I personally did not understand everything the do. E.g. decorators and what not).
> The lib contains getter and setters for the track names, you can call from OSC. You have to look into the code at github. Imo best would be to send out all attributes from python once a project is loaded and then rely on the listeners. Sorry, I could not help more, but this stuff is not easy.
> I based my Ableton remote control on this library: https://github.com/ideoforms/AbletonOSC
> I found it easier to understand.


Hi and thank you for the reply. Its interesting you point to the liveosc script as the solution - I have been thinking that as it works when pusing changes to track names into OSC that the solution will be in OSC active pulling. I actually got now an answer from jean-emmanuel on the OSC forum with a suggested solution so will try it first.
I have not heard of AbletonOSC script before so thank you for that - it does seem to offer some extra features but also seem to lack some... as it stands I am using LiveOSC2, Clyphx, ahk and direct midi in paralel as it seems that each give me different access to ableton so might as well add abletonOSC to the salad...


----------



## Drjay

mmoalem said:


> Hi and thank you for the reply. Its interesting you point to the liveosc script as the solution - I have been thinking that as it works when pusing changes to track names into OSC that the solution will be in OSC active pulling. I actually got now an answer from jean-emmanuel on the OSC forum with a suggested solution so will try it first.
> I have not heard of AbletonOSC script before so thank you for that - it does seem to offer some extra features but also seem to lack some... as it stands I am using LiveOSC2, Clyphx, ahk and direct midi in paralel as it seems that each give me different access to ableton so might as well add abletonOSC to the salad...


Yes, but you need to know the osc address of the track you are requesting. Since track numbers change when you e.g. add a track, this is pretty errorprone. Therefore the mechanism is different.
In the Python script you implement a listener function in the song, which listens to a change of the tracks in the song (Live.Song.Song.add_tracks_listener()) in this function you go through all the tracks and send out all attributes you want to get updated in OSC. In the same function you call other functions which in turn add listeners to all the track attributes in order to be notified in case of a change (e.g. mute, solo, name etc.). What makes things a little bit complicated is the fact, you need to keep track of all the attached listener functions yourself. Otherwise you might end up with several functions listening to the same attribute and sending the data several times.
Unfortunately AbletonOSC is lacking in the listener department. You can add and remove listeners via OSC, which is great, but the way it is implemented it is not keeping track of them. You would need to implement it on the OSC side. 
Long story short: instead of constantly polling Ableton from OSC, the idea is to get notified from Ableton via the lsiteners.
I find the AbletonOSC script easier to read, than liceOSC2. Simple setter and getter functions can be easily added via copy paste.
https://structure-void.com/PythonLiveAPI_documentation/Live11.0.xml gives a complete overview of what can be done with the LiveAPI


----------



## mmoalem

Drjay said:


> Yes, but you need to know the osc address of the track you are requesting. Since track numbers change when you e.g. add a track, this is pretty errorprone. Therefore the mechanism is different.
> In the Python script you implement a listener function in the song, which listens to a change of the tracks in the song (Live.Song.Song.add_tracks_listener()) in this function you go through all the tracks and send out all attributes you want to get updated in OSC. In the same function you call other functions which in turn add listeners to all the track attributes in order to be notified in case of a change (e.g. mute, solo, name etc.). What makes things a little bit complicated is the fact, you need to keep track of all the attached listener functions yourself. Otherwise you might end up with several functions listening to the same attribute and sending the data several times.
> Unfortunately AbletonOSC is lacking in the listener department. You can add and remove listeners via OSC, which is great, but the way it is implemented it is not keeping track of them. You would need to implement it on the OSC side.
> Long story short: instead of constantly polling Ableton from OSC, the idea is to get notified from Ableton via the lsiteners.
> I find the AbletonOSC script easier to read, than liceOSC2. Simple setter and getter functions can be easily added via copy paste.
> https://structure-void.com/PythonLiveAPI_documentation/Live11.0.xml gives a complete overview of what can be done with the LiveAPI


OK, I got it working well enough for my needs after following the advice of jean-emmanuel. I asked about pulling at set internals and he suggested a script line at onCreate
setInterval(function(){ send('127.0.0.1:5555', '/address') }, 1000)
following on liveOSC2 notes I ended up with
setInterval(function(){ send('127.0.0.1:9001', '/live/track/name'), (#track-number) }, 1000)
with that I got the track names pulled every second but it caused the text widget to flash every time time it pulled the data which was very annoying. I realised than that I only need to have the track names occasionally so I created a tap button adding a script to onValue with a list like this:

send('127.0.0.1:9001', '/live/track/name', 0);
send('127.0.0.1:9001', '/live/track/name', 1);
send('127.0.0.1:9001', '/live/track/name', 2);
send('127.0.0.1:9001', '/live/track/name', 3);
send('127.0.0.1:9001', '/live/track/name', 4)..... etc....

so when I press the button all the tracks names get updated....

probably not the most elegant solution but it works for my needs at the moment - I basically need the tracks names when mixing with the touchscreen and that does it.

I have looked into AbletonOSC but couldn't get it to show in my remote scripts - seems like others had the same issue when using it on windows. Or it could be that it doesn't work with Live 10.


----------



## Drjay

mmoalem said:


> OK, I got it working well enough for my needs after following the advice of jean-emmanuel. I asked about pulling at set internals and he suggested a script line at onCreate
> setInterval(function(){ send('127.0.0.1:5555', '/address') }, 1000)
> following on liveOSC2 notes I ended up with
> setInterval(function(){ send('127.0.0.1:9001', '/live/track/name'), (#track-number) }, 1000)
> with that I got the track names pulled every second but it caused the text widget to flash every time time it pulled the data which was very annoying. I realised than that I only need to have the track names occasionally so I created a tap button adding a script to onValue with a list like this:
> 
> send('127.0.0.1:9001', '/live/track/name', 0);
> send('127.0.0.1:9001', '/live/track/name', 1);
> send('127.0.0.1:9001', '/live/track/name', 2);
> send('127.0.0.1:9001', '/live/track/name', 3);
> send('127.0.0.1:9001', '/live/track/name', 4)..... etc....
> 
> so when I press the button all the tracks names get updated....
> 
> probably not the most elegant solution but it works for my needs at the moment - I basically need the tracks names when mixing with the touchscreen and that does it.
> 
> I have looked into AbletonOSC but couldn't get it to show in my remote scripts - seems like others had the same issue when using it on windows. Or it could be that it doesn't work with Live 10.


If it works for you, great 
Yes, AbletonOSC is for Live 11.


----------



## Sub3OneDay

jononotbono said:


> I just tried Cubase 12.
> 
> Everything is fine.


Phew… thanks!


----------



## topaz

Guys, don’t forget to blink and use decent eye drops. Dry eye syndrome is a total pig. 😎


----------



## Simon Poole

From the perspective of someone starting from scratch it seems like the MIDI Remote is a better place to start, given the potential of Generic Remote redundancy. Has anyone noticed anything that the MIDI Remote can't manage where the GR can?


----------



## Grizzlymv

Simon Poole said:


> From the perspective of someone starting from scratch it seems like the MIDI Remote is a better place to start given the potential of Generic Remote redundancy. Has anyone noticed anything that the MIDI Remote can't manage where the GR can?


Personally, so far I still didn't manage to have the MIDI Remote fully working with my template. Works flawlessly with my GR setup. There's some behavior regarding some commands that doesn't behave the same way under MIDI Remote and cause a lot of issues. For one, they are triggering back a tons of MIDI messages back to the OSC and gets everything confused. Most of the issues seems to come from toggle buttons (Start, Stop, Mute, Record, etc). So I went back to my GR setup for now. But maybe you'll have more luck. 

That being said, if you start with it, I'd recommend to start small, thoroughly test it and ensure the messages are sent correctly back and forth, and then slowly expand as you validate. This would save you to spend too many hours into this if it doesn't work from the get go. My 2 cents on this.  

Let us know how it goes.


----------



## jononotbono

Simon Poole said:


> From the perspective of someone starting from scratch it seems like the MIDI Remote is a better place to start, given the potential of Generic Remote redundancy. Has anyone noticed anything that the MIDI Remote can't manage where the GR can?


If you are starting from scratch, then don't worry about a thing man. Go for it.


----------



## jononotbono

Grizzlymv said:


> Personally, so far I still didn't manage to have the MIDI Remote fully working with my template.


Its not "personally". Its universally agreed upon (with people paying attention). The Midi Remote isn't yet complete.


Grizzlymv said:


> Works flawlessly with my GR setup.


Exactly. That's why we're just sticking with that.

Why do people rush out for the latest shiny new thing? I guess we're only human. We must. 

Anyone with sense, will just wait and continue to use the best version of Cubase ever released. C13. Sorry, I meant C11


----------



## Nicholas

Grizzlymv said:


> Personally, so far I still didn't manage to have the MIDI Remote fully working with my template. Works flawlessly with my GR setup. There's some behavior regarding some commands that doesn't behave the same way under MIDI Remote and cause a lot of issues. For one, they are triggering back a tons of MIDI messages back to the OSC and gets everything confused. Most of the issues seems to come from toggle buttons (Start, Stop, Mute, Record, etc). So I went back to my GR setup for now. But maybe you'll have more luck.
> 
> That being said, if you start with it, I'd recommend to start small, thoroughly test it and ensure the messages are sent correctly back and forth, and then slowly expand as you validate. This would save you to spend too many hours into this if it doesn't work from the get go. My 2 cents on this.
> 
> Let us know how it goes.


Toggle buttons seem to need an on/off message with the corresponding button state separated from the actual touch. It works with our touch screen - but I had to modify the button so it toggles via the returned MIDI value as opposed to it being a "direct toggle".


----------



## Ronny D. Ana

Nicholas said:


> Toggle buttons seem to need an on/off message with the corresponding button state separated from the actual touch. It works with our touch screen - but I had to modify the button so it toggles via the returned MIDI value as opposed to it being a "direct toggle".


Could you post an example? Start/Stop/Record and Read/Write (Automation) would be good excamples I think?


----------



## Nicholas

Ronny D. Ana said:


> Could you post an example? Start/Stop/Record and Read/Write (Automation) would be good excamples I think?


I don't know how to set this up in Open Stage Control specifically, but that's how it works for us. As you can see, all Toggles work bi-directional. All toggles (incl Rec Arm, Monitor, Play, Record, Auto R/W) perform this way. These toggles are all set to different Midi CCs, but each mapped to the same function in the MIDI Remote.

The state of the toggle button is set via the returned MIDI Values from Cubase, so it's always in sync


----------



## Grizzlymv

Nicholas said:


> Toggle buttons seem to need an on/off message with the corresponding button state separated from the actual touch. It works with our touch screen - but I had to modify the button so it toggles via the returned MIDI value as opposed to it being a "direct toggle".


Gonna definitely look at that one. Didn't think of that. Thanks for sharing this.


----------



## Grizzlymv

jononotbono said:


> Its not "personally". Its universally agreed upon (with people paying attention). The Midi Remote isn't yet complete.
> 
> Exactly. That's why we're just sticking with that.
> 
> Why do people rush out for the latest shiny new thing? I guess we're only human. We must.
> 
> Anyone with sense, will just wait and continue to use the best version of Cubase ever released. C13. Sorry, I meant C11


Well.... Because why not? Ahahah. Nah seriously, i was hoping this new midi remote would fix some limitations we have with gr, but the shortcomings still outweigh the benefits for me. But maybe with what Nicholas mentioned above, if that work la out, then maybe we can have a winner. .


----------



## robgb

Okay, this is weird. Open Stage Control has suddenly stopped working for me in Reaper. I use it mostly for an X/Y pad that sends CC1 and CC11. I've changed nothing (with one exception). My tablet still connects to the server and transmits info, but I get no response from Reaper. I've rebooted, etc., made sure the OSC port is enabled, checked Reaper's midi device preferences and not a single thing has changed except that Reaper does not respond to it and shows no indication that the midi is transmitting. Commands from my keyboard are transmitted just fine.

The only change I made was updating Reaper. But I've gone back to an older version and still no joy. I tried a portable version and no joy there either. One minute it was working fine, then another minute it disconnected from the wireless and when I reconnected it wouldn't work. Very frustrating.


----------



## Manaberry

This is indeed very odd. Are you working on Windows?


----------



## robgb

Manaberry said:


> This is indeed very odd. Are you working on Windows?


Mac.


----------



## justthere

Is it necessary to define input devices in Reaper? Could be that the update over-wrote some preferences.


----------



## robgb

justthere said:


> Is it necessary to define input devices in Reaper? Could be that the update over-wrote some preferences.


Maybe. I'm not sure. I switched to TouchOSC combined with OSCulator and they work just fine. No idea what's going on.


----------



## Manaberry

I have no idea, really. Have you asked Jean-Emmanuel? He may have encountered this kind of behavior before.

Here is the community board: https://openstagecontrol.discourse.group


----------



## echo7

I got a silly question involving OSC and Cubase that I'd like some guidance on. I've only been using OSC to make basic controls like faders / buttons to control midi CC messages and values.

I haven't really used OSC to make "shortcut" or "command" buttons with the Cubase Generic Remote. What is the best / most efficient way to set "address" and "preArg" etc. in OSC for tap buttons that will only be used for Cubase commands?

And what is the best way to set up the Generic Remote to receive midi >> command for a large amount of simple tap buttons.

ex. A button for "add marker" What's the most efficient way to set this up in OSC and Generic remote. Knowing that I might have a grid of 100+buttons.

Perhaps I am doing it wrong, but if I set a button in OSC to /control [2,1]. This still sends channel 2 CC1 value 1 (button value) along with whatever "command" I set in generic remote.

So let's say the command is "retrospective record", this does what I want, but also adds data in the cc1 lane.

How can I avoid this?

Cheers


----------



## blaggins

I might be misunderstanding the question but have you thought about removing the virtual MIDI port that you use from OSC -> Cubase from the "All MIDI" group? That way the control messages you send would be able to trigger generic remote functions but wouldn't get recorded into your tracks.

You could even use two ports, one to send just generic remote control messages (not in 'All MIDI') and one to send MIDI controls that you do want to route to your tracks (faders, articulation selections, etc.)


----------



## echo7

Yes I had forgotten to do that, thank you. That prevents the data from getting brought in.

So, what's the best way to map 100 buttons?

Would it just be:

address: /control
PreArgs: [2,1] [2,2] [2,3] [2,4] >> [2,127] (one for each button)
and if you want 100 more buttons just same thing but channel 3?

Is there a way to have the generic remote read values of a CC? So a button could send [2, 1, 1] for example? Channel 2 CC1 value 1

Appreciate the clarification and responses


----------



## echo7

Anyone have a suggestion for the best AFFORDABLE 13 inch or greater touchscreen to use with OSC?

To me there are 2 options:

1. a windows tablet. (any recommendations < $500?)

2. a small pc $300-$400 with a multitouch touchscreen monitor or portable monitor ($300-$500)

Here's the thing, whichever solution needs to have pen support or windows ink...because I'd like to be able to use the touch monitor/tablet with StaffPad in addition to the main use to be a server/controller for OSC.

So, to me the tablet seems like the ideal solution because that makes staffpad mobile. Any recommendations? The cheapest surface is still pricey. Is there any ideal device that utilizes both multitouch and windows ink that's affordable? I'm not really wanting to spend more than $500 at the moment...even that's high for a controller.

I'd rather have a larger screen size, but seems most windows 10/11 tablets are only 13-15 inch and way more pricey for the larger models.

Cheers


----------



## GtrJazz

echo7 said:


> Anyone have a suggestion for the best AFFORDABLE 13 inch or greater touchscreen to use with OSC?
> 
> To me there are 2 options:
> 
> 1. a windows tablet. (any recommendations < $500?)
> 
> 2. a small pc $300-$400 with a multitouch touchscreen monitor or portable monitor ($300-$500)
> 
> Here's the thing, whichever solution needs to have pen support or windows ink...because I'd like to be able to use the touch monitor/tablet with StaffPad in addition to the main use to be a server/controller for OSC.
> 
> So, to me the tablet seems like the ideal solution because that makes staffpad mobile. Any recommendations? The cheapest surface is still pricey. Is there any ideal device that utilizes both multitouch and windows ink that's affordable? I'm not really wanting to spend more than $500 at the moment...even that's high for a controller.
> 
> I'd rather have a larger screen size, but seems most windows 10/11 tablets are only 13-15 inch and way more pricey for the larger models.
> 
> Cheers


I had a spare 27” monitor and bought a touchscreen overlay. It has 10 point touch and works like a charm. Doesn’t look as sleek as a real touch monitor, but hard to beat a 27”


----------



## BGaussling

Grizzlymv said:


> little update, nowhere close to the super advanced versions you guys are talking about, but a modest attempt ahah. this time with configurable CC faders. Unfortunatley, haven't found yet how to save the config and load it so you'll have to set your CC values on the loading of the screen, but then it works. There's also an option for an XY panel which you configure your midi CCs again. That allow for greater flexibility. See the screenshot below and download file
> 
> That being said, anyone found how to have Cubase returning the values of the CC to OSC (if that's possible at all given it's midi?), like a motorized fader would behave?



For the bidirectionality of CC controls between Cubase and your controller (I'm using lemur, but the same applies for OSC) I'm using a midi send on each track that I activate only for the current track via generic remote every time I go to write mode. On top of that I have a dedicated button to turn on that send. Once write mode is disabled or I switch tracks I have a script deactivate that send via generic remote. Pretty simple solution, works well for me.


----------



## Jdiggity1

echo7 said:


> Anyone have a suggestion for the best AFFORDABLE 13 inch or greater touchscreen to use with OSC?
> 
> To me there are 2 options:
> 
> 1. a windows tablet. (any recommendations < $500?)
> 
> 2. a small pc $300-$400 with a multitouch touchscreen monitor or portable monitor ($300-$500)
> 
> Here's the thing, whichever solution needs to have pen support or windows ink...because I'd like to be able to use the touch monitor/tablet with StaffPad in addition to the main use to be a server/controller for OSC.
> 
> So, to me the tablet seems like the ideal solution because that makes staffpad mobile. Any recommendations? The cheapest surface is still pricey. Is there any ideal device that utilizes both multitouch and windows ink that's affordable? I'm not really wanting to spend more than $500 at the moment...even that's high for a controller.
> 
> I'd rather have a larger screen size, but seems most windows 10/11 tablets are only 13-15 inch and way more pricey for the larger models.
> 
> Cheers


You can regularly find 2nd hand Microsoft Surface Pro 4 or 5 for ~$400.
I have one that sits on my desk as my digital notepad/OSC surface, and occasionally use Staffpad with it, too.
Note that the model 5 was the first to use a "fanless" design, so it stays near-silent. IMO these devices are a bargain at that price, and plenty capable of what you want one for.


----------



## GtrJazz

Just installed OSC and really digging some of the templates people provided here. 

I would like to create some buttons and assign them to key commands I have setup in Cubase. Do I need to install midikey2key for this?


----------



## Sub3OneDay

echo7 said:


> I got a silly question involving OSC and Cubase that I'd like some guidance on. I've only been using OSC to make basic controls like faders / buttons to control midi CC messages and values.
> 
> I haven't really used OSC to make "shortcut" or "command" buttons with the Cubase Generic Remote. What is the best / most efficient way to set "address" and "preArg" etc. in OSC for tap buttons that will only be used for Cubase commands?
> 
> And what is the best way to set up the Generic Remote to receive midi >> command for a large amount of simple tap buttons.
> 
> ex. A button for "add marker" What's the most efficient way to set this up in OSC and Generic remote. Knowing that I might have a grid of 100+buttons.
> 
> Perhaps I am doing it wrong, but if I set a button in OSC to /control [2,1]. This still sends channel 2 CC1 value 1 (button value) along with whatever "command" I set in generic remote.
> 
> So let's say the command is "retrospective record", this does what I want, but also adds data in the cc1 lane.
> 
> How can I avoid this?
> 
> Cheers


Just create a new virtual midi port, and address all your buttons to that. Then use a generic remote and set the midi port in to that virtual port. Doesn’t need to be any more complicated than that.


----------



## justthere

Jdiggity1 said:


> You can regularly find 2nd hand Microsoft Surface Pro 4 or 5 for ~$400.
> I have one that sits on my desk as my digital notepad/OSC surface, and occasionally use Staffpad with it, too.
> Note that the model 5 was the first to use a "fanless" design, so it stays near-silent. IMO these devices are a bargain at that price, and plenty capable of what you want one for.


What is the screen size? I'm doubting that I want something much bigger than 15"-17" because I don't want to be scanning something huge or reaching all over it. I know there are people who use much larger screens - but I like less in front of me rather than more and don't want to have to fully extend my arm for a button. Sounds silly maybe but if you are cranking out score on a deadline, repetitive motion kills. ATM I have two iPads, a 12.9" and a 9", and the smaller one just does articulation switching while the larger one does sequencer remote stuff, and at the moment (until I get better at programming Open Stage Control) the dual screen thing works pretty well for me. They are close at hand.


----------



## StephanS90

Hi folks, 

If anyone is interested in a touch controller for Dorico, I am offering mine now. It is for Dorico 3.5 and Dorico 4. You only need Bome Midi Translator the rest is Open Stage Control. 

https://stephanschelens.de/doricotouchscreencontroller

I hope it helps someone to write beautiful music.


----------



## Henk

Cubase 12's midi mapping, connected to an external controller, and able to control the logic editor, getting better and better


----------



## Rsound2000

Drjay said:


> Your welcome (btw. thanks a lot for your Cubase logic editor scripts, they saved me a lot of work  ). While we are at it, I attached an example of nested tabs controlled via switches. Hope it's self explaining.


Thank you very much. Such help for beginners is found far too rarely. Unfortunately, the documentation is not suitable for getting started. And most of the osc tutorials are in my opinion already on a much too high level.


----------



## Dr Bensmir

Hey thanks. I have been following your tutorial, as a complete beginner. 
I just did my first button, to send a midi note (c#-2). But I have must be doing something wrong because Cubase is not recieving anything ? Anyone can guide me on how to set things up in cubase settings ?


----------



## Dr Bensmir

I am almost there
I connected my laptop to my desktop via ethernet cable
I setup a static ipv4 for both my laptop and my desktop
I connected them with rtpmidi, currently I have 1 to 2 ms latency, so the link is working

I installed Open stage control But I have no idea if my desktop actually recieve mid data from my laptop. I have only tried to setup one button. One button to send midi note C#-2 to trigger a keyswitch

In cubase settings, in the Remotes devices (legacy) I added my virtual port created with rtp midi in the MIDI input. But I have no idea how to setup the control name in the chart. How do I send a midi note ON C#-2 ? I tried to click learn and hit the button on my laptop, cubase isn’t recieving anything anyway


----------



## Dr Bensmir

Hooora ! The connection now work between cubase and OSC on my convertible laptop ! I forgot to fill in the midi:inport,outport in OSC after restarting OSC multiple times

Now I just have one more question, what am I suppose to fill in here in this menu in cubase ?





Am I suppose to fill in 2 lines for each of my keyswitches ? (One for note ON and for note OFF and learn them one by one by pressing the buttons in OSC ?)


----------



## Manaberry

The first box area is used to add your MIDI incoming signal and to give it a name (mandatory to have a unique name for each MIDI input signal), the box area below is used to assign an action to that MIDI incoming signal.
It takes time to configure, yep.


----------



## Dr Bensmir

So far my first button sending a key switch seems to work without Doing that manual linking in cubase settings, that’s weird


----------



## Dr Bensmir

I think I am getting the hang of it
This is insane, I going to spend quite some time there, really good software


----------



## Tom Cox

Hi, i'm setting my first steps in OSC.

before starting on my main template i'm figuring out some basic stuff
i've done a test setup in OSC trying to make a volume fader and a solo button work in cubase 12.

now, I have some problems with this.

let's begin with the solo button for the selected track in cubase (so follows track): i've set up a button in toggle mode, the button does work in cubase, only when i try to solo a track with my mouse it instantly turns of the solo action ( i think it's getting a solo off message some how), see the video below.
also an other problem (not shown in the video): when i turn on solo on track A then select track B (wich is not in solo) and then return to track A, Track A unsolos automaticly. to me i seems OSC "forgets" that track A is solo somehow.


View attachment Screen Recording - Solo Button.mp4



View attachment Screen Recording Solo Button Track change.mp4


Next the fader: I want a fader that follows track selection and also sents midi back from cubase to OSC so that when i select a new track i always get an accurate display from the fader position on my touchscreen (like a motorized fader on a hardware console)

i set up my fader with succes in cubase but is doesn't send data back to OSC so when i mover the fader with my mouse in cubase it doesn't move in OSC.

In new midi remote interface in cubase 12 but i don't see an option for transmit, but because my solo button follows trackselection by default i don't get wy the fader doesn't.


View attachment Screen Recording - Volume Fader.mp4


any help would be greatly appriciated. i know these are probably very basic questions, but I really don't know anything of coding/scriptin/javascript. and i have no idea where to start here

Thanks in Advance


----------



## blaggins

@Tom Cox have you checked out the community support group of Open Stage Control itself? https://openstagecontrol.discourse.group/. While there are a few folks on VI-C who use it, you'll run into tons more users over there, plus the creator Jean Emmanuel is often answering questions himself.


----------



## Tom Cox

tpoots said:


> @Tom Cox have you checked out the community support group of Open Stage Control itself? https://openstagecontrol.discourse.group/. While there are a few folks on VI-C who use it, you'll run into tons more users over there, plus the creator Jean Emmanuel is often answering questions himself.


No, haven't done that yet, will do this evening.

However I think I'm having a midi feedback problem. In loopmidi I only made one connection (OSC) that I use for in and outputs. I think I need to make a OSCin and OSCout.

Could this explane my problems?


----------



## blaggins

Yeah it certainly could. Think of the virtual midi connections like actual cables, they should generally be unidirectional, and connecting only two things together, otherwise you'll be duplicating midi events. 

Another issue I've run into personally was cubase echoing input from OSC back to the output to OSC, which was causing confusing problems for me. I ended up splitting the purely OSC control type events from the general midi type events into seperate virtual midi devices, so that I could exclude one from the all midi devices flag. Basically this is so things like key switches and CC information can get sent to the instrument tracks, but probing signals like I use to identify the selected track are excluded. I don't know if that makes sense, you might be using it in a very different way than I am. These are all generalizations though, I'm not actually sure about how to send the fader information to OSC when you select track. I assume there is probably a way though since in my setup I send information from a midi insert, which feels like a similar situation.


----------



## Tom Cox

tpoots said:


> Yeah it certainly could. Think of the virtual midi connections like actual cables, they should generally be unidirectional, and connecting only two things together, otherwise you'll be duplicating midi events.
> 
> Another issue I've run into personally was cubase echoing input from OSC back to the output to OSC, which was causing confusing problems for me. I ended up splitting the purely OSC control type events from the general midi type events into seperate virtual midi devices, so that I could exclude one from the all midi devices flag. Basically this is so things like key switches and CC information can get sent to the instrument tracks, but probing signals like I use to identify the selected track are excluded. I don't know if that makes sense, you might be using it in a very different way than I am. These are all generalizations though, I'm not actually sure about how to send the fader information to OSC when you select track. I assume there is probably a way though since in my setup I send information from a midi insert, which feels like a similar situation.


Thanks for your reply, I will look into it further.


----------



## GtrJazz

anyone know how to add timecode display to Open stage control?


----------



## Loïc D

GtrJazz said:


> anyone know how to add timecode display to Open stage control?


Your DAW has to send this information by OSC, Sysex message or whatever.
Then just use a simple text field to display the value.


----------



## GtrJazz

Loïc D said:


> Your DAW has to send this information by OSC, Sysex message or whatever.
> Then just use a simple text field to display the value.


I tried doing that and even setup a separate midiloop name and wasn’t able to get it working.


----------



## Loïc D

What DAW are you using?


----------



## GtrJazz

Loïc D said:


> What DAW are you using?


I’m on Nuendo 12. Figured it out. Now I gotta figure out the dynamic articulations and tap tempo that will adjust the tempo inside Nuendo.


----------



## Dr Bensmir

Can someone help me setup a fader to control "selected channel volume" fader (I work with buttons just fine at the moment)


----------



## Manaberry

Dr Bensmir said:


> Can someone help me setup a fader to control "selected channel volume" fader (I work with buttons just fine at the moment)


What DAW are you using?


----------



## Dr Bensmir

Manaberry said:


> What DAW are you using?


Cubase 12


----------



## GtrJazz

Has anyone here used the midi kinetics recall plugin for instrument tracks in Cubase along with Openstage control?


----------



## Sub3OneDay

GtrJazz said:


> Has anyone here used the midi kinetics recall plugin for instrument tracks in Cubase along with Openstage control?


 I tried but could never get it to work. I’ve now implemented a recall system using Mackie Control protocol which works on any type of cubase track. Details on a massive thread over at the OSC forum.
Will do a tutorial thread at some point but can’t seem to find the time.


----------



## GtrJazz

Sub3OneDay said:


> I tried but could never get it to work. I’ve now implemented a recall system using Mackie Control protocol which works on any type of cubase track. Details on a massive thread over at the OSC forum.
> Will do a tutorial thread at some point but can’t seem to find the time.


Thanks, I figured out how to make it work using the method Nils Lischka created using the tremolo plugin. Nice as it doesn’t require a 4 digit Id on track name. 

Anyone know how to alter Nils script to hide unused articulation grids on selection?


----------



## aria250m

Looks like Sub was able to put a tutorial together over on the OSC forums! : 









Tutorial - OSC with Expression Maps in Cubase using Mackie Protocol


Hi All, I spent a lot of time last year working out (with the help of @Sylvain) on how to use Mackie protocol to update expression maps in OSC and use the custom module to keep them up to date automatically. To be clear, this is without the need to add plugins to your tracks or midisends, and...




openstagecontrol.discourse.group





Looking forward to trying this out soon!


----------



## GtrJazz

aria250m said:


> Looks like Sub was able to put a tutorial together over on the OSC forums! :
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Tutorial - OSC with Expression Maps in Cubase using Mackie Protocol
> 
> 
> Hi All, I spent a lot of time last year working out (with the help of @Sylvain) on how to use Mackie protocol to update expression maps in OSC and use the custom module to keep them up to date automatically. To be clear, this is without the need to add plugins to your tracks or midisends, and...
> 
> 
> 
> 
> openstagecontrol.discourse.group
> 
> 
> 
> 
> 
> Looking forward to trying this out soon!


I tried it but wasn’t able to get it working. Got an error message in OSC.

If someone gets it working perhaps you can post a blank cubase project with 2 instrument and the OSC articulation buttons. I’m really struggling getting it to work.


----------



## blaggins

That looks incredibly promising. I haven't tried it yet and I'm sure I'd need to spend quite a bit of time setting it up but parsing the expression map xml to dynamically generate the articulation selection buttons is so clutch.


----------



## Sub3OneDay

GtrJazz said:


> I tried it but wasn’t able to get it working. Got an error message in OSC.
> 
> If someone gets it working perhaps you can post a blank cubase project with 2 instrument and the OSC articulation buttons. I’m really struggling getting it to work.


What was the error message? I'll review to check I've included all the steps...


blaggins said:


> That looks incredibly promising. I haven't tried it yet and I'm sure I'd need to spend quite a bit of time setting it up but parsing the expression map xml to dynamically generate the articulation selection buttons is so clutch.


Not sure if "clutch" is a good thing?! But just reviewed briefly and realised I've not fully added the xml parsing bit to the tutorial so will do that today when checking the rest...


----------



## GtrJazz

Sub3OneDay said:


> What was the error message? I'll review to check I've included all the steps...
> 
> Not sure if "clutch" is a good thing?! But just reviewed briefly and realised I've not fully added the xml parsing bit to the tutorial so will do that today when checking the rest...


Thanks so much for the help. Perhaps it might be easier if you could provide 1 expression map and a blank OSC template with just the articulation buttons. Might be easier to reverse engineer for non tech guys like me.


----------



## GtrJazz

Anyone have any luck getting sub3OneDay’a dynamic articulations working?
​


----------



## MicheleS76

GtrJazz said:


> I’m on Nuendo 12. Figured it out. Now I gotta figure out the dynamic articulations and tap tempo that will adjust the tempo inside Nuendo.


Hey GtrJazz, just joined the wonderful world of OSC and have successfully created command buttons, but the timecode display is a whole other story: would you mind sharing how you did it? I found a "displayTime" value/action but not sure if that's the right one, how I should populate the Flags column in the lower part of the generic remote, and also what should I do in the OSC widget? Thanks in advance!!
Michele


----------



## GtrJazz

MicheleS76 said:


> Hey GtrJazz, just joined the wonderful world of OSC and have successfully created command buttons, but the timecode display is a whole other story: would you mind sharing how you did it? I found a "displayTime" value/action but not sure if that's the right one, how I should populate the Flags column in the lower part of the generic remote, and also what should I do in the OSC widget? Thanks in advance!!
> Michele


I got it working at first. But noticed it wasn’t chasing the timecode display accurately. I tried messing around with some settings but eventually abandoned the idea.


----------



## MicheleS76

GtrJazz said:


> I got it working at first. But noticed it wasn’t chasing the timecode display accurately. I tried messing around with some settings but eventually abandoned the idea.


Ah ok thanks! I'll turn to easier stuff to start with, and give it a try later on when I'm more experienced. Should I find a solution (which I doubt), I'll let you know on this thread.


----------



## blaggins

GtrJazz said:


> Anyone have any luck getting sub3OneDay’a dynamic articulations working?
> ​


I haven't attempted it yet but it's on the agenda for a big fall project... I've poured a ton of time into setting up my own template with an array of python utilities to transform my expression maps into configuration that is automatically used to set up the OSC controller, but every time I add things to my template or change my expression maps I have to go back and regenerate everything. It would be totally ideal for the controller to just follow whatever happens to be open in cubase at the time.


----------



## MicheleS76

GtrJazz said:


> I got it working at first. But noticed it wasn’t chasing the timecode display accurately. I tried messing around with some settings but eventually abandoned the idea.


Here it is, that was as easy as looking it up in the OSC forum 









Monitor the project cursor position of Cubase with OSC


It works :). Thank you very much.




openstagecontrol.discourse.group


----------



## GtrJazz

MicheleS76 said:


> Here it is, that was as easy as looking it up in the OSC forum
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Monitor the project cursor position of Cubase with OSC
> 
> 
> It works :). Thank you very much.
> 
> 
> 
> 
> openstagecontrol.discourse.group


I tried that method a few weeks ago and had the same result. It didn’t follow my cursor and hitting stop would show the timecode was off


----------



## MicheleS76

GtrJazz said:


> I tried that method a few weeks ago and had the same result. It didn’t follow my cursor and hitting stop would show the timecode was off


Weird, it seems to work for me and for other people in that thread. I'm just trying to tweak it to improve some minor aspects such as initializing it correctly and removing the initial zeroes, but other than that when I hit stop it always shows the exact same numbers as Cubase's own BBT field. Have you created a dedicated port for it? It uses channel 16 and CC 64 to 73, so if there are other random messages that Cubase is sending in that range they will mess up with that.


----------



## GtrJazz

MicheleS76 said:


> Weird, it seems to work for me and for other people in that thread. I'm just trying to tweak it to improve some minor aspects such as initializing it correctly and removing the initial zeroes, but other than that when I hit stop it always shows the exact same numbers as Cubase's own BBT field. Have you created a dedicated port for it? It uses channel 16 and CC 64 to 73, so if there are other random messages that Cubase is sending in that range they will mess up with that.


Thanks, I’ll give it another try


----------



## blaggins

@Sub3OneDay thank you for all the work you did on your script! I started playing around with your sysex track name interpretation code and it's working beautifully. However one thing I noticed is that if Cubase is already running and I start/stop the Open Stage Control script, then the track name can have errors in it (until I force a "reset" by selecting any track which shares no substring in common with the previously selected one to "clear" the buffer). 

This is of course because Cubase "remembers" the buffered parts of the previous track name, but OSC of course doesn't since I forced a restart. 

Have you found any kind of sysex message that would force Cubase to resend of the full track name to get around this issue?


----------



## Sub3OneDay

blaggins said:


> @Sub3OneDay thank you for all the work you did on your script! I started playing around with your sysex track name interpretation code and it's working beautifully. However one thing I noticed is that if Cubase is already running and I start/stop the Open Stage Control script, then the track name can have errors in it (until I force a "reset" by selecting any track which shares no substring in common with the previously selected one to "clear" the buffer).
> 
> This is of course because Cubase "remembers" the buffered parts of the previous track name, but OSC of course doesn't since I forced a restart.
> 
> Have you found any kind of sysex message that would force Cubase to resend of the full track name to get around this issue?


I’ve not found a specific fix for this problem no. Workaround as you say is to select a track that starts with nothing that has been before but that’s not ideal. I also toyed with the idea of sending a standard midi command to cubase when OSC inititialises that selects a specific track and clear the buffer but that wasn’t ideal.

If you find anything let me know…


----------



## Ron5150

Hi folks, I’m new to the group but have had OSC installed on a Server for awhile now. Still not operational at this point.

Just got back working with OSC. I’ve installed OSC 1.17.0 on a Ubuntu Server and got a fairly basic interface designed for Cubase Pro 12. I’ve tested accessing the interface I’ve designed via Firefox and everything seems to be working well.

Question: Since OSC is not installed on the machine hosting my DAW, its running on a different machine on the same network, how do make Cubase discover this? I’m missing info on how to configure the server. Per documentation, OSC 1.17.0 should be adequate without additional software. The tutorial shows the additional midi S/W for MIDI should be installed.

How do I get the OSC Server interface instance discoverable over the network by Cubase Pro 12?

Any help or hint of what I should change would be greatly appreciated.

Many thanks to any advice/help.

Ron


----------



## Ron5150

I think I’ve figured ti out! I needed RTPMIDI for Network MIDI communication over IP. Still working on it to get both communicating and seen by both machines


----------



## Ron5150

Ron5150 said:


> I think I’ve figured ti out! I needed RTPMIDI for Network MIDI communication over IP. Still working on it to get both communicating and seen by both machines


It’s working! . Now able to assign a button in Cubase .


----------



## Sunshineman

I'm trying to set up a template using the @Sub3OneDay method.
I get track names automatically in OSC
But I can't get the names of articulations from the expression map. I have a script error





I have this error on mac OS and Windows 
I have installed all the components: Node.js, npm, xml2js, chowkidar. I can't figure out what my mistake is?
Tell me please.


----------



## DMDComposer

Sunshineman said:


> I'm trying to set up a template using the @Sub3OneDay method.
> I get track names automatically in OSC
> But I can't get the names of articulations from the expression map. I have a script error
> 
> 
> 
> 
> 
> I have this error on mac OS and Windows
> I have installed all the components: Node.js, npm, xml2js, chowkidar. I can't figure out what my mistake is?
> Tell me please.


The 'addExpMapLabel' is not defined. Someplace in the sysex naming module from Sub3OneDay, is either a) missing the variable, or b), it's never getting defined with a value.

Double check code, following the stack trace and making sure that variable is being defined using console logs and/or debugging tools in your IDE.

Cheers!


----------



## blaggins

Hey sorry y'all I've been meaning to post back in this thread for a while now. I spent a bit of time with @Sub3OneDay's controller code and I can only tip my hat and applaud the effort that went into decoding the undocumented madness that is the Cubase SYSEX implementation. Whatever dev dreamed that serial line optimization up (needless to say it was back in the day of cranky hardware and before any of us likely beheld the idea of composing on a "personal computer") needs to be thoroughly spanked. Honestly. Even back in the elden times, I think we would have all preferred to wait an extra, what, 20ms?!, for the full track name to get sent rather than deal with the "optimization" of only sending the substrings that changed (with locator info!). I'm partially joking, but... like only partially. Actually I'd love to know more about how this all came to be b/c it bothers me so much.

Anyway, I digress. I also encountered some bugs and ended up re-writing a few of the routines. My variant is here: https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/osc-sysex-module.js

The idea is that you only have to fill in the base directory where you keep your expression maps (line 5) and the names of the virtual midi ports you want to use for comm between Cubase and OSC (lines 8-9). Then, if all goes well, the script will ingest all the expression maps in the folder you specified (and it's subfolders) and will load the articulation switcher with the correctly mapped and named articulations automatically (so long as you configured Cubase correctly (see the posts in this thread) and also of course named the track the EXACT same name as the expression map.

I hope that helps someone out there, let me know if you run into trouble with it and I can try to help debug. All hail @Sub3OneDay and the gentleman and scholar and madman that is Jean Emmanuel! Viva Expression!!!


----------



## dts_marin

I've been trying to achieve the same thing for Digital Performer but in the process I got tired of Open Stage's idiosyncrasies and made the whole app from scratch.

Although it mostly works, it would be great to have the same thing in Open Stage because JE has created a wonderful platform.

I'm stuck with a weird issue so maybe having the same thing built in Open Stage will give me ideas on how to do this properly.






DP Articulation Remote DIY project


I'm not a developer but I wanted a specific workflow with articulation maps in DP so I've created an OSC remote. It works by reading the .dpartmap files so that any changes made from DP are reflected on the remote automagically. Of course it keeps track of the record enabled track and stays in...




vi-control.net





I'd be really interested to know if what I've done is also possible in Open Stage.

DP uses OSC TCP v1.0 without SLIP framing (so 4 byte preamble). So it needs some framing. I used a library to do that in my code because I didn't know how to do it from scratch.

I can share all details needed about DP's OSC API but I want help with connecting Open Stage to DP.

If anyone is willing to help PM me or comment in my thread so as not to pollute this thread with DP only stuff.


----------



## Drjay

blaggins said:


> Hey sorry y'all I've been meaning to post back in this thread for a while now. I spent a bit of time with @Sub3OneDay's controller code and I can only tip my hat and applaud the effort that went into decoding the undocumented madness that is the Cubase SYSEX implementation. Whatever dev dreamed that serial line optimization up (needless to say it was back in the day of cranky hardware and before any of us likely beheld the idea of composing on a "personal computer") needs to be thoroughly spanked. Honestly. Even back in the elden times, I think we would have all preferred to wait an extra, what, 20ms?!, for the full track name to get sent rather than deal with the "optimization" of only sending the substrings that changed (with locator info!). I'm partially joking, but... like only partially. Actually I'd love to know more about how this all came to be b/c it bothers me so much.
> 
> Anyway, I digress. I also encountered some bugs and ended up re-writing a few of the routines. My variant is here: https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/osc-sysex-module.js
> 
> The idea is that you only have to fill in the base directory where you keep your expression maps (line 5) and the names of the virtual midi ports you want to use for comm between Cubase and OSC (lines 8-9). Then, if all goes well, the script will ingest all the expression maps in the folder you specified (and it's subfolders) and will load the articulation switcher with the correctly mapped and named articulations automatically (so long as you configured Cubase correctly (see the posts in this thread) and also of course named the track the EXACT same name as the expression map.
> 
> I hope that helps someone out there, let me know if you run into trouble with it and I can try to help debug. All hail @Sub3OneDay and the gentleman and scholar and madman that is Jean Emmanuel! Viva Expression!!!


I agree with what your saying, but would not call it undocumented. Sending partial display strings is part of the specs. The specs can be found in a document called something like ‚Emagic Logic control‘. Must be somewhere in the Web.


----------



## blaggins

Drjay said:


> I agree with what your saying, but would not call it undocumented. Sending partial display strings is part of the specs. The specs can be found in document called something like ‚Emagic Logic control‘. Must be somewhere in the Web.


Ah interesting, I was searching for Cubase SYSEX all over the place but missed the connection to Emagic. I just found this, which seems to contain a lot of the line protocol details although I haven't had a chance to dig in much (and honestly, probably won't... if it works, don't fix it) https://www.fullcompass.com/common/files/4705-LogicControlManual.pdf.


----------



## Drjay

blaggins said:


> Ah interesting, I was searching for Cubase SYSEX all over the place but missed the connection to Emagic. I just found this, which seems to contain a lot of the line protocol details although I haven't had a chance to dig in much (and honestly, probably won't... if it works, don't fix it) https://www.fullcompass.com/common/files/4705-LogicControlManual.pdf.


That‘s it. Page 176.


----------



## GtrJazz

blaggins said:


> Hey sorry y'all I've been meaning to post back in this thread for a while now. I spent a bit of time with @Sub3OneDay's controller code and I can only tip my hat and applaud the effort that went into decoding the undocumented madness that is the Cubase SYSEX implementation. Whatever dev dreamed that serial line optimization up (needless to say it was back in the day of cranky hardware and before any of us likely beheld the idea of composing on a "personal computer") needs to be thoroughly spanked. Honestly. Even back in the elden times, I think we would have all preferred to wait an extra, what, 20ms?!, for the full track name to get sent rather than deal with the "optimization" of only sending the substrings that changed (with locator info!). I'm partially joking, but... like only partially. Actually I'd love to know more about how this all came to be b/c it bothers me so much.
> 
> Anyway, I digress. I also encountered some bugs and ended up re-writing a few of the routines. My variant is here: https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/osc-sysex-module.js
> 
> The idea is that you only have to fill in the base directory where you keep your expression maps (line 5) and the names of the virtual midi ports you want to use for comm between Cubase and OSC (lines 8-9). Then, if all goes well, the script will ingest all the expression maps in the folder you specified (and it's subfolders) and will load the articulation switcher with the correctly mapped and named articulations automatically (so long as you configured Cubase correctly (see the posts in this thread) and also of course named the track the EXACT same name as the expression map.
> 
> I hope that helps someone out there, let me know if you run into trouble with it and I can try to help debug. All hail @Sub3OneDay and the gentleman and scholar and madman that is Jean Emmanuel! Viva Expression!!!


Thank you for sharing. Are you using a 4 digit ID at the beginning for each instrument track? Or can we name our tracks whatever we want as long as the track name and articulation map = the same?


----------



## Manaberry

GtrJazz said:


> Thank you for sharing. Are you using a 4 digit ID at the beginning for each instrument track? Or can we name our tracks whatever we want as long as the track name and articulation map = the same?



I'm trying this. It seems to work.


----------



## blaggins

GtrJazz said:


> Thank you for sharing. Are you using a 4 digit ID at the beginning for each instrument track? Or can we name our tracks whatever we want as long as the track name and articulation map = the same?


You can name the instrument whatever you want. I do treat the first 3 characters special in my OSC controller, but that just because I have a bunch of "extra" stuff set up. Basically I parse our the first 3 characters of any instrument name (which I try to refer to as libraryId throughout) b/c I have some additional things that happen in my controller, like coloring bits of the UI to differentiate different libraries and to setting some default CC faders depending on the library. Those configs are all in a json blob stored in the variable called "configuration" within my session. I have plans to add more library specific configuration elements but they are pretty low priority at the moment.

If you want to take a look, my full controller is also up in my repo at https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/sso-template-v1.json but I'm not expecting that to be particularly useful to anyone expect as maybe an example to work from. I'll also warn you that it's a work in progress so some stuff might be broken.


----------



## GtrJazz

blaggins said:


> You can name the instrument whatever you want. I do treat the first 3 characters special in my OSC controller, but that just because I have a bunch of "extra" stuff set up. Basically I parse our the first 3 characters of any instrument name (which I try to refer to as libraryId throughout) b/c I have some additional things that happen in my controller, like coloring bits of the UI to differentiate different libraries and to setting some default CC faders depending on the library. Those configs are all in a json blob stored in the variable called "configuration" within my session. I have plans to add more library specific configuration elements but they are pretty low priority at the moment.
> 
> If you want to take a look, my full controller is also up in my repo at https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/sso-template-v1.json but I'm not expecting that to be particularly useful to anyone expect as maybe an example to work from. I'll also warn you that it's a work in progress so some stuff might be broken.


Thanks, I tried loading your template but get and error and nothing loads


----------



## blaggins

GtrJazz said:


> Thanks, I tried loading your template but get and error and nothing loads


Would you mind enabling debug in OSC and dumping the full log at me? I can take a look and see if I spot anything obvious.


----------



## Manaberry

Well guys, thanks for sharing this. I've modified pieces of code to fit my workflow, and it's incredibly faster to add/remove instruments with that expression map parsing thing.

Having the program change value of each articulation populating automatically is just a game changer for me (I've added a few color conditions too as the long articulations are always from 1 to 19, short from 20 to 39, and others from 40.)

I love that ping pong between the communities. We learn so many things.


----------



## blaggins

Manaberry said:


> Well guys, thanks for sharing this. I've modified pieces of code to fit my workflow, and it's incredibly faster to add/remove instruments with that expression map parsing thing.
> 
> Having the program change value of each articulation populating automatically is just a game changer for me (I've added a few color conditions too as the long articulations are always from 1 to 19, short from 20 to 39, and others from 40.)
> 
> I love that ping pong between the communities. We learn so many things.


I feel the same way, the expression map parsing is so dang cool. Setting up a new library is such a breeze now, a few clicks and bam the articulations are all there on the controller. 

So fun story, it's actually this very thread where I first learned about Open Stage Control and your original tutorial is how I got started with it (and where I learned about loopMIDI too!). So huge thank you to you @Manaberry from bringing this to the VI-C forum and for sharing your knowledge!


----------



## Manaberry

blaggins said:


> I feel the same way, the expression map parsing is so dang cool. Setting up a new library is such a breeze now, a few clicks and bam the articulations are all there on the controller.
> 
> So fun story, it's actually this very thread where I first learned about Open Stage Control and your original tutorial is how I got started with it (and where I learned about loopMIDI too!). So huge thank you to you @Manaberry from bringing this to the VI-C forum and for sharing your knowledge!


Happy it did help you! That tool is incredible. Jean-Emmanuel is a super-powered dev (pretty sure he doesn't sleep).
But time flies... And I should make a brand-new version of that tutorial. Maybe with that expression map feature for Cubase's users. But I have no time to do so.


----------



## GtrJazz

blaggins said:


> Would you mind enabling debug in OSC and dumping the full log at me? I can take a look and see if I spot anything obvious.


Got it working. Must have just downloaded wrong the first time. Would you be able to share a cubase template with 2 instruments tracks to see the dynamic articulations working with your OSC template?


----------



## GtrJazz

Manaberry said:


> Happy it did help you! That tool is incredible. Jean-Emmanuel is a super-powered dev (pretty sure he doesn't sleep).
> But time flies... And I should make a brand-new version of that tutorial. Maybe with that expression map feature for Cubase's users. But I have no time to do so.


That would be really handy.


----------



## blaggins

Sure @GtrJazz. I'm including a zip of a Cubase 11 project with 2 MIDI tracks in it and the two expression maps that are required. You should see the expression maps looking something like this:






And the OSC controller should end up looking like the following (if the track names are getting correctly sent and received of course). 






Note that the received track name is displayed above the articulation selector boxes, if it's scrambed garbage then it just means there is a temporary mismatch of what OSC has in it's buffers for "last sent" and what Cubase has in it's buffers for "last sent". The way to get them to match up is either to reload everything or what I do is create a dummy track in Cubase that has a name consisting of all "-" characters to click on, forcing a total flush of the common substrings, after which clicking on a real track name should result in everything working again. Doesn't have to be "-", that's just a character I never use in real track names.

Don't forget to change the config of the osc-sysex-module.js to point to the directory where you have unzipped the Violins I and Celli .expressionmaps.


----------



## GtrJazz

blaggins said:


> Sure @GtrJazz. I'm including a zip of a Cubase 11 project with 2 MIDI tracks in it and the two expression maps that are required. You should see the expression maps looking something like this:
> 
> 
> 
> 
> 
> 
> And the OSC controller should end up looking like the following (if the track names are getting correctly sent and received of course).
> 
> 
> 
> 
> 
> 
> Note that the received track name is displayed above the articulation selector boxes, if it's scrambed garbage then it just means there is a temporary mismatch of what OSC has in it's buffers for "last sent" and what Cubase has in it's buffers for "last sent". The way to get them to match up is either to reload everything or what I do is create a dummy track in Cubase that has a name consisting of all "-" characters to click on, forcing a total flush of the common substrings, after which clicking on a real track name should result in everything working again. Doesn't have to be "-", that's just a character I never use in real track names.
> 
> Don't forget to change the config of the osc-sysex-module.js to point to the directory where you have unzipped the Violins I and Celli .expressionmaps.


Thank you very much. Unfortunately I’m getting this error in the OSC window.


----------



## DMDComposer

GtrJazz said:


> Thank you very much. Unfortunately I’m getting this error in the OSC window.


Hi,
The error says it can't find the node modules package "xml-js". Make sure to install the node modules in the root directory of where the custom module exists.




JavaScript:


// folder directory example
node_modules > xml-js
customModule.js


Cheers!


----------



## GtrJazz

DMDComposer said:


> Hi,
> The error says it can't find the node modules package "xml-js". Make sure to install the node modules in the root directory of where the custom module exists.
> 
> 
> 
> 
> JavaScript:
> 
> 
> // folder directory example
> node_modules > xml-js
> customModule.js
> 
> 
> Cheers!


Thanks, I tried that and still getting these errors.


----------



## DMDComposer

GtrJazz said:


> Thanks, I tried that and now I don’t get any errors but still not getting any articulations on the touchscreen


I'm not sure where the problem lies based on that screen shot. I would double-check a few things.
1. As blaggins mentioned, don't forget to change the config of the osc-sysex-module.js to point to the directory where you have unzipped the Violins I and Celli.expressionmaps.
2. Line 63 in osc-sysex-module.js, make sure console.log(mapFiles) is actually logging an array of both the expression maps in blaggin's example, aka, path\to\celli.expressionmap, path\to\Violin I.expressionmap
3. Line 68, parseExpressionMaps(), make sure this is printing back in the console the articulations from the expression maps. You should find the console.log() messages blaggins added at line 213, in the parseElements() function. It should console.log() something like this

Parsing articulations for Celli
articulations = 0,Long,1,Col Legno,2,Harmonics Longer,3,Harmonics Shorter,4,Legato,5,Long CS,6,Long Flautando,7,Long Sul Pont,8,Long Sul Tasto,9,Marcato,10,P
izzicato,11,Pizzicato Bartok,12,Spiccato,13,Spiccato CS,14,Staccato,15,Tremolo,16,Tremolo CS,17,Tremolo Sul Pont,18,Trill HT,19,Trill WT
Parsing articulations for Violins I
articulations = 0,Long,1,Col Legno,2,Harmonics Longer,3,Harmonics Shorter,4,Legato,5,Long CS,6,Long Flautando,7,Long Sul Pont,8,Long Sul Tasto,9,Marcato,10,P
izzicato,11,Pizzicato Bartok,12,Spiccato,13,Spiccato CS,14,Staccato,15,Tremolo,16,Tremolo CS,17,Tremolo Sul Pont,18,Trill HT,19,Trill WT

I'd double check those first make sure the sysex-module is working. As well as checking if the MTC is printing correctly, showing the highlighted track in Cubase and showing the same name on your OSC.

I don't have the magic solution, but following the execution of how the script works will lead to where the problem exists, if it is in the script itself. If not, then its something in the OSC template, which I'm not sure without seeing the template.


----------



## GtrJazz

DMDComposer said:


> I'm not sure where the problem lies based on that screen shot. I would double-check a few things.
> 1. As blaggins mentioned, don't forget to change the config of the osc-sysex-module.js to point to the directory where you have unzipped the Violins I and Celli.expressionmaps.
> 2. Line 63 in osc-sysex-module.js, make sure console.log(mapFiles) is actually logging an array of both the expression maps in blaggin's example, aka, path\to\celli.expressionmap, path\to\Violin I.expressionmap
> 3. Line 68, parseExpressionMaps(), make sure this is printing back in the console the articulations from the expression maps. You should find the console.log() messages blaggins added at line 213, in the parseElements() function. It should console.log() something like this
> 
> Parsing articulations for Celli
> articulations = 0,Long,1,Col Legno,2,Harmonics Longer,3,Harmonics Shorter,4,Legato,5,Long CS,6,Long Flautando,7,Long Sul Pont,8,Long Sul Tasto,9,Marcato,10,P
> izzicato,11,Pizzicato Bartok,12,Spiccato,13,Spiccato CS,14,Staccato,15,Tremolo,16,Tremolo CS,17,Tremolo Sul Pont,18,Trill HT,19,Trill WT
> Parsing articulations for Violins I
> articulations = 0,Long,1,Col Legno,2,Harmonics Longer,3,Harmonics Shorter,4,Legato,5,Long CS,6,Long Flautando,7,Long Sul Pont,8,Long Sul Tasto,9,Marcato,10,P
> izzicato,11,Pizzicato Bartok,12,Spiccato,13,Spiccato CS,14,Staccato,15,Tremolo,16,Tremolo CS,17,Tremolo Sul Pont,18,Trill HT,19,Trill WT
> 
> I'd double check those first make sure the sysex-module is working. As well as checking if the MTC is printing correctly, showing the highlighted track in Cubase and showing the same name on your OSC.
> 
> I don't have the magic solution, but following the execution of how the script works will lead to where the problem exists, if it is in the script itself. If not, then its something in the OSC template, which I'm not sure without seeing the template.


Got it working finally 

One thing I had to change is the path to maps I had to use / rather than \

Ex c:/user/maps


----------



## GtrJazz

Manaberry said:


> Well guys, thanks for sharing this. I've modified pieces of code to fit my workflow, and it's incredibly faster to add/remove instruments with that expression map parsing thing.
> 
> Having the program change value of each articulation populating automatically is just a game changer for me (I've added a few color conditions too as the long articulations are always from 1 to 19, short from 20 to 39, and others from 40.)
> 
> I love that ping pong between the communities. We learn so many things.


Can you explain how you sorted the articulations into short, longs and other? 

I tried moving the art_ buttons in order position 1-20 for shorts etc but they don’t match up with the order of my articulation map once I switch to a different track


----------



## Manaberry

GtrJazz said:


> Can you explain how you sorted the articulations into short, longs and other?
> 
> I tried moving the art_ buttons in order position 1-20 for shorts etc but they don’t match up with the order of my articulation map once I switch to a different track



You may not get every articulation always at the same place unless you decide to keep all the unused buttons visible (which can take a lot of space and make your actual articulation not evenly organized). On my end, I just use colors to separate long, short, else, and latency correction macro.

It does look like this:





And the piece of code that does the color trick once parsed the *program change *value from each articulation:



> var artProgramChange = artProg
> _ // Setting colors for long, short, and else articulations
> if (artProgramChange == -1) { //modifiers - Articulation with no Remote value
> artColoris = 'grey'
> } else if (artProgramChange >= 1 && artProgramChange <= 19) { //Long
> artColoris = '#03fc98'
> } else if (artProgramChange >= 21 && artProgramChange <= 35) { //Short
> artColoris = 'orange'
> } else if (artProgramChange >= 36 && artProgramChange <= 78) { //Else
> artColoris = '#ba3bff'
> } else { //Latency Art
> artColoris = '#63D7FF'
> }_


----------



## GtrJazz

Manaberry said:


> You may not get every articulation always at the same place unless you decide to keep all the unused buttons visible (which can take a lot of space and make your actual articulation not evenly organized). On my end, I just use colors to separate long, short, else, and latency correction macro.
> 
> It does look like this:
> 
> 
> 
> 
> 
> And the piece of code that does the color trick once parsed the *program change *value from each articulation:


Thanks I’ll give that a try. So far I managed to align buttons 1-59 into longs, shorts and effects. It works fine but I can’t leave any button blank or the articulations don’t line up with the proper column. So far it looks like this but I’m hoping to achieve what Jononotbono did in the second picture. Somehow he’s able to hide the unused buttons while still keeping the articulations in the proper column.

Would I be possible to label the blank articulations something like “blank&hide” and have OSC hide those unused articulation buttons whenever that articulation name shows up?


----------



## Sunshineman

@blaggins thank you so much for your script and template, it's a great job. I have set everything up for myself and almost everything works fine, but there is one problem, using your script for expression map, I do not receive feedback from Cubase. If I disable your script from the OSC template, feedback from Cubase starts coming. Do you know about this problem? Can anyone else confirm this problem or am I the only one, maybe because I'm on Mac..?


----------



## blaggins

That does sound pretty strange @Sunshineman, what do you mean by "feedback from Cubase though"? Do you mean you stop receiving Cubase MIDI data in your OSC Template? Or something else?

Also just to clarify, but when you say "disable script from the OSC template" what are you referring to? Deleting the "custom module" parameter from OSC when you start it up?


----------



## Sunshineman

blaggins said:


> That does sound pretty strange @Sunshineman, what do you mean by "feedback from Cubase though"? Do you mean you stop receiving Cubase MIDI data in your OSC Template? Or something else?
> 
> Also just to clarify, but when you say "disable script from the OSC template" what are you referring to? Deleting the "custom module" parameter from OSC when you start it up?


Forgive me for my incorrect terminology. Yes, you got it right. Just in case, I recorded a screen with a problem


----------



## blaggins

Thanks for the video @Sunshineman I think I see the problem.

My sysex parsing script is eating all incoming MIDI messages instead of passing them on, this feels like a bug however, not sure why it's in there. Remove the line that looks like:

if (host !== 'midi' || port !== midiPort_MCU_To_OSC) return

And it should start to work for you. I've also pushed this fix to my repo.


----------



## Sunshineman

Thanks @blaggins 
Without this line, the fader now receives messages from Cubase.
Is it possible to get the same result with your custom faders? On the screen recording, I showed what I mean.


----------



## blaggins

Sunshineman said:


> Thanks @blaggins
> Without this line, the fader now receives messages from Cubase.
> Is it possible to get the same result with your custom faders? On the screen recording, I showed what I mean.


I would think so as long as you've got the Quick Controls set up appropriately in Cubase and you get the faders to listen correctly in OSC. I don't do this myself, but I'm pretty sure this just amounts to setting up the preArgs and the address configuration values of the fader widgets, right?

Although I haven't had a chance to play with it, I think if you wanted to automate the config of the preArgs (I'm assuming per library since customizing per track might get nightmarish) you could likely keep a static configuration that maps the library identifier to the CC values you want to use, and then automate setting up the faders with the correct preArgs. The idea is that each new track name would potentially re-create the faders with different CC values, derived from a static configuration that defines which faders are used for which library.

For example, I always prefix my track names with a 3 letter code that acts as my libraryId, which I can extract in Javascript doing something like

var libraryId = trackName.substr(0,3).toLowerCase()

which then you can use an a lookup in your static config variable (which I do for things like color and setting up basic CC faders per library).

You can see this sort of thing in my OSC session https://github.com/tpoots/Utility-Scripts-for-Composers/blob/main/OSC/sso-template-v1.json in the setup_instrument function. Also check the configuration variable to see how I've stored the config details in JSON indexable by libraryId.

I am somewhat tempted to set this up your way (using quick controls) for my own template b/c it is pretty cool, but I don't know when/if I'll get around to it. I've been using OSC less these days.


----------



## Sunshineman

I used Quick Control just as an example, it's not that important to me. I like your idea of dynamically displayed faders in which the control change parameters also change dynamically. And I would like to configure the template exactly as you say, with tags for the first three letters for each library. In my last video, I used part of your template, and the problem is that these faders do not receive messages from Cubase in the same way as static faders.


----------



## blaggins

Sunshineman said:


> I used Quick Control just as an example, it's not that important to me. I like your idea of dynamically displayed faders in which the control change parameters also change dynamically. And I would like to configure the template exactly as you say, with tags for the first three letters for each library. In my last video, I used part of your template, and the problem is that these faders do not receive messages from Cubase in the same way as static faders.


I think the issue that you're having is that my OSC session doesn't configure the preArgs and the address argument of the faders to receive data (the way your fader was configured in your first video example). That's what I was alluding to in my previous post. Can you try setting the pre-args and address and see if that works?


----------



## Sunshineman

Thanks @blaggins Now I started to understand a little) I tried to set up preArgs for the faders from your template, now the CC addresses become static, but it remains possible to dynamically display and change the name of the faders and messages from Cubase come to the fader if Quick Control is activated. In general, this is what I wanted. Yes, with this scheme, you need to configure each track, but using the preset for Quick Control, this can be done easily. The advantage of this method is that when changing tracks in Cubase, the positions of the faders in the template dynamically rise to the position in which the parameter of the virtual instrument is located.


----------



## blaggins

Sunshineman said:


> The advantage of this method is that when changing tracks in Cubase, the positions of the faders in the template dynamically rise to the position in which the parameter of the virtual instrument is located.


Now that is quite cool!! Do you have to set up quick controls for the dynamic updating of faders to happen on switching tracks? I haven't had a chance to play around with quick controls yet, do you know if they work with MIDI tracks that are connected to "remote" VSTs via VEPro?

In any case, I think you've already figured this out, but if you wanted the preArgs to update along with the fader assignments you could always put a variable in place of the preArgs and update that when the instrument switches (either in the JS module or in a function that fires as part of setting up the UI), or create an array of configuration variables that control which CC/preArg is displayed where and plop in some javascript in the preArgs to read it out like this https://openstagecontrol.discourse.group/t/basic-text-dynamically-updating-based-on-fader-cc/2429


----------



## synthetic

Just starting to try this. I had been using an iPad 2 running Lemur connected through an iConnect MIDI interface for years. But the iConnect MIDI interface failed (spectacularly, I think it shorted the USB connection or something), Lemur is abandoned, and the iPad is so old that it crashes when you open the App Store. So it’s time to rebuild using OSC and the new Cubase Remote Manager. And I just ordered a Samsung Galaxy Tab A8 ($149!?) to replace the iPad. 

The OSC server setup has been giving me headaches, it works for a while then stops. Also the setup instructions are not great. The first post in the this thread: ‘You only need to set up two things: Send and MIDI. Here’s how you set up MIDI. OK moving on…’ And the documentation on Send is one line. It took me a while to figure out I could just leave it blank and it still works (sometimes…) 

Maybe I’ll try some of the fancy articulation switching you guys are using, but probably not. I’ll most likely switch up my template before I finish programming all of that.


----------



## Sunshineman

blaggins said:


> I haven't had a chance to play around with quick controls yet, do you know if they work with MIDI tracks that are connected to "remote" VSTs via VEPro?


Yes, but in VEPro Host Automation does not automatically read parameters from Kontakt, so they need to be configured manually.


----------



## synthetic

My server settings in case it's helpful to someone. This is Cubase 12 on macOS 13.1 and OSC ver 1.21.0.


----------

