Go Back   Cockos Incorporated Forums > REAPER Forums > MIDI Hardware, Control Surfaces, and OSC

Reply
 
Thread Tools Display Modes
Old 12-09-2017, 10:03 AM   #321
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by fundorin View Post
So, I think that that's why Geoff came with an idea of "widgets" in chain
real_knob1<>widget[x]<>fx_param1.
Users doesn't map MIDI CC values to the FX parameters. They map widgets to them. And, inside the main script, CCs are mapped to widgets.
It is clear that MIDI should be separated. The question, what widget[x] is:
* ACT style: global widget[ctl_type][n] , where ctl_type is button/knob/slider, n is just index in ordered list
+ per surface widget[ctl_type][i] , where i is user definable. Initially n==i, but user can change that per surface.
* simple style widget[x]
* ??? somehow tree based, widget[fx_type][x] where fx_type is EQ_4BAND/EQ_6BAND/Comp/Comp_4BAND.
Or something more complex, fe. widget[EQ_Comp_Stip][EQ][LF][x]

Quote:
Even if you have prepared track templates with, let's say, ReaEQ and ReaComp loaded, some of your tracks would have them in "slots" 1 and 2 (audio tracks and folders), while others in "slots" 2 and 3, cause "slot" 1 in used for instrument plugin. Or, "slots" 3 and 4, cause "slot" 1 is for midi arpeggiator.
That was the problem with Sonar ProChannel, once they have allowed to change the order of modules (originally, EQ was always the first and Comp always the second).
Since I had no general solution for mapping, in particular case we was solving that by hard-coding:
* EQ just had to be found by name (there is only one EQ in ProChannel)
* Compressor had to be also found by name, assuming we want control the first and giving explicit priority list, f.e. PC76/PC4K/CA2A

Doing so (to be clear, that is working in Sonar thing), while it was not difficult (AZ Controller is an interactive system, not script), I have found the procedure rather boring and not scalable for not ProChannel case. That was the first time I have started to seriously think how that can be done better.


Quote:
There won't be any standard ever.
Till someone invents some amusing approach and everyone else follow
azslow3 is offline   Reply With Quote
Old 12-09-2017, 11:31 AM   #322
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by fundorin View Post
So, I think that that's why Geoff came with an idea of "widgets" in chain
real_knob1<>widget[x]<>fx_param1.
Users don't map MIDI CC values to the FX parameters. They map widgets to them. And, inside the main script, CCs are mapped to widgets.
Yes !

In the MIDi case, a MIDI CC value maps to a widget name (e.g. "Lo Freq").

In the OSC case, an OSC command maps to a widget name (e.g. "LoFreq").

In all cases the FX parameter (e.g. "Low Frequency") with the associated widget name (e.g. "Lo Freq") gets controlled by any widgets named "Lo Freq", in this case a MIDI widget AND an OSCwidget.
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-09-2017, 11:38 AM   #323
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by azslow3 View Post
It is clear that MIDI should be separated. The question, what widget[x] is:
* ACT style: global widget[ctl_type][n] , where ctl_type is button/knob/slider, n is just index in ordered list
+ per surface widget[ctl_type][i] , where i is user definable. Initially n==i, but user can change that per surface.
* simple style widget[x]
* ??? somehow tree based, widget[fx_type][x] where fx_type is EQ_4BAND/EQ_6BAND/Comp/Comp_4BAND.
Or something more complex, fe. widget[EQ_Comp_Stip][EQ][LF][x]
Yeah, that's why all values are normalized (range = 0.0 - 1.0), any control can sub for any other, and the association is by simple naming, keeps things manageable.

As far as the rest of the preceding discussion, it's really been about UI, right ?
What's been described is different ways to make it easier for a user to interact with this complexity.

While that is absolutely a valuable road to follow, that is not the thrust of phase one of this project.

Phase one is all about the engine, the ways and means to achieve the desired UI goals of which you speak.
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-11-2017, 03:58 PM   #324
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by Geoff Waddington View Post
Yeah, that's why all values are normalized (range = 0.0 - 1.0), any control can sub for any other, and the association is by simple naming, keeps things manageable.
So, basically, oscii-bot in a plugin form and with customs plugmaps?
midi controller <oscii-bot script> <ReaperOSC config> <Reaper>
This chain also has double conversion logic.
fundorin is offline   Reply With Quote
Old 12-12-2017, 04:57 AM   #325
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by fundorin View Post
So, basically, oscii-bot in a plugin form and with customs plugmaps?
midi controller <oscii-bot script> <ReaperOSC config> <Reaper>
This chain also has double conversion logic.
If I understand what you are saying, not quite.

