Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER General Discussion Forum

Reply
 
Thread Tools Display Modes
Old 06-18-2020, 06:09 AM   #401
nofish
Human being with feelings
 
nofish's Avatar
 
Join Date: Oct 2007
Location: home is where the heart is
Posts: 9,774
Default

Quote:
Originally Posted by helgoboss View Post
Maybe having a feature in ReaLearn to automatically load mappings based on the current combination of "MIDI input device" and "currently focused FX" would be something similar?
Sounds like a cool idea imo.
nofish is offline   Reply With Quote
Old 06-23-2020, 06:42 AM   #402
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default New prerelease

Update: Latest installation instructions and releases can always be found on GitHub: https://github.com/helgoboss/realearn

I've a new prerelease for you: ReaLearn v1.10.0-pre1


Downloads

They are available as zipped archives only at the moment, not as installers.

https://github.com/helgoboss/realearn/releases

(1) Download one of the files on the release page (choose the correct "realearn-*" VST plug-in file depending on your OS and architecture).
(2a) Portable REAPER: Copy the file into directory "<PORTABLE_REAPER_PATH>/UserPlugins/FX".
(2b) Global REAPER installation: Copy the file into directory "<REAPER_RESOURCE_PATH>/UserPlugins/FX". You can look up the REAPER_RESOURCE_PATH via REAPER action "Show REAPER resource path in explorer/finder". Attention, Windows users: If you want to use ReaLearn in both REAPER 32-bit and 64-bit, you currently need to put it into separate VST directories instead!

I'll try to make ReaLearn available via ReaPack in the coming weeks and maybe ditch the installers.


Remarks

This is a complete rewrite of ReaLearn and the biggest changes are under the hood. Although I tested a lot already and in general things should have been improved, it's not unlikely that there will be some hickups here and there or that things which worked before now got worse. Please let me know about it! If you experience an error, please send the error log to info@helgoboss.org (it will be displayed in the REAPER console once an error occurs - you will see it).

Despite of the detail changes, the highlights of this release are definitely:
- Linux support
- Availability as open source (it's already on GitHub but I'll make an extra announcement once the README/documentation is there)

Changes

Since last prerelease (v1.8.0-pre1).

- Made a complete rewrite in Rust programming language
- Published as open source (available on GitHub)
- #193 Added Linux support
- #152 Added target 'Selected track' for navigating within track list
- #71 Added mapping name search
- #179 Added support for non-latin characters (in mapping names and when showing track names)
- #177 Added support for using ReaLearn as monitoring FX
- #178 Added version and build information to UI
- Added possibility to quickly check what a certain knob/fader/encoder/switch actually controls, without actually changing target parameters (implemented by simply making source filter run until pressing 'Stop' and by not filtering unknown sources)
- Added feedback for target 'Track FX preset'
- Added possibility for relative mode to throttle/slow-down relative increments (the 'step count' sliders are now called 'speed', negative values represent throttling)
- Added possibility for absolute and toggle modes to distinguish between short/long button presses ('Length' slider allows you to define press durations on millisecond granularity - obviously works with momentary switches only)
- #42 Improved UI for action target (now uses REAPER's built-in action picker)
- #182 Improved duplicate naming ('Copy of ...')
- #156 Improved UI by immediately reflecting track name changes
- #146 Improved UI by replacing '=>', '<=', 'Up' and 'Down' with actual arrow symbols (macOS and Windows only)
- Improved UI by having better error window if clipboard import is wrong
- Improved UI by instantly updating mapping name and all other values changed via text input field while typing
- Improved feedback by keeping it more in sync with the mapping settings (e.g. also updates while changing target range)
- Improved relative mode by giving the 'step size' / 'step count' (now 'speed') controls an overhaul
- "Improved usability by not letting target fields forget their values when switching type"
- #189 Fixed crashes when removing plug-ins
- #197 Fixed bug that caused feedback and learn not working with master track

Hope you enjoy it.

Benjamin

Last edited by helgoboss; 07-14-2020 at 12:42 PM. Reason: Added GitHub project URL
helgoboss is offline   Reply With Quote
Old 06-23-2020, 08:02 AM   #403
nofish
Human being with feelings
 
nofish's Avatar
 
Join Date: Oct 2007
Location: home is where the heart is
Posts: 9,774
Default

Thank you, will test when I get a chance.

Question:
Is this version fully compatible with the old version?
Iow if I have Reaper projects which use(d) the old version does it work fine with this version or should I keep the old version installed for old projects?
nofish is offline   Reply With Quote
Old 06-23-2020, 09:26 AM   #404
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by nofish View Post
Is this version fully compatible with the old version?
Iow if I have Reaper projects which use(d) the old version does it work fine with this version or should I keep the old version installed for old projects?
It's fully compatible. But once you open and save your REAPER project with the new ReaLearn, you can't open it anymore with the old one, not in all cases at least (but that was always the case). So if you test it with an important REAPER project, save it as a new file or do a backup before.

By the way, this is not a rewrite in a sense that it looks and feels totally different. It's supposed to look and behave like before. Here's a screenshot:

helgoboss is offline   Reply With Quote
Old 06-23-2020, 10:21 AM   #405
J Reverb
Human being with feelings
 
Join Date: Jul 2009
Posts: 788
Default

Thanks for this looking forward to giving it a spin
Very kind of you, thanks !
J Reverb is offline   Reply With Quote
Old 06-23-2020, 10:34 AM   #406
AlMagnifico
Human being with feelings
 