Had an old friend over last night to discuss the architecture (he is a VERY seasoned systems architect).

He also has a solid rep for being able to quickly find the holes in any architecture.

We discussed things for about 6 hours and couldn't find any holes.
That doesn't mean there aren't any, it just means we have a good candidate architecture for version 1.0.

He also happens to have a lot of expertise in file formats and parsing, and confirmed that the Reaper format (e.g. .RPP) is sufficient to cover the architecture.

Now we DID come up with some fairly bizarre edge cases, but we'll just wait and see if they become a practical issue

So here are some possible line item entires in pseudo script:

Widget map entries:

MIDI
Volume 14BitFader e0 7f 7f e0 00 00
Mute Switch 90 08 7f 90 08 00
Solo Switch 90 09 7f 90 09 00

OSC (just an placeholder to give an idea)
Volume 8BitFader /fader/volume 255 0
Mute Switch /switch/mute/ 1 0
Solo Switch /switch/solo/ 1 0


Action map entries:
Volume TrackVolumeAction
Mute TrackMuteAction

FX Map map entries:
Volume MakeUpGain
Mute Bypass

That's it !!
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki

Last edited by Geoff Waddington; 12-12-2017 at 05:15 AM.
Geoff Waddington is offline   Reply With Quote
Old 12-12-2017, 07:56 AM   #326
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

What about relative/absolute actions? Soft pickup? Acceleration? Fine adjustment? All this options should be available for the mapped commands.
fundorin is offline   Reply With Quote
Old 12-12-2017, 09:35 AM   #327
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by fundorin View Post
What about relative/absolute actions? Soft pickup? Acceleration? Fine adjustment? All this options should be available for the mapped commands.
Well, I admit I did leave out some details

Stuff like:
Switch is reverse sense
VU/Fader db range

Little tweaks that that will be present in the map, but only in a few cases.

As far as your list:

Quote:
Originally Posted by fundorin View Post
What about relative/absolute actions?
Soft pickup? .
Since all values are normalized, do these even make sense ?

Quote:
Originally Posted by fundorin View Post
Acceleration?
Fine adjustment? .
These are 2 sides of the same coin, and really have to do with smoothing / amplifying the data control stream, perhaps they belong somewhere in the map, not sure...
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-12-2017, 12:39 PM   #328
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by Geoff Waddington View Post
Since all values are normalized, do these even make sense ?
They really do. I'm currently writing my oscii-bot script for Novation SL and I'm experiencing different issues, related to those modes.

Imagine having single rotary encoder. So, -1/1 around rotary center for rotation.
Now, try to adjust volume on currently selected track, without making fader jump from min to max. Then, try to do the same with the volume on a new selected track, using the same fader.
This is where relative rotary mode is needed.

Try to do the same with a non-motorized fader. Let's say that your fader is in zero position, while track's volume is on 9/10 of the scale.
You'll move fader up and volume will start going up towards max immediately.
Remember, your fader is still at the bottom of the range. You won't be able to lower the volume, until you'll move fader all the way up and then back down. Somewhere around the max value of master track's volume your monitors will blow up. Is this behavior that you'd want from a fader?
That's why soft pickup mode is used. Volume value won't change until fader reaches the value.

Quote:
Originally Posted by Geoff Waddington View Post
These are 2 sides of the same coin, and really have to do with smoothing / amplifying the data control stream, perhaps they belong somewhere in the map, not sure...
The main map is useful to interpret value from the real controller, while those values and behavior should be altered for different plugins/actions, mapped to the same widget.

As I already said, I'm currently programming my controller, so I'm dealing with encoders, faders, pots, buttons, modes, shifts, LEDs and, later, LCD data. They all act differently.
Button can be toggle, momentary, hold, double click. It can send command on press, on release or on both, depending on the current task. It can send multiple commands at once, like "turn on compressor AND eq".
fundorin is offline   Reply With Quote
Old 12-12-2017, 01:28 PM   #329
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by fundorin View Post
Imagine having single rotary encoder. So, -1/1 around rotary center for rotation.
Now, try to adjust volume on currently selected track, without making fader jump from min to max. Then, try to do the same with the volume on a new selected track, using the same fader.
This is where relative rotary mode is needed
Nope, we take care of that for you.
When you state Encoder as the widget type in the map, the encoder widget actually queries it's Action counterpart for current normalized value, applies its delta, and then sends out the new normalized value to the Action.


Quote:
Originally Posted by fundorin View Post
Try to do the same with a non-motorized fader. Let's say that your fader is in zero position, while track's volume is on 9/10 of the scale.
You'll move fader up and volume will start going up towards max immediately.
Remember, your fader is still at the bottom of the range. You won't be able to lower the volume, until you'll move fader all the way up and then back down. Somewhere around the max value of master track's volume your monitors will blow up. Is this behavior that you'd want from a fader?
That's why soft pickup mode is used. Volume value won't change until fader reaches the value.
Yeah, soft pickup may be necessary for non motorized faders, I'll have to think if there is a way around that

Quote:
Originally Posted by fundorin View Post
I'm dealing with encoders, faders, pots, buttons, modes, shifts, LEDs and, later, LCD data. They all act differently.
Button can be toggle, momentary, hold, double click. It can send command on press, on release or on both, depending on the current task. It can send multiple commands at once, like "turn on compressor AND eq".
Yup, we support all of that already, although for all those switch types you only need press and release, all the rest derives easily from there.
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-12-2017, 01:50 PM   #330
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by Geoff Waddington View Post
Yup, we support all of that already, although for all those switch types you only need press and release, all the rest derives easily from there.
My controller can send CC when encoder/pot/fader is touched.
Fader touch generally used in most consoles to "fight back" volume changes when writing automation. When fader is touched, host understands that it shouldn't move the fader.

Reaper even have special commands for those:
TRACK_VOLUME_TOUCH b/track/volume/touch b/track/@/volume/touch
TRACK_PAN_TOUCH b/track/pan/touch b/track/@/pan/touch

In Novation, touching e/p/f will switch LCD to display corresponding information.

For me, I'm going to add triple fader touch to reset volume and pan to 0. At first, I though about using double click, but it's easy to mess levels up by accidental touch and resetting vol/pan isn't needed often, but when it's needed, touching the fader would be much faster than trying to slowly move it to the desired position, or reaching for mouse to reset volume with it.
And, if more than one track should be reset, touching corresponding faders would be the fastest method I can imagine.
There's an action available for such task with SWS - "Xenakios/SWS: Reset volume and pan of selected tracks"
It's also useful if fader was once moved by mouse and midi CC divided by 127 doesn't give enough resolution to set value exactly at 0 db, or whatever value is configured in Reaper as zero point by user.
fundorin is offline   Reply With Quote
Old 12-14-2017, 01:38 PM   #331
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Progress report -- or is that a regress report ?

After chewing on the discussion with my friend the other night, it turns out the architecture is fine, but the implementation is substandard.

Arghh... another round of refactoring...

It will require a change in map format, names are now two part: SurfaceName and WidgetName a la:

Action map entries:
Mixer Volume TrackVolumeAction
Mixer Mute TrackMuteAction

FX Map map entries:
Console1 Volume MakeUpGain
Console1 Mute Bypass

Surface Names must be unique within a given logical surface.

Widget Names must be unique within a given surface.

Sad that I actually enjoy doing this ain't it ?
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-14-2017, 04:41 PM   #332
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

I'm also refactoring my script day after day. At first, I've implemented transport mode toggle with the dedicated button "Transport" on the controller.
Then I built all the logic around it. But, only 6 transport buttons out of 8 were available for mapping functions(firmware limitation), so, a couple days later, I've decided to map some other key as the transport toggle. It took an evening of my non-programmer skills to remap everything (osc, midi, states, led). Then, after ten days of adding new features, I felt greedy about that new transport button, that I could use for some other functions.
So, I've changed all the related code back to the original transport button, yesterday.
For now, my script is 1385 lines long and I still didn't finish the mixer mode properly, not saying about instrument and fx modes or lcd feedback.
So, yeah, I feel you. It's some type of masochistic pleasure, rewriting your code to make it better, even if there would be no functional changes and no one would ever know that your code was refactored hundreds times.

Last edited by fundorin; 12-14-2017 at 04:47 PM.
fundorin is offline   Reply With Quote
Old 12-14-2017, 11:18 PM   #333
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

And still there are complains that Reaper does not support all existing controller boards out of the box.