Join Date: Sep 2010
Posts: 12
Default

All download links are not working (404) at the time I'm writing this
AlMagnifico is offline   Reply With Quote
Old 06-23-2020, 11:30 AM   #407
funkster1
Human being with feelings
 
funkster1's Avatar
 
Join Date: Apr 2006
Location: Planet Groove
Posts: 863
Default

Quote:
Originally Posted by AlMagnifico View Post
All download links are not working (404) at the time I'm writing this
Same here ...
__________________
ASUS Notebook N751 i7/4710HQ, 16 GB RAM, 256 GB SSD//512 GB SSD//1 TB HDD/7200 RPM, Win 8.1 fully up to date // Focusrite Scarlett 6i6, KORG Micro X, BEHRINGER BCR2000, Nektar LX88+, KRK Rokit 5, AKG K171 MKII
funkster1 is offline   Reply With Quote
Old 06-23-2020, 01:19 PM   #408
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

So sorry! I knew you guys would come up with an issue that I've not seen, but for sure I wouldn't have thought that it would start with the download step It seems GitHub action artifacts are only visible to logged-in users.

Here's a new attempt:

https://github.com/helgoboss/realearn/releases

Last edited by helgoboss; 06-24-2020 at 05:52 PM. Reason: adjusted download URL
helgoboss is offline   Reply With Quote
Old 06-23-2020, 11:59 PM   #409
MBruzzi
Human being with feelings
 
Join Date: Mar 2020
Posts: 2
Default

Exciting! Realearn is one of the 5 tools I couldn't do without.
MBruzzi is offline   Reply With Quote
Old 06-25-2020, 05:50 PM   #410
brookhinton
Human being with feelings
 
Join Date: Nov 2018
Posts: 18
Default

Helgoboss - can you explain in a bit more detail how the throttling works?

By setting the amounts in the new beta to .15 and 100 I'm able to get wonderful acceleration with a BCR2000 in relative mode that has four speed increments programmed in. I can FINALLY get JUST the right acceleration to have both ultra hi control resolution when I want it, but still sweep quickly to a very high or low value when necessary. But it took a LOT of trial and error to finally arrive at those values.