-Michael
mschnell is online now   Reply With Quote
Old 12-15-2017, 01:59 AM   #334
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by mschnell View Post
And still there are complains that Reaper does not support all existing controller boards out of the box.

-Michael
Those are fair complaints. Cause it doesn't. Reaper doesn't even fully support HUI out of the box, for more than 10 years.

It's like saying: "Why people complain about lack of the games on osx? There's Wine and Parallels, VMWare, VirtualBox and other virtual machines. They'll allow user to launch Windows games under osx!".
While that's true, it's not Apple merit at all, but third-party developers and those, who program for Windows, in first place.
If third-party developers were more interested in Linux and Android, rather than in osx and ios, Apple would go bankrupt.

There's a huge difference between native and 3rd party support.

P.S. Could you, please, put your "michael" signature below the underline, so it won't pop up in quotes?
fundorin is offline   Reply With Quote
Old 12-15-2017, 03:58 AM   #335
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by mschnell View Post
And still there are complains that Reaper does not support all existing controller boards out of the box.

-Michael
I guess such complains exist for any DAW.
I have managed to almost "suppress" them for Sonar last years. For any particular controller, I was asking a simple question: does the requester ready to spend at least 1-2 hours of his time so the controller is supported?
Normally there was no answer or explicit reply "no, I am too busy to waste my time".
Everyone who has replied with "yes" got his surface supported
So far with 2 exceptions:
* colors on display of Behringer X-Touch. I have checked remotely how that works, but proper implementation requires "proxy" mode between X-Touch and X-Air and I had no time for it
* display on Push. I do not have Push and its support requires special USB user land driver and frame buffer graphical library to draw. I have started to write graphical library for other purpose, but instead of making progress had to look for a new DAW...
azslow3 is offline   Reply With Quote
Old 12-15-2017, 06:10 AM   #336
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by azslow3 View Post
I have managed to almost "suppress" them for Sonar last years....
Are you a former Sonar support person ?

-Michael
mschnell is online now   Reply With Quote
Old 12-15-2017, 07:41 AM   #337
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by azslow3 View Post
I guess such complains exist for any DAW.
I have managed to almost "suppress" them for Sonar last years.
So, what's your plan, than? Modified standalone app or a seamless CSurf plugin?
fundorin is offline   Reply With Quote
Old 12-15-2017, 07:52 AM   #338
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by mschnell View Post
Are you a former Sonar support person ?
-Michael
No. Just a user.

Quote:
Originally Posted by fundorin View Post
So, what's your plan, than? Modified standalone app or a seamless CSurf plugin?
As you have seen in the requests board, CSurf plugin.
azslow3 is offline   Reply With Quote
Old 12-15-2017, 09:08 AM   #339
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

It's either too much or too little in Reaper camp.
No support for generic midi controllers with Sysex for years and, suddenly, Justin updates oscii-bot to support Sysex. Now, Geoff and Alexey are into generic CSurf plugins with custom maps. There must be a catch somewhere.
fundorin is offline   Reply With Quote
Old 12-15-2017, 01:55 PM   #340
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by fundorin View Post
It's either too much or too little in Reaper camp.
No support for generic midi controllers with Sysex for years and, suddenly, Justin updates oscii-bot to support Sysex. Now, Geoff and Alexey are into generic CSurf plugins with custom maps. There must be a catch somewhere.
SysEx support is a nightmare... since that is a "free" format, every producer interpret it its own way. Also it was actively used by digital mixers, to save scenes bulk and to control each other. They "pack" into one message in general variable number of parameters, these messages are not directly correspond to physical controls but to internal parameters, introduce checksums, etc. In reality, it is simpler to just write a normal binary program to deal with that and not do everything "generic" way.

With maps I hope we all saturate to some common solution.

One note (may be that was already mentioned in this thread and I have just skipped):

each plug-in parameter should not only get some mapping (so ctrl X to parameter Y), but also the description of that parameter:
* type (switch, continuous, set)
* resolution (for continuous, finest resolution supported)
* "default" value (for continuous and sets)
also since many plug-ins have "broken" implementation in the corresponding parts, there should be a possibility to set
* parameter name
* conversion for the value (0...1) to text form
azslow3 is offline   Reply With Quote
Old 12-15-2017, 03:20 PM   #341
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by azslow3 View Post
SysEx support is a nightmare... since that is a "free" format, every producer interpret it its own way.
Not at all, really. I have programmer's manual for my controller with all details. Only general support of sending/parsing sysex is needed. And, ability to write the logic script. In Lua, preferably.
Quote:
Originally Posted by azslow3 View Post
Also it was actively used by digital mixers, to save scenes bulk and to control each other. They "pack" into one message in general variable number of parameters, these messages are not directly correspond to physical controls but to internal parameters, introduce checksums, etc. In reality, it is simpler to just write a normal binary program to deal with that and not do everything "generic" way.
Again, in my case, sysex is needed for two things: controller state and lcd feedback.