But my big question! from your release notes, it sounds like the plugin intends to SENSE the actual speed at which the values are received and can then throttle at slower speeds to simulate this? But I tested with a Midi Fighter Twister (which has no acceleration itself, its just 1/127 or 63/65, that's it) and no matter what I do to the step size ranges it simply uses the value in the "min" field.

IF the plugin doesn't introduce throttling/acceleration based on speed of input no biggie at all - I'm delighted to have it work so well with my controllers that DO have built in acceleration. But if it DOES do this based on speed of input values, even if it's not doing it yet, that would be game changing. My Midi Fighter Twisters would become equivalent to my far less robust and far more cumbersome BCR2000!
brookhinton is offline   Reply With Quote
Old 06-26-2020, 03:42 AM   #411
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by brookhinton View Post
Helgoboss - can you explain in a bit more detail how the throttling works?

By setting the amounts in the new beta to .15 and 100 I'm able to get wonderful acceleration with a BCR2000 in relative mode that has four speed increments programmed in. I can FINALLY get JUST the right acceleration to have both ultra hi control resolution when I want it, but still sweep quickly to a very high or low value when necessary. But it took a LOT of trial and error to finally arrive at those values.

But my big question! from your release notes, it sounds like the plugin intends to SENSE the actual speed at which the values are received and can then throttle at slower speeds to simulate this? But I tested with a Midi Fighter Twister (which has no acceleration itself, its just 1/127 or 63/65, that's it) and no matter what I do to the step size ranges it simply uses the value in the "min" field.

IF the plugin doesn't introduce throttling/acceleration based on speed of input no biggie at all - I'm delighted to have it work so well with my controllers that DO have built in acceleration. But if it DOES do this based on speed of input values, even if it's not doing it yet, that would be game changing. My Midi Fighter Twisters would become equivalent to my far less robust and far more cumbersome BCR2000!
Glad to get some feedback and that it works for you.

No, the plug-in doesn't introduce throttling/acceleration based on speed of input. What I mean by slow-down is the following: First, it only works with discrete targets - which you can recognize by the "Step size" label changing into "Speed". So let's assume you have a discrete target (e.g. "FX preset", which is considered discrete because an FX with for example <no preset> + 5 presets has 6 well-defined discrete values it can have, there's nothing inbetween). And let's also assume that you have a controller like MIDI Fighter Twister that doesn't have built-in acceleration. Now you slightly move an encoder clock-wise and your controller sends an increment +1. If the "Speed" slider was at 1 (default), this will just move to the next preset (+1). If the "Speed" slider was at 2, this will jump to the 2nd-next preset (+2). And so on. The new thing: You can set your "Speed" slider to e.g. -2. This is the opposite. It means you need to make your encoder send 2 increments in order to move to the next preset. Or -5: You need to make your encoder send 5 increments to move to the next preset. It essentially lowers the sensitivity of your encoder.

Accelerating based on the speed of input is something I had on my list but I closed it because I was not sure if anybody would even use that. In a very basic way this could be implemented very quickly. But I can imagine it would take longer to get it right - e.g. to find good parameters for tuning the auto-acceleration behavior. If you have any idea how to implement this on a conceptual level, let me know. My naive approach would be to measure the duration between the current and the previous increment sent by the controller and if that duration exceeds a certain number of milliseconds, increase the increment which will be actually applied to the parameter change. But not sure yet which scale (proportional, exponential, logarithmic, etc.) would make sense.
helgoboss is offline   Reply With Quote
Old 06-27-2020, 06:39 PM   #412
brookhinton
Human being with feelings
 
Join Date: Nov 2018
Posts: 18
Default

Thanks, that makes sense.

Alas, as I was fiddling around with various settings... I discovered that the current beta seems to lose track of things, with "min" values disappearing after being edited (the field turns blank and the behavior of the controller/parameter either goes back to default or a previously entered value, even though that value is no longer shown). A bug? Reloading a preset also sometimes doesn't show the saved values- I think all of this happens most often when the "min" value is at some point less than 1 (which in my case it would almost always be since I'm aiming for super hi control res at the slowest speed).

In the previous (non beta) version I recall giving up on this whole step size and acceleration range aspect but it WAS working at first in this beta! So I'm retaining hope!

I have some thoughts to share re how speed detection for non-accelerated controllers could work in general but will follow up with that when I have some time to think it through.

And thanks for the quick reply to my question!
brookhinton is offline   Reply With Quote
Old 06-28-2020, 01:32 AM   #413
RCJacH
Human being with feelings
 
Join Date: Apr 2016
Location: Beijing, China
Posts: 172
Default

Bug Report:

REAPER v6.12 +dev0622/x64
Realearn v1.7.1 Portable

Whenever there is a Realearn instance in the project, I cannot switch any monitoring fx on/off without crashing REAPER displaying Microsoft Visual C++ Runtime Error popup.


Oops I'm sorry I did not check the GitHub release page for newer versions, this issue is no longer valid with the newer version.

Last edited by RCJacH; 06-28-2020 at 01:44 AM.
RCJacH is offline   Reply With Quote
Old 06-28-2020, 02:52 AM   #414
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by brookhinton View Post
Thanks, that makes sense.

Alas, as I was fiddling around with various settings... I discovered that the current beta seems to lose track of things, with "min" values disappearing after being edited (the field turns blank and the behavior of the controller/parameter either goes back to default or a previously entered value, even though that value is no longer shown). A bug? Reloading a preset also sometimes doesn't show the saved values- I think all of this happens most often when the "min" value is at some point less than 1 (which in my case it would almost always be since I'm aiming for super hi control res at the slowest speed).
The current v1.10.0-pre4 has some quite annoying known bugs related to "FX parameter" target (they are fixed already in upcoming pre5), so better ignore this target for now.

Regarding the disappearing values, this sounds a bit like a UI "feature" of ReaLearn that could be a bit confusing though. Does this happen when you change the target? Most values displayed in the "Mode" panel depend in some way on the selected "Target". In case the target that you have selected is invalid (e.g. missing track, missing parameter, missing FX, ...), you will see that most fields in the "Mode" section turn blank - because if the "Mode" UI has no target information, it can't really decide what to display there. But the values are still stored and whenever you come up with a working target again, they should appear again. "Step size" and "Speed" are stored in the same field - so once you change from a discrete target (with e.g. speed -5) to a continuous target, the -5 will be gone and replaced with some (positive) step size. Is it possible you experienced any of these?

Can you send a minimal list of steps how to reproduce this? An RPP would be great, preferably without 3rd-party FX (sent to info@helgoboss.org).

Quote:
Originally Posted by RCJacH View Post
Bug Report:

REAPER v6.12 +dev0622/x64
Realearn v1.7.1 Portable

Whenever there is a Realearn instance in the project, I cannot switch any monitoring fx on/off without crashing REAPER displaying Microsoft Visual C++ Runtime Error popup.


Oops I'm sorry I did not check the GitHub release page for newer versions, this issue is no longer valid with the newer version.
Sorry, the version on the website is hopelessly out-of-date. I want to get this pre-release cycle done as quickly as possible, fixing the high-priority bugs in order to get it up-to-date again.
helgoboss is offline   Reply With Quote
Old 06-29-2020, 02:42 AM   #415
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Quote:
Originally Posted by helgoboss View Post
I've a new prerelease for you: ReaLearn v1.10.0-pre1


- Linux support
Awesome, I'll test it as soon as possilbe! Thank you so much
Sherazad is offline   Reply With Quote
Old 06-29-2020, 03:12 AM   #416
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

I am having a hard time with the building process... Sorry, I'm really not familiar with cargo/rustup, could you give some further hints about the step required to build after the dependency install? Otherwise I can look deeper on how rustup/cargo work but that would be in general quite a barrier to build and install for a general user, I think.

Thanks a lot
Sherazad is offline   Reply With Quote
Old 06-29-2020, 03:45 AM   #417
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by Sherazad View Post
I am having a hard time with the building process... Sorry, I'm really not familiar with cargo/rustup, could you give some further hints about the step required to build after the dependency install? Otherwise I can look deeper on how rustup/cargo work but that would be in general quite a barrier to build and install for a general user, I think.

Thanks a lot
Great that you want to test the Linux version! I guess nobody has done it so far. You don't need to build if you don't want, there are ready-to-use binaries on the GitHub project release page ("realearn-linux-x86_64.so", other architectures aren't supported for now on Linux). If you still want to build, let me quickly outline the necessary steps.

Assumes a fresh Ubuntu 18.04.3 LTS installation (or similar), includes Rust setup:
Code:
# Install basic stuff (might a bit more than actually necessary)
sudo apt update
sudo apt install curl git build-essential pkg-config libssl-dev liblzma-dev llvm-dev libclang-dev clang nasm xorg-dev libxcb-shape0-dev libxcb-render0-dev libxcb-xfixes0-dev -y

# Install Rust (copied from the official Linux installation instructions)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # choose 1 (default)
source $HOME/.cargo/env

# ReaLearn uses some features from nightly Rust, so we need to install that nightly toolchain
rustup default nightly-2020-05-15-x86_64-unknown-linux-gnu

# Clone ReaLearn repository (the "--recurse-submodules" is important!)
git clone --recurse-submodules https://github.com/helgoboss/realearn.git
cd realearn

# Maybe checkout a tag (sometimes master branch doesn't build)
git checkout v1.10.0-pre5

# Build (after that you should have a "librealearn.so" in "target/debug")
cargo build
You will always find the most up-to-date build instructions by consulting the GitHub actions continuous-integration workflow file (this one for Linux) or for release builds the release workflow file (this one for all OS).

Good luck! Please let me know how it goes so I can fix the instructions if something is incorrect. Later this week I want to document dev-related stuff in the README.

Last edited by helgoboss; 06-29-2020 at 10:41 AM. Reason: Fixed git clone command
helgoboss is offline   Reply With Quote
Old 06-29-2020, 06:58 AM   #418
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Update:: Latest installation instructions and releases can always be found on the GitHub project page!

By the way, pre5 is out now.

ReaPack

You can now install ReaLearn pre-releases via ReaPack:
1. Install ReaPack if not done so already
2. Extensions → ReaPack → Import repositories...
3. Copy and paste the repository following URL:

https://github.com/helgoboss/reaper-...ster/index.xml

4. Extensions → ReaPack → Browse packages...
5. Search for realearn
6. Right mouse click on the ReaLearn entry → Install...
7. OK or Apply
8. Restart REAPER

The only case where ReaPack currently is not the way to go is if you are on Windows and use both REAPER 32-bit and 64-bit. Then you manually need to put the 32-bit version in a folder separate from the 64-bit version and add both as VST folders in REAPER preferences.

Encouragement for giving feedback

To everybody who tries it: Your feedback is welcome and very important! The new ReaLearn embraces a fail-fast strategy. That means if it detects that something is wrong, it will intentionally annoy you with an error message instead of hiding the problem and moving on - even if it's just a number that is slightly out of an expected range. Why? First, because it can lead to inaccurate control/feedback behavior. Second, because it's the fastest way to make sure that the problem gets fixed. Reporting that error message to info@helgoboss.org is the single most-important step for making sure ReaLearn has the best-possible quality. Oh, and no worries, when I say "error message", I don't mean it crashes. Things will continue to run (except when it crashes, then it's even more important to report it ).

Last edited by helgoboss; 07-14-2020 at 12:44 PM. Reason: Added link to GitHub project page
helgoboss is offline   Reply With Quote
Old 07-01-2020, 04:42 AM   #419
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Quote:
Originally Posted by helgoboss View Post
Great that you want to test the Linux version! I guess nobody has done it so far. You don't need to build if you don't want, there are ready-to-use binaries on the GitHub project release page ("realearn-linux-x86_64.so", other architectures aren't supported for now on Linux). If you still want to build, let me quickly outline the necessary steps.Good luck! Please let me know how it goes so I can fix the instructions if something is incorrect. Later this week I want to document dev-related stuff in the README.
Thank you so much for the support. This week I am a bit busy so right now I only had the chance to test the installation via reapack which went smooth (ubuntu 20.04) and the plugin works as expected (I also tested a previous version for windows so I know more or less how it is supposed to work (=

As for the compilation instructions I will test them next week or in the weekend so I can give you some feedback about that as well.

Thank you very much!
Sherazad is offline   Reply With Quote
Old 07-09-2020, 12:46 PM   #420
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

If you want to get the most out of ReaLearn, now there's a user guide (up-to-date with latest pre-release):

https://github.com/helgoboss/realearn/releases => Latest release => Assets => realearn-user-guide.pdf

Last edited by helgoboss; 07-12-2020 at 04:09 PM. Reason: Don't point to specific prerelease
helgoboss is offline   Reply With Quote
Old 07-12-2020, 04:07 PM   #421
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

New prerelease: ReaLearn v1.10.0-pre6

Changes compared to pre5:
- Added feedback reset logic when source not in use anymore (e.g. sends 'zero' feedback value if mapping removed)
- Improved behavior when using 'Learn source filter': Also indicate if a source has been touched that is not used in any mapping (by showing an empty mapping list)
- #208 Fixed non-working 'Track must be selected' target condition
- Fixed non-moving slider when slider currently focused
helgoboss is offline   Reply With Quote
Old 07-13-2020, 03:42 PM   #422
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Hello Helgoboss,

thanks for the update.

I have read the user guide and I find it really helpful and well written.

I am using the plugin both under windows and ubuntu 20.04. I have installed it using reapack on both systems. I am using a Novation Launch Control XL as a basic mixer and transport control surface.
Mappign of faders and knobs works perfectly.
This control surface also has led buttons, which I use for instance to select or mute tracks. So there you go, I have a few questions for you:

1) I push a button in absolute mode. When the button is pushed, the led light turns on (yay) and its color is equal to message 127. So the unit is sending to realearn the message B0 01 7F, and realearn is sending back to the unit the message B0 01 7F, all good. I wanted to light the button to a color equivalent to message 100, so I put "x=100" under "feedback transformation", and I would expect a message B0 01 64 to be sent to the unit, but the button gets lit with the same color. Is my reasoning correct? What am I missing?

2) Following the reasoning of point 1, is there any chance to have a feedback transformation formula also for toggle mode? Given that I understood properly what is supposed to do...

3) I would like to set a button to a default color let's say green when I start Reaper (otherwise they are all turned off), and maybe turn red when the track is selected let's say.. Do you see any way to achieve this? It would need the possibily to toggle between values that are not 0; 127 but a configurabile min; max, and a way to send several CC when reaper starts to multiple buttons with value min. Does this make any sense to you?

Thank you so much!
Sherazad is offline   Reply With Quote
Old 07-13-2020, 05:24 PM   #423
Icchan
Human being with feelings
 
Icchan's Avatar
 
Join Date: Dec 2011
Location: Finland
Posts: 611
Default

Quote:
Originally Posted by helgoboss View Post
New prerelease: ReaLearn v1.10.0-pre6
It would be nice if you updated the opening post as well with the link to the newest version, or is it by design hidden within the forum thread?
Icchan is offline   Reply With Quote
Old 07-13-2020, 11:15 PM   #424
SeanTypedThis
Human being with feelings
 
Join Date: Nov 2012
Location: Oakland, CA
Posts: 42
Default

Thanks for the update! Just added the repository and synchronized, and so far all my projects have loaded and functioned without hitch!

It did remind me of a question I had about a possible feature. Is there any way to map a Track's FX Enable button (bypass)? I know it can't be learned, only bypass on individual fx's but not the track itself. My workaround has been to use REAPER actions for individual track fx bypass, however they don't follow if I switch the order of my tracks.

Again, thanks for the update and all of the work!
__________________
Soundcloud
SeanTypedThis is offline   Reply With Quote
Old 07-14-2020, 01:23 PM   #425
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by Sherazad View Post
1) I push a button in absolute mode. When the button is pushed, the led light turns on (yay) and its color is equal to message 127. So the unit is sending to realearn the message B0 01 7F, and realearn is sending back to the unit the message B0 01 7F, all good. I wanted to light the button to a color equivalent to message 100, so I put "x=100" under "feedback transformation", and I would expect a message B0 01 64 to be sent to the unit, but the button gets lit with the same color. Is my reasoning correct? What am I missing?
Try this:
Code:
x = 100 / 127
x and y always take values between 0.0 (corresponds to 0%) and 1.0 (corresponds to 100%). This is a neutral, normalized representation which will be translated to concrete MIDI feedback values depending on the type of source. This is due to one basic idea in ReaLearn: Source, mode and target are independent and don't know much about each other. That makes it easy to extend with new sources/modes/targets. E.g. the mode doesn't know it's controlled via MIDI, it could also receive values from OSC in future.