Quote:
Originally Posted by azslow3 View Post
One note (may be that was already mentioned in this thread and I have just skipped):
each plug-in parameter should not only get some mapping (so ctrl X to parameter Y), but also the description of that parameter:
* type (switch, continuous, set)
* resolution (for continuous, finest resolution supported)
* "default" value (for continuous and sets)
also since many plug-ins have "broken" implementation in the corresponding parts, there should be a possibility to set
* parameter name
* conversion for the value (0...1) to text form
I recommend you to look at Default.ReaperOSC file in /Roaming/Reaper/OSC folder for the general clue of the OSC types and arguments. There are also several open-source source plugins available, where you can see, how they were made. And, recently, Erriez rewrote the csurf sources to be compatible with VS2015/2017. https://github.com/Erriez/reaper_csurf_vs201x
Klinke MCU (with plugmaps) - https://bitbucket.org/Klinkenstecker/csurf_klinke_mcu
fundorin is offline   Reply With Quote
Old 12-16-2017, 01:52 AM   #342
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
No support for generic midi controllers ...
I don't suppose there is a such a thing as a "generic midi controller", as ther is no "official" standard about the midi interface such a controller is supposed to provide.

Quote:
Originally Posted by fundorin View Post
I have programmer's manual for my controller with all details
This is why you declare it the generic midi controller ?

If I was to define a standard for a "generic midi controller midi interface", I would avoid using SysEx for non-propriety stuff, leaving SysEx for configuration of the controller itself. this is the way Midi had been intended to be used, anyway.

-Michael

Last edited by mschnell; 12-16-2017 at 01:57 AM.
mschnell is online now   Reply With Quote
Old 12-16-2017, 03:08 AM   #343
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by mschnell View Post
I don't suppose there is a such a thing as a "generic midi controller", as ther is no "official" standard about the midi interface such a controller is supposed to provide.
What? If you're not aware yet, Reaper only provides midi feedback to those controllers, which have specially written csurf plugins for them. All other midi controllers won't get the feedback.

Quote:
Originally Posted by mschnell View Post
This is why you declare it the generic midi controller ?
Again, what? That's an example of weird female logic here.

Quote:
Originally Posted by mschnell View Post
If I was to define a standard for a "generic midi controller midi interface", I would avoid using SysEx for non-propriety stuff, leaving SysEx for configuration of the controller itself. this is the way Midi had been intended to be used, anyway.
Good luck trying to display text info on the LCD or implementing hi-res
controls without using NPRN values, and only with CC/Notes/AT. You'll run out of available CC numbers for all 16 channels quite fast.

Quote:
Originally Posted by mschnell View Post
-Michael
-fundorin
fundorin is offline   Reply With Quote
Old 12-16-2017, 09:30 AM   #344
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by fundorin View Post
What? If you're not aware yet, Reaper only provides midi feedback to those controllers, which have specially written csurf plugins for them. All other midi controllers won't get the feedback.
More precisely, Reaper does not provide MIDI feedback also in case of csurf plugins, in fact csurf API has no direct relations to MIDI. But csurf plug-ins can do whatever they like, so they can implement MIDI feedback as well.

There is growing number of MIDI controllers which support strait feedback, so when feedback has the same spirit as the control (f.e. Btn pressed messages == Btn led on, fader is moved to some position == ask fader to move into that position). But the history shows that is not globally accepted standard (Faderport LED != corresponding buttons, MC LED rings on encoders != just the value). So "generic" feedback make no much sense.

Quote:
Good luck trying to display text info on the LCD or implementing hi-res
controls without using NPRN values, and only with CC/Notes/AT. You'll run out of available CC numbers for all 16 channels quite fast.
hi-res controllers can easily be implemented with CC14, since the only controllers for which that make sense are faders.
With LCD there is no other way then SysEx. But character LCDs will disappear, graphical displays are cheap now and can be used for more than text.
azslow3 is offline   Reply With Quote
Old 12-16-2017, 10:33 AM   #345
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by azslow3 View Post
With LCD there is no other way then SysEx. But character LCDs will disappear, graphical displays are cheap now and can be used for more than text.
Yep. And Michael will still try to control every existing graphic display via midi CC.

Will it be possible to implement similar logic for any controller as shown in this video, using your plugin?
https://www.youtube.com/watch?v=g-07hKTv4Dg
fundorin is offline   Reply With Quote
Old 12-16-2017, 01:12 PM   #346
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
female logic
Thanks for the Kudos !
-Michael
mschnell is online now   Reply With Quote
Old 12-16-2017, 01:16 PM   #347
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
Good luck trying to display text info on the LCD or implementing hi-res controls without using NPRN values, and only with CC/Notes/AT.
No problem at all if you can define the protocol without needing to take care of the outside world.
- You can use multiple midi channels
- you can define pages (e.g. by Program and/or bank change messages)
- regarding text you can first send a series of CCs to define location, color, ..., than you can use a series of Note-ons to define two characters with each of them.
or whatever (just wild examples)

OIn fact I am planning to add a display to may setup, This will be an Arduino board with one or more LCD or OLED panels. The Arduino OS (+ standard library) features receiving Midi messages via USB and hand them over to a user program. But it does not feature SysEx. So the above is exactly what I intend to do.

-Michael
mschnell is online now   Reply With Quote
Old 12-16-2017, 01:23 PM   #348
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
Reaper only provides midi feedback to those controllers, which have specially written csurf plugins for them. All other midi controllers won't get the feedback.
Obviously that is xcatly because there is no thing as the "general"/"standard" controller (maybe I just got your language wrong).

But why "cserve" would "OSCII-Bot" (with the community providing a script each for many ob the available controller boards) not be much more appropriate ?

-Michael
mschnell is online now   Reply With Quote
Old 12-16-2017, 01:36 PM   #349
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
Yep. And Michael will still try to control every existing graphic display via midi CC.
Supposedly not just CC, using other messages as well will be more effective. But just 3 byte messages, avoiding SysEx. And of course not "every existing graphic display" but just the ones I can do the software at the controller's site for. And Midi via USB is fast enough to cope with the overhead.

In fact you can "tunnel" any protocol through any other. Being a software engineer (at work) I did such stuff multiple times.

I am sure that the stuff in the Video can be done by OSCII-Bot programm (now that it does allow for SysEx). But it supposedly is a huge script.

-Michael
mschnell is online now   Reply With Quote
Old 12-16-2017, 02:19 PM   #350
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

I've already built wind midi controller with LCD this year. Arduino based.
Library that I used - https://github.com/olikraus/u8g2
It supports tons of LCD's, many of which may be considered as "generic", based on the controller board.

oscii-bot might work. That's why I'm currently writing a script for it.
The problem is that OSC is very limited, compared to Reaper's API possibilities, while CSurf plugin can access API directly. OSC part in Reaper also have bugs, that might not be fixed in the near future, cause OSC users are still minority in the world of Reaper.
If only there was oscii-bot in csurf form with lua syntax. I'd be a very happy bunny.
fundorin is offline   Reply With Quote
Old 12-16-2017, 03:59 PM   #351
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by fundorin View Post
If only there was oscii-bot in csurf form with lua syntax. I'd be a very happy bunny.
Does CSurf provide a scripting language ? Which one ?