Probably you want something like this though:
Code:
x = y > 0 ? 100 / 127 : 0
If you just write "x = 100 / 127", it will always send this value, even if your current target value is 0.0 (= off).

Quote:
Originally Posted by Sherazad View Post
2) Following the reasoning of point 1, is there any chance to have a feedback transformation formula also for toggle mode? Given that I understood properly what is supposed to do...
You are right, that would make sense. You could open an issue on GitHub. Almost forgot: In absolute mode you can also influence the min/max feedback value by moving the "Source Min/Max" slider. So in your case you don't even need "Feedback transformation". This is a behavior that would make sense in toggle mode as well.

Quote:
Originally Posted by Sherazad View Post
3) I would like to set a button to a default color let's say green when I start Reaper (otherwise they are all turned off), and maybe turn red when the track is selected let's say.. Do you see any way to achieve this? It would need the possibily to toggle between values that are not 0; 127 but a configurabile min; max, and a way to send several CC when reaper starts to multiple buttons with value min. Does this make any sense to you?

Thank you so much!
If I understand you correctly, then that's achievable via my answers to 1 and 2. This would be easier if the toggle mode would get some features from absolute mode, but right now you can use a feedback-only absolute mode mapping as workaround. I think ReaLearn already sends feedback when the project is loaded, or at least when pressing play ...