For me doing the OSCII-Bot scripting in EEL was perfectly nice. In fact using Python might offer some additional usable features (like "lists" that can be used as automatic search objects (associative addressing).

This said: Beyond Python can access the Reaper API and forward same to an external Python program that can communicate with a controller board via Midi or OSC (or whatever). This would be the most flexible way to go.

-Michael
mschnell is online now   Reply With Quote
Old 12-16-2017, 04:43 PM   #352
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

https://www.reaper.fm/sdk/plugin/plugin.php
https://www.reaper.fm/sdk/reascript/reascripthelp.html
fundorin is offline   Reply With Quote
Old 12-17-2017, 02:17 AM   #353
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

The links (that I of course do know) don't answer questions about CSurf such as "Does CSurf provide a scripting language ? Which one ?"

Maybe I used misleading wording. I did not ask how CSurf is done, but how CSurf is to be used. I.e. what kind of configuration it needs to be provided to CSurf to make it handle a specific controller board in a specific way. I do know that with OSCII-Bot (or a BeyondPython attached Python program) this would be by a script in the appropriate language (EEL / Python), but I have no knowledge about CSurf (and could not quickly find something answering that question).

-Michael

Last edited by mschnell; 12-17-2017 at 05:41 AM.
mschnell is online now   Reply With Quote
Old 12-17-2017, 04:18 AM   #354
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

C++, utilizing Reaper API - https://github.com/Erriez/reaper_csu...alphatrack.cpp
fundorin is offline   Reply With Quote
Old 12-17-2017, 04:53 AM   #355
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by mschnell View Post
The links (that I of course do know) don't answer questions about CSurf such as "Does CSurf provide a scripting language ? Which one ?"

Maybe I used misleading wording. I did not ask how CSurf is one, but how CSurf is to be used. I.e. what kind of configuration it needs to be provided to CSurf to make it handle a specific controller board in a specific way. I do know that with OSCII-Bot (or a BeyondPython attached Python program) this would be a script in the appropriate language (EEL / Python), but I have no knowledge about CSurf (and could not quickly find something answering that question).

-Michael
CSurf, by which you mean the Reaper SDK suite, exposes an extremely rich and diverse Reaper API in a way that let's a C++ programmer interact with Reaper at an almost "development team member" level -- many many thanks to Justin et al !!

As far as handling a specific controller board in a specific way, that's exactly what the Control Surface Integrator project is all about.

A MESSAGE can be MIDI/OSC/WEB/etc. (here's a typical MIDI MESSAGE -- 0x90 0x08 0x7f).

It's all about attaching that MESSAGE to a specific NAME of your choosing.

The NAME can then be MAPPED to an ACTION, let's say a runScript action, which, in this case, you've loaded with 4 script filenames.

When the MESSAGE is received it RUNS the runScript ACTION, which in this case runs 4 scripts sequentially, an EEL script, 2 Python scripts, and finally a Lua script.
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-17-2017, 05:44 AM   #356
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 9,520
Default

Quote:
Originally Posted by Geoff Waddington View Post
CSurf, by which you mean the Reaper SDK suite
Sorry, I did not know this naming (while I do know about he Reaper C++ API), and from your posts here supposed CSurf would be a tool specific for controller board handling.

So CSurf based controller board specific thingies are "configured by a language" which in fact is C++.

Thanks for enlightenment !

Later you state that CSurf will run a script ("an EEL script, 2 Python scripts, and finally a Lua script"). So I don't understand you before said "If only there was oscii-bot in csurf form with lua syntax. I'd be a very happy bunny". Exactly this seems to be given ?!?!?

-Michael

Last edited by mschnell; 12-17-2017 at 05:52 AM.
mschnell is online now   Reply With Quote
Old 12-17-2017, 06:31 AM   #357
Geoff Waddington
Human being with feelings
 
Geoff Waddington's Avatar
 
Join Date: Mar 2009
Location: Dartmouth, Nova Scotia
Posts: 5,090
Default

Quote:
Originally Posted by mschnell View Post
Sorry, I did not know this naming (while I do know about he Reaper C++ API), and from your posts here supposed CSurf would be a tool specific for controller board handling.

So CSurf based controller board specific thingies are "configured by a language" which in fact is C++.

Thanks for enlightenment !

Later you state that CSurf will run a script ("an EEL script, 2 Python scripts, and finally a Lua script"). So I don't understand you before said "If only there was oscii-bot in csurf form with lua syntax. I'd be a very happy bunny". Exactly this seems to be given ?!?!?

-Michael
A lot that you are attributing to me was actually posted by fundorin.

First of all, as far as I know there is no such thing as CSurf, there is an SDK suite.

When you say configured by a language, I think see what you are asking.
Yes, the language of implementation is C++, but the whole thing is externally configurable via text based maps, so, in a sense, the "configuration language" is text, no programming skills necessary.

As far as running scripts, I have not actually attempted to code this, but since SWS extensions allow for running at least EEL and Lua scripts, and since the SWS source is publicly available, I'm pretty sure we can run at least those two types (not sure about Python).
__________________
Beta software https://stash.reaper.fm/v/38349/CSI%20beta.zip Donate GeoffWaddington.ca
Installation / documentation / source https://github.com/GeoffAWaddington/...ntegrator/wiki
Geoff Waddington is offline   Reply With Quote
Old 12-17-2017, 06:42 AM   #358
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by fundorin View Post
Will it be possible to implement similar logic for any controller as shown in this video, using your plugin?
https://www.youtube.com/watch?v=g-07hKTv4Dg
Yes.

I am thinking to make a limited wrapper for AZ Controller so it can be instantiated inside Ripper... That will take much less time that real version. Obviously only limited subset of Reaper API will be exposed that way, but sufficient to understand what AZ Controller is (and going to be).
azslow3 is offline   Reply With Quote
Old 12-17-2017, 06:57 AM   #359
azslow3
Human being with feelings
 
Join Date: Nov 2017
Location: Heidelberg, Germany
Posts: 797
Default

Quote:
Originally Posted by fundorin View Post
If only there was oscii-bot in csurf form with lua syntax. I'd be a very happy bunny.
LOL. I have thought it is already there. But if not, that is not a huge project to make (CSurf module + MIDI I/O + OSC I/O + Lua interpreter with Ria API, MIDI and OSC bindings).

But I will not start coding... There was a quite sad for me story: one of Sonar users has written "if only we could do MIDI processing in Lua, that will be perfect". I have written such thing (a kind of what Reaper has, http://www.azslow.com/index.php/topic,286.0.html ). The person nor anyone else ever tried the result. I am still PO by that. Sorry.
azslow3 is offline   Reply With Quote
Old 12-17-2017, 08:05 AM   #360
fundorin
Banned
 
Join Date: Feb 2014
Location: Moscow, Russia
Posts: 554
Default

Quote:
Originally Posted by azslow3 View Post
LOL. I have thought it is already there. But if not, that is not a huge project to make (CSurf module + MIDI I/O + OSC I/O + Lua interpreter with Ria API, MIDI and OSC bindings).
It's not, unfortunately. oscii-bot is an external midi<>osc bridge, also written by Justin Frankel (Reaper's dev and owner) in 2013.
There were rumors that it would be a native part of Reaper, but it never happen.

Quote:
Originally Posted by azslow3 View Post
But I will not start coding... There was a quite sad for me story: one of Sonar users has written "if only we could do MIDI processing in Lua, that will be perfect". I have written such thing (a kind of what Reaper has, http://www.azslow.com/index.php/topic,286.0.html ). The person nor anyone else ever tried the result. I am still PO by that. Sorry.
Why not? I don't get it, tbt. I've watched your AZLua video yesterday. It's a good project. For the past several years, I was desperately trying to find a proper tool for Reaper, that would use Lua and be able to operate both OSC and MIDI.
I've tried VSTLua, which is buggy abandonware, that was picked up by some other dev, who doesn't fix bugs. Only keeps it in the current state at his homepage.
There also was Cabbage, that, in theory, can operate OSC and MIDI, but, instead of Lua, uses CSound language, that I've found difficult, outdated and not quite suitable for the task (it's more about audio).
Then, there were GlovePIE, oscii-bot (without sysex support), oscii-bot fork (with buggy sysex), Processing, Python, Max, puredata, some simple tools from Github, Bidule, Usine and tons of other tools,which didn't suit my needs. There were more. I just can't remember all of them.
I even browsed your site in 2015, looking for something appropriate.
The last one was Ctrlr. It's dev added osc support in Ctrlr, by my request. I've started my project there, even drawn working GUI that represented NovationSL. But, it turned out that OSC implementation wasn't capable of properly processing OSC strings, only digits. After a few fixes, Ctrlr's dev given up with his implementation of OSC and decided to switch to native JUCE's OSC, which was introduced in the last version of JUCE, at that time.
That happened a year ago. He continued working on Ctrlr fixes this year, but, no version worked properly with OSC. That's how I was left without any tool for my project to bind together Novation SL and Reaper.
This year, Justin finally added sysex support to oscii-bot and I've started writing my script for it again, after deleting all my previous work in anger.
The process is going fine now, but very slow, due to limitations of EEL2 in arrays functionality, memory access methods and, of cause, because I'm not a programmer. I've found a couple of bugs and limitations in the OSC part of Reaper, though. Not sure if they would be fixed soon.
At the same time, ReaScript doesn't allow devs to access midi ports directly. Only via virtual midi port. Having direct access to midi ports from Reascripts could also solve my problems with lack of midi feedback in Reaper, I suppose.
So, I would definitely prefer (CSurf module + MIDI I/O + OSC I/O + WEB I/O + PlugMaps Lua interpreter with Rea API, MIDI and OSC bindings) to work with, since it could be native and bulletproof solution to my task.
fundorin is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 12:00 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.