Quote:
Originally Posted by Icchan View Post
It would be nice if you updated the opening post as well with the link to the newest version, or is it by design hidden within the forum thread?
Done. Contains link to GitHub release page now.

Quote:
Originally Posted by SeanTypedThis View Post
Thanks for the update! Just added the repository and synchronized, and so far all my projects have loaded and functioned without hitch!

It did remind me of a question I had about a possible feature. Is there any way to map a Track's FX Enable button (bypass)? I know it can't be learned, only bypass on individual fx's but not the track itself. My workaround has been to use REAPER actions for individual track fx bypass, however they don't follow if I switch the order of my tracks.

Again, thanks for the update and all of the work!
This feature would be rather easy to add. Feel free to open an issue on GitHub.
helgoboss is offline   Reply With Quote
Old 07-14-2020, 02:14 PM   #426
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by SeanTypedThis View Post
It did remind me of a question I had about a possible feature. Is there any way to map a Track's FX Enable button (bypass)? I know it can't be learned, only bypass on individual fx's but not the track itself. My workaround has been to use REAPER actions for individual track fx bypass, however they don't follow if I switch the order of my tracks.
I added it, will be in next release. Maybe without feedback though.
helgoboss is offline   Reply With Quote
Old 07-15-2020, 03:31 AM   #427
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Quote:
Originally Posted by helgoboss View Post
Try this:
Code:
x = 100 / 127
Probably you want something like this though:
Code:
x = y > 0 ? 100 / 127 : 0
If you just write "x = 100 / 127", it will always send this value, even if your current target value is 0.0 (= off).
This works perfectly as expected. I could have figured it out from the docs, sorry.


Quote:
Originally Posted by helgoboss View Post
You are right, that would make sense. You could open an issue on GitHub.
Done! Probably at that point also relative mode could be upgraded.

Quote:
Originally Posted by helgoboss View Post
Almost forgot: In absolute mode you can also influence the min/max feedback value by moving the "Source Min/Max" slider. So in your case you don't even need "Feedback transformation". This is a behavior that would make sense in toggle mode as well.
This also works perfectly.
As you mentioned, changing "Source Min/Max" in toggle does not affect feedback level. This also would be quite desirable. Should I open a github issue for this as well?


Quote:
Originally Posted by helgoboss View Post
If I understand you correctly, then that's achievable via my answers to 1 and 2. This would be easier if the toggle mode would get some features from absolute mode, but right now you can use a feedback-only absolute mode mapping as workaround. I think ReaLearn already sends feedback when the project is loaded, or at least when pressing play ...
You are totally right, a feedback message is sent by ReaLearn to the control surface when reaper is started. This correctly updates the button led lights according to the status of the target. If i set minimum source value to 15 and the track is selected, I will see that button is turned on with color corresponding to message 15. Perfect.


Furthermore,

I was trying to simulate the toggle behavior in absolute mode, and for that I need to check the value of the target y in the control transformation formula. Is that possible? I tried a minimal example for testing purposes like y=y=1?1:0 and it always ends up selecting the track, regardless of its status. Likewise y=y=0?1:0 always deselects it. So it seems that at evaluation time the y always takes value 1. Maybe it is expected and I'm just using something I'm not supposed to use. I hope I explained the situation clearly enough.


One last thing: do you have any plan to implement the possibility to send system exclusive messages?

Thank you very much again!
Sherazad is offline   Reply With Quote
Old 07-15-2020, 03:55 AM   #428
SeanTypedThis
Human being with feelings
 
Join Date: Nov 2012
Location: Oakland, CA
Posts: 42
Default

Quote:
Originally Posted by helgoboss View Post
I added it, will be in next release. Maybe without feedback though.
Thanks so much! And thank you for open-sourcing it, I'll be sure to keep my eyes, issues, and requests on the github!
__________________
Soundcloud
SeanTypedThis is offline   Reply With Quote
Old 07-15-2020, 06:40 AM   #429
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

One more thing I noticed (let me know if you prefer me to write these down here or to open an issue on github):
If I select multiple tracks and push a button relative to mute, solo or arm for <Selected> track, then only the first track of the multiple selection gets the desired state.
Sherazad is offline   Reply With Quote
Old 07-15-2020, 01:42 PM   #430
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by Sherazad View Post
This also works perfectly.
As you mentioned, changing "Source Min/Max" in toggle does not affect feedback level. This also would be quite desirable. Should I open a github issue for this as well?
Would be great. Then it will not be forgotten and you can follow the progress and/or discussion.

Quote:
Originally Posted by Sherazad View Post
I was trying to simulate the toggle behavior in absolute mode, and for that I need to check the value of the target y in the control transformation formula. Is that possible? I tried a minimal example for testing purposes like y=y=1?1:0 and it always ends up selecting the track, regardless of its status. Likewise y=y=0?1:0 always deselects it. So it seems that at evaluation time the y always takes value 1. Maybe it is expected and I'm just using something I'm not supposed to use. I hope I explained the situation clearly enough.
There are several reasons this doesn't work.

First, "y=1" is an assignment, not a comparison. You need to use "y==1" instead. See the EEL2 docs. I learned something myself by looking that up just now: == is actually a fuzzy comparison that ignores super small differences in floating point numbers, cool! This is what you should use, definitely. Such a practical feature, thanks @Cockos!

Second, you are not checking the incoming source value "x" at all. You probably don't want the toggle to happen if you release the button (x == 0). So it should rather be:

Code:
y = x == 0 ? y : (y == 0 ? 1 : 0)
Third, unfortunately, y is not set to the target value right now before evaluating the formula. But hey, it would make much sense if it were. So while you are at creating GitHub issues, that's another good one


Quote:
Originally Posted by Sherazad View Post
One last thing: do you have any plan to implement the possibility to send system exclusive messages?
Mmh, haven't planned that so far. What do you need it for? To support a particular controller that uses SysEx for control/feedback?

Quote:
Originally Posted by Sherazad View Post
One more thing I noticed (let me know if you prefer me to write these down here or to open an issue on github):
If I select multiple tracks and push a button relative to mute, solo or arm for <Selected> track, then only the first track of the multiple selection gets the desired state.
If you are already sure it's a bug or feature request, you can post at GitHub. If not or if it's rather a question, discussing here is just fine.

About your question: This is not implemented right now. Another GitHub issue candidate.
helgoboss is offline   Reply With Quote
Old 07-15-2020, 01:43 PM   #431
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

@Sherazad You are testing all of this on REAPER for Linux, right?
helgoboss is offline   Reply With Quote
Old 07-16-2020, 02:40 AM   #432
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Quote:
Originally Posted by helgoboss View Post
Would be great. Then it will not be forgotten and you can follow the progress and/or discussion.
Done


Quote:
Originally Posted by helgoboss View Post
You need to use "y==1" instead.
Embarassing, sorry.

Quote:
Originally Posted by helgoboss View Post
Second, you are not checking the incoming source value "x" at all. You probably don't want the toggle to happen if you release the button (x == 0). So it should rather be:


Third, unfortunately, y is not set to the target value right now before evaluating the formula. But hey, it would make much sense if it were. So while you are at creating GitHub issues, that's another good one
Issue created, all clear! I noticed also that the feedback transformation formula correctly evaluates things like x=x==0?62/127:60/127 , cool!

Quote:
Originally Posted by helgoboss View Post
Mmh, haven't planned that so far. What do you need it for? To support a particular controller that uses SysEx for control/feedback?
I'd gladly avoid it, but apparently (after quite a lot of testing and reading the programmer reference) some of the leds are only controllable via SysEx. It's not really the end of the world though, at least for me, since those are the ones I need the least. Was just curious if it was something you considered.. I think it's not really worth to put too much effort into that, especially cause working out an effective user-friendly design seems a mess to me.

Quote:
Originally Posted by helgoboss View Post
About your question: This is not implemented right now. Another GitHub issue candidate.
Done

Quote:
Originally Posted by helgoboss View Post
@Sherazad You are testing all of this on REAPER for Linux, right?
Exactly. I am testing everything under Ubuntu 20.04, and most of things under windows as well, especially because configuration software for novation components run under windows.

Thank you for the torough relplies, it's really appreciated.

I am adding one or two more issues that I'm not going to discuss here, but one last thing that I'd like to understand if possible:
So ReaLearn works with midi CC messages. When producing the feedback message ReaLearn takes the same Status Byte, meaning sending a CC message on the same channel, and the same event (so the first tow bytes). To determine the third byte, so the actual value byte, realearn performs a few transformation like Source min/max, and evaluates control and feedback transformation formulas. Does that make any sense?

So, if my control surface sends a note on/note off message to control some kind of target, will the feedback be sent as a note on/off message from ReaLearn to the device, or will be still composed as a CC?
I'm asking this because again I am working with a controller (LauchPad mini MKIII) which works natively with note on/off messages.

Cheers!
Sherazad is offline   Reply With Quote
Old 07-20-2020, 03:43 PM   #433
SeanTypedThis
Human being with feelings
 
Join Date: Nov 2012
Location: Oakland, CA
Posts: 42
Default On Input FX without Record ARM?

One minor compatibility question. I was going through a saved project and noticed that some of the Realearn instances I had placed in the input fx were not responding. It took me a minute, but I realized it was because their tracks were not record armed.

It's really not a big deal, but I was just wondering, was there something before that allowed Realearn to function without being record armed while in the input FX that is now deprecated? It's not a feature I need, its probably better to do it the way it is working now just to know there are active FX on that track being monitored (not knowing is probably why it took me a minute to figure out), purely want to know for backwards compatibility purposes when going through other old projects.
__________________
Soundcloud
SeanTypedThis is offline   Reply With Quote
Old 07-22-2020, 09:38 AM   #434
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Quote:
Originally Posted by Sherazad View Post
Issue created, all clear! I noticed also that the feedback transformation formula correctly evaluates things like x=x==0?62/127:60/127 , cool!
That's probably not working the way you imagine. In the feedback transformation formula, x initially has the same value as y (the default). So you should get the same result if you write "x=y==0?62/127:60/127".

Quote:
Originally Posted by Sherazad View Post
I'd gladly avoid it, but apparently (after quite a lot of testing and reading the programmer reference) some of the leds are only controllable via SysEx. It's not really the end of the world though, at least for me, since those are the ones I need the least. Was just curious if it was something you considered.. I think it's not really worth to put too much effort into that, especially cause working out an effective user-friendly design seems a mess to me.
Maybe some pattern where you have a fixed sys-ex part (the source) and one variable part represented as a placeholder (the source value). Example: "F0A0084C{x}F7"

Quote:
Originally Posted by Sherazad View Post
So ReaLearn works with midi CC messages. When producing the feedback message ReaLearn takes the same Status Byte, meaning sending a CC message on the same channel, and the same event (so the first tow bytes). To determine the third byte, so the actual value byte, realearn performs a few transformation like Source min/max, and evaluates control and feedback transformation formulas. Does that make any sense?

So, if my control surface sends a note on/note off message to control some kind of target, will the feedback be sent as a note on/off message from ReaLearn to the device, or will be still composed as a CC?
I'm asking this because again I am working with a controller (LauchPad mini MKIII) which works natively with note on/off messages.

Cheers!
It sends feedback messages corresponding to the source type. E.g. if you select "Note velocity" source, feedback will be sent as note messages.

Quote:
Originally Posted by SeanTypedThis View Post
One minor compatibility question. I was going through a saved project and noticed that some of the Realearn instances I had placed in the input fx were not responding. It took me a minute, but I realized it was because their tracks were not record armed.

It's really not a big deal, but I was just wondering, was there something before that allowed Realearn to function without being record armed while in the input FX that is now deprecated? It's not a feature I need, its probably better to do it the way it is working now just to know there are active FX on that track being monitored (not knowing is probably why it took me a minute to figure out), purely want to know for backwards compatibility purposes when going through other old projects.
Mmh true, there might be some small inconsistencies between the versions, sorry.
Let's assume that ReaLearn is on the input FX chain and the track is NOT armed (the following is *not* true for the normal FX chain!), here are the behaviors:

# ReaLearn >= 1.10.0 (new)

Control: Disabled
Feedback: Disabled

Reason: It won't work because REAPER disables audio processing for input FX if the track is unarmed. The new ReaLearn needs FX audio processing to be enabled for capturing control messages and sending feedback directly from/to MIDI devices.

# ReaLearn < 1.10.0 (old)

Control: Disabled if "MIDI control input" = "<FX input>", otherwise enabled
Feedback: not sure (can't test right now)

Reason: The old ReaLearn hooks into REAPER's global audio processing to capture control messages directly from MIDI input devices and to send feedback, so it doesn't need FX audio processing to be enabled.

I didn't bother to do that for the new ReaLearn because I found the old behavior inconsistent in itself.
helgoboss is offline   Reply With Quote
Old 07-23-2020, 11:01 PM   #435
SeanTypedThis
Human being with feelings
 
Join Date: Nov 2012
Location: Oakland, CA
Posts: 42
Default

Gotcha, thanks for the clear explanation. I completely agree with the way it works now.
While it could be seen as convenient and "foolproof" in some cases to have that feature, I'd rather have Realearn perform reliably and predictably within the context of REAPER, in so much that it behaves the same as other plugins. Just another expected convention to learn; much like the first time you realize you need to turn input monitoring on... =X

Thanks!
__________________
Soundcloud
SeanTypedThis is offline   Reply With Quote
Old 07-29-2020, 03:20 PM   #436
helgoboss
Human being with feelings
 
Join Date: Aug 2010
Posts: 306
Default

Published ReaLearn prerelease v1.10.0-pre7: https://github.com/helgoboss/realearn

Changes:
- Added target 'Track FX all enable' (without feedback)
- #1 Added feedback transformation for relative and toggle mode, too (because feedback is always absolute)
- #3 Added possibility to access current target value in control transformation (initial value of y)
- #2 Improved toggle mode by letting Source Min/Max clamp feedback value just like in other modes
- Improved 'Log debug info' by logging to REAPER console instead of terminal
- #8 Fixed logic error after learning target on master track
- #9 Fixed crashes on logic errors while executing VST plug-in callbacks. Now it just reports an error message instead of aborting REAPER.
helgoboss is offline   Reply With Quote
Old 07-29-2020, 10:10 PM   #437
oldmanstan
Human being with feelings
 
Join Date: Feb 2014
Posts: 15
Default

Quote:
Originally Posted by jackmilas View Post
I have a jerky and slow behaviour of knobs on Behringer X-Touch Mini controlling volume faders, only when feedback is enabled. Before reading this thread this was exactly my thought - that feedback values reach the unit late enough to report an outdated values which is cause the value to revert back a bit causing an erratic behaviour.

Have you found a solution?
Quote:
Originally Posted by jackmilas View Post
I found a workaround to overcome the issue.
The solution is to create a double controller mapping using standard Reaper mapping in the Actions window. Then in Realearn you disable the MIDI input, leaving output operational for feedback only. No more slow and jerky movement.
Oh, I was so glad to see that someone had the same issue as me!

Though, it looks like this fix only works when using the knobs to control REAPER's volume faders.

If I use the X-Touch Mini's knobs to control an FX parameter, I get slow/jittery controls, only when feedback is on.

Noticing that the original dev has been updating this, so maybe I'll be lucky enough to hear there's a fix in the most recent version? Or get a tip to double check an obvious mistake I could have made?

Either way - thank you for your work helgoboss!
oldmanstan is offline   Reply With Quote
Old 07-30-2020, 01:34 AM   #438
Sherazad
Human being with feelings
 
Join Date: Jun 2020
Posts: 30
Default

Quote:
Originally Posted by helgoboss View Post
Published ReaLearn prerelease v1.10.0-pre7: https://github.com/helgoboss/realearn

Changes:
- Added target 'Track FX all enable' (without feedback)
- #1 Added feedback transformation for relative and toggle mode, too (because feedback is always absolute)
- #3 Added possibility to access current target value in control transformation (initial value of y)
- #2 Improved toggle mode by letting Source Min/Max clamp feedback value just like in other modes
- Improved 'Log debug info' by logging to REAPER console instead of terminal
- #8 Fixed logic error after learning target on master track
- #9 Fixed crashes on logic errors while executing VST plug-in callbacks. Now it just reports an error message instead of aborting REAPER.
Awesome, thank you so much!
Sherazad is offline   Reply With Quote
Old 07-30-2020, 04:54 AM   #439
BenK-msx
Human being with feelings
 
BenK-msx's Avatar
 
Join Date: Jun 2008
Location: Whales, UK
Posts: 5,788
Default

Sounds like I am going to have to... Uh... Realearn how I set all this up with lbx's fx tool

Thanks for update tweaks helgoboss.
__________________
JS Super8 Looper Template & intro | BCF2000 uber info Thread | Who killed the Lounge?
BenK-msx is offline   Reply With Quote
Old 07-30-2020, 06:23 AM   #440
ajaym
Human being with feelings
 
Join Date: Aug 2009
Posts: 161
Default

I really must have a play with this exceptional piece of work!. Regarding jitter with feedback, when I wrote a BCR2000 control surface for Reaper waaayyy back some users reported this problem which turned out to be associated with the 'deadband' setting for the BCR. If set too low it processed the feedback message while still being moved. Otherwise with the default the BCR was smart enough to ignore feedback until the source rotary had stopped moving and the deadband timeout had expired.

I don't know if the X-Touch has this configurable. If not, it may be necessary to add this functionality to ReaLearn, perhaps, so that it does not send feedback until an idle time elapses from input ceasing. Otherwise the control 'fights' the feedback.
ajaym 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 09:44 PM.


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