Regarding the BPM sync, I wrote a small script that stores BPM in Slider1 and when BPM changes it sends MIDI message with BPM as parameter.
That part works, MIDI message is sent for every project BPM change.
Then the problem is how to transform it to say ReaComp release param correctly.
ReaComp release is defined with range of 0 to 5000, so 100% = 5000ms, so I need a way to convert from BPM to Reaper Release value.
Transformation (EEL) sounds like it could help, but not quite sure how to use it.
And, btw, thanks for your help.
In the control transformation formula, 0% is 0.0 and 100% is 1.0. Both input (x) and output (y) is interpreted as a number between 0.0 and 1.0. You already learned how your output (ReaComp release) looks in terms of percentages. Now you need to learn how your input looks in terms of percentages (which BPM corresponds to which percentage). This depends how exactly you encoded the BPM as a MIDI message.
not sure where to post this but i will try it here. After updating reaper to the latest version 6.49 OSX , the UI on realearn has been blacked out. I cant find a setting in realearn and am wondering if this is a reaper bug? any help is appreciated. I can see the menus but none of the settings I have made. I also updated to the latest realearn version
not sure where to post this but i will try it here. After updating reaper to the latest version 6.49 OSX , the UI on realearn has been blacked out. I cant find a setting in realearn and am wondering if this is a reaper bug? any help is appreciated. I can see the menus but none of the settings I have made. I also updated to the latest realearn version
This issue has been popping up recently for some Linux and macOS users. It's on the list. Will investigate it in a week or so. For now the workaround is to go back to the older REAPER version.
Just wondering if you ever do Realearn 3, you could perhaps have it be somewhat similar to what Cubase 11 has, in terms of ease of use etc.?
ReaLearn itself will probably always target technical users. Its primary goal is versatility, not user friendliness. But Playtime 2 App will go into this direction. I also like user friendliness, it's just difficult to combine user friendliness and ultimate versatility
ReaLearn itself will probably always target technical users. Its primary goal is versatility, not user friendliness. But Playtime 2 App will go into this direction. I also like user friendliness, it's just difficult to combine user friendliness and ultimate versatility
ReaLearn itself will probably always target technical users. Its primary goal is versatility, not user friendliness. But Playtime 2 App will go into this direction. I also like user friendliness, it's just difficult to combine user friendliness and ultimate versatility
Sounds awesome! And I can only imagine the technical difficulties and the amount of work you face with either of your "babies"!
After setting up my system I felt like there were a couple of additions that would have made it easier. You gave us an "Add One" and "Learn Many" function, would it be hard to add an "Add Source Series" function for adding sequential sources? So if your controller had a series of faders on CC 7 on incremental MIDI channels or a series of incremental CC#s on the same MIDI channel, the user would be able to learn the first and last and have the function fill in the ones between? You could then edit or learn targets after they were added.
Also a spreadsheet type view (with limited or no editing or perhaps just copy and paste) might be nice for getting an overview of user entries and moving them from set to set.
Just a couple of thoughts. Either way thank you so much for this gem.
After setting up my system I felt like there were a couple of additions that would have made it easier. You gave us an "Add One" and "Learn Many" function, would it be hard to add an "Add Source Series" function for adding sequential sources? So if your controller had a series of faders on CC 7 on incremental MIDI channels or a series of incremental CC#s on the same MIDI channel, the user would be able to learn the first and last and have the function fill in the ones between? You could then edit or learn targets after they were added.
Also a spreadsheet type view (with limited or no editing or perhaps just copy and paste) might be nice for getting an overview of user entries and moving them from set to set.
Just a couple of thoughts. Either way thank you so much for this gem.
You can use "Learn many" in the controller compartment (which is for building controller presets), this already works pretty much exactly like here in the Cubase video (learning a bunch of sources without mapping targets).
Thanks. One quick question... CPU wise is there much advantage to placing a large number of controls in a single instance of ReaLearn over using multiple instances with only a few each?
Thanks. One quick question... CPU wise is there much advantage to placing a large number of controls in a single instance of ReaLearn over using multiple instances with only a few each?
No, adding more instances is totally okay, it was built for that. RAM wise there's some difference but also not much (at least with the latest pre-release).
I have some nice mappings to control ReaEQ with my midi controller using realearn (thank you). I have it set to work on any given selected track, but if I'm trying using the midi controller to manipulate a ReaEQ instance that is in an fx chain for a media item on the selected track it will not work. I'd prefer to set it up to control any ReaEQ I have open, regardless of what tracks are selected or if it's in a media item effect chain, or the track effect chain. I've gone through your youtube tutorials and the manual but can't figure this out, must be missing something obvious here.
It seemed like I could use the * wildcard so it'd work on any track, and just check the box that says "fx must have focus", but I might have to put a common character in all my track names for that to work, and still wouldn't work in the media item fx chain. . .
Last edited by Cody Braden; 08-14-2022 at 05:01 PM.
I have some nice mappings to control ReaEQ with my midi controller using realearn (thank you). I have it set to work on any given selected track, but if I'm trying using the midi controller to manipulate a ReaEQ instance that is in an fx chain for a media item on the selected track it will not work. I'd prefer to set it up to control any ReaEQ I have open, regardless of what tracks are selected or if it's in a media item effect chain, or the track effect chain. I've gone through your youtube tutorials and the manual but can't figure this out, must be missing something obvious here.
It seemed like I could use the * wildcard so it'd work on any track, and just check the box that says "fx must have focus", but I might have to put a common character in all my track names for that to work, and still wouldn't work in the media item fx chain. . .
ReaLearn can work on the currently focused FX (see the auto-load tutorial in the user guide for that). However, it doesn't work on take FX so far. There's a feature request already.
ReaLearn can work on the currently focused FX (see the auto-load tutorial in the user guide for that). However, it doesn't work on take FX so far. There's a feature request already.
Thank you, looking forward to the update! sending donation now
I have Betov5 for TouchOSC which comes with a preset for Realearn. However, there is no file browser in the 'Main Preset' section for me to load. So how do I load it?
Hey guys totally new to this. I have set up a partial Companion controller and nothing is reflecting from my plugins that are mapped in Realearn. Not sure what's going on. Mapped plugin is autoload focused and I can control parameters fine. But nothing reflected on companion. Does it have to be a finished controller with every button etc mapped? I would Love to get this to work. Thanks
I have Betov5 for TouchOSC which comes with a preset for Realearn. However, there is no file browser in the 'Main Preset' section for me to load. So how do I load it?
ReaLearn only has a button "Import from clipboard". So you need to copy the content of that preset file to the clipboard and then press "Import from clipboard".
Quote:
Originally Posted by Jkeeton72
Hey guys totally new to this. I have set up a partial Companion controller and nothing is reflecting from my plugins that are mapped in Realearn. Not sure what's going on. Mapped plugin is autoload focused and I can control parameters fine. But nothing reflected on companion. Does it have to be a finished controller with every button etc mapped? I would Love to get this to work. Thanks
Some troubleshooting tips:
- You need to use the controller compartment. Each mapping in the controller compartment represents a knob/fader/button on your controller. Each one of them will be shown in the palette of the projection view (press the pencil button in the projection view top right to see the palette). You can drag them onto the canvas.
- Now you probably want to see what each of the knob/fader/button is assigned to. For this, you need to follow the clean and correct ReaLearn path: Assign the controller mapping to a virtual target (usually done automatically when creating the controller mapping, but you can of course change the virtual target ID later). Then simply create/learn main mappings in the main compartment! Make sure their sources are virtual and correspond to the virtual targets of the controller mappings => ReaLearn does that by default when learning sources in the main compartment. That's it. Sounds more complicated than it is.
ReaLearn only has a button "Import from clipboard". So you need to copy the content of that preset file to the clipboard and then press "Import from clipboard".
ReaLearn only has a button "Import from clipboard". So you need to copy the content of that preset file to the clipboard and then press "Import from clipboard".
Some troubleshooting tips:
- You need to use the controller compartment. Each mapping in the controller compartment represents a knob/fader/button on your controller. Each one of them will be shown in the palette of the projection view (press the pencil button in the projection view top right to see the palette). You can drag them onto the canvas.
- Now you probably want to see what each of the knob/fader/button is assigned to. For this, you need to follow the clean and correct ReaLearn path: Assign the controller mapping to a virtual target (usually done automatically when creating the controller mapping, but you can of course change the virtual target ID later). Then simply create/learn main mappings in the main compartment! Make sure their sources are virtual and correspond to the virtual targets of the controller mappings => ReaLearn does that by default when learning sources in the main compartment. That's it. Sounds more complicated than it is.
I loaded the provided X touch compact controller preset. Then I went through my main and Link them all. I noticed I lost all feedback for my button and encoder lights now. I'm not sure what happened. I tried the feedback settings also in different combinations and I still have no feedback for my lights. Luckily I saved what I had set up before. I guess I can live without the companion app and go back to the way I had it without a controller preset. Everything seemed to be working without a controller preset. Lights feedback Etc. Thanks for your help
I loaded the provided X touch compact controller preset. Then I went through my main and Link them all. I noticed I lost all feedback for my button and encoder lights now. I'm not sure what happened. I tried the feedback settings also in different combinations and I still have no feedback for my lights. Luckily I saved what I had set up before. I guess I can live without the companion app and go back to the way I had it without a controller preset. Everything seemed to be working without a controller preset. Lights feedback Etc. Thanks for your help
I don't think I ever published an official X-Touch Compact preset, so not sure what that is exactly. I can only speak for the "Mackie Control" preset, in which feedback for encoder and button LEDs should work simply by learning the source. And LCD feedback as described in the "Controllers" document. Did you have a look at that? Right mouse click in header panel, Help, Controllers.
but I can't seem to send these messages any other way. For e.g. I'd like to send osc using OSC Target but I can't make sense of the available options. Where do I enter the value? (in my case, OFF, after /ch/01/config/color address)
I also tried sending it directly as a MIDI sysex message with MIDI: Send message target but that has no effect
@Fergler I don't think I built a limitation of how many (separate) sys-ex messages you can send on mapping activation. So I assume it's just too much at once for your device. But I'm not entirely sure, maybe there's some OS limit or so, you could check yourself with a MIDI logger, e.g. MIDIOX.
But chances are that on_activate and on_deactivate is not what you want. Do you want to send feedback messages in response to some events that occur in REAPER? Then you should use source "Raw MIDI" or "MIDI script". Or in case of OSC, the OSC source. Then a REAPER event (the target) would trigger a MIDI/OSC message to be sent to the source. That's called feedback direction in ReaLearn.
I'm trying to blacken all channels on Behringer X32 then colour and name only some channels, when the ReaLearn mapping is chosen, reflecting the current FX that is open and the sliders/knobs I've chosen to map in ReaLearn to some console faders.
Then when it loses focus, reblacken all the channels
So far all those features work but I am getting misbehaviour from the X32 in response. It's not just that only 5 OSC messages are received, it is also sometimes not receiving one of them (and always that one.. curiously..).
I'm sure multiple incoming messages are not a problem because of videos like this haha:
I'm trying to blacken all channels on Behringer X32 then colour and name only some channels, when the ReaLearn mapping is chosen, reflecting the current FX that is open and the sliders/knobs I've chosen to map in ReaLearn to some console faders.
Then when it loses focus, reblacken all the channels
So far all those features work but I am getting misbehaviour from the X32 in response. It's not just that only 5 OSC messages are received, it is also sometimes not receiving one of them (and always that one.. curiously..).
I'm sure multiple incoming messages are not a problem because of videos like this haha:
I will try with an OSC connection over ethernet as suggested in that post, but so far I've been doing this over the USB interface connection.
edit: so using a genuine OSC connection via Ethernet, I can send single OSC messages, but am unable to send either more than one at once (without one mapping per) and cannot send strings (no where to enter string value). Am I missing something obvious?
Found a workable solution, and actually it's much easier to set up!
Turns out you can blast program changes at an X32 and channel 1 corresponds to scenes, 2 to snippets.
So no OSC needed, I just have the usual learned parameters and then I've gone through with X32 Edit and created snippets that blank out the board except for the channels I want to represent my parameters. Sending midi program change on mapping activation for the corresponding snippet, then sending the deactivation that blanks the board when the FX is closed. It's really quite beautiful to behold after I was just about to lose hope
Hi Benjamin, and thanks for your great work! I have been using the older version of realearn with midifighter twister and roland a-500 for some years, but only for controlling plugins and functions inside Reaper..totally stable and flawless operation!! Great!!
I may definitely have missed something , but studying all I can find, I cannot retrieve any form of description anywhere on how to control a hardware synth from Realearns mappings..or anything outside Reaper receiving CC´s / NRPN´s from/via Realearn...
Could you spare a couple of minutes and tell me if this is possible, and in that case point me in a direction to how?
Found a workable solution, and actually it's much easier to set up!
Turns out you can blast program changes at an X32 and channel 1 corresponds to scenes, 2 to snippets.
So no OSC needed, I just have the usual learned parameters and then I've gone through with X32 Edit and created snippets that blank out the board except for the channels I want to represent my parameters. Sending midi program change on mapping activation for the corresponding snippet, then sending the deactivation that blanks the board when the FX is closed. It's really quite beautiful to behold after I was just about to lose hope
Cool. I wish I had this beast at home to try this myself. One day
Quote:
Originally Posted by BITT
Hi Benjamin, and thanks for your great work! I have been using the older version of realearn with midifighter twister and roland a-500 for some years, but only for controlling plugins and functions inside Reaper..totally stable and flawless operation!! Great!!
I may definitely have missed something , but studying all I can find, I cannot retrieve any form of description anywhere on how to control a hardware synth from Realearns mappings..or anything outside Reaper receiving CC´s / NRPN´s from/via Realearn...
Could you spare a couple of minutes and tell me if this is possible, and in that case point me in a direction to how?
thanks again
and best regards
Audun Kleive
Norway
Hi! What exactly do you want to control? And how?
If you want to control your external synth in response to events in REAPER (e.g. track armed), then ReaLearn's feedback direction is your friend, which means that the signal flows from the target to the source. You would then use MIDI sources "MIDI CC" for example, or "Raw MIDI" and "MIDI script" if you need to send sys-ex.
If you want to control your external synth in response to button presses / fader moves (or whatever) on your controller, then target "MIDI: Send message" is your best bet. However, then you could just as well use a custom-built REAPER JS FX, that would be more powerful.
Hi Benjamin, thank you so much for creating ReaLearn, I can't begin to tell you how impressive its power is!
I only just recently began messing around with all the possibilities it provides. Particularly, I recently found out Softube Console 1 has a MIDI mode and have been trying to figure out a way to use ReaLearn to enable it to control 3rd party/custom channel strips.
That said, it seems that in MIDI mode it has an unfortunate limitation, it functions in absolute mode and the encoders, despite being endless, operate in increments of 3 (or 1 if the shift/fine adjust button is held down). While I'm able to get the feedback to work so that parameter jumps are avoided, I really don't like how coarse the adjustments are. Or that in some mappings, for example Pro-Q3, I can't get a band's gain to be 0.0dB.
Would something like the Control Transformation option be able to modify and help with that?
Alternatively, Console 1's native mode uses SysEx to control its plug-in. If I learn that as a source, it seems I can only grab the value of one direction of the encoders, is there maybe a way to insert a "wildcard" of sorts into the pattern? I had a look in the user guide, but to be honest, it went way over my head.
Hi Benjamin, thank you so much for creating ReaLearn, I can't begin to tell you how impressive its power is!
I only just recently began messing around with all the possibilities it provides. Particularly, I recently found out Softube Console 1 has a MIDI mode and have been trying to figure out a way to use ReaLearn to enable it to control 3rd party/custom channel strips.
That said, it seems that in MIDI mode it has an unfortunate limitation, it functions in absolute mode and the encoders, despite being endless, operate in increments of 3 (or 1 if the shift/fine adjust button is held down). While I'm able to get the feedback to work so that parameter jumps are avoided, I really don't like how coarse the adjustments are. Or that in some mappings, for example Pro-Q3, I can't get a band's gain to be 0.0dB.
Would something like the Control Transformation option be able to modify and help with that?
Funny you mention that, I investigated exactly this issue with another Softube Console 1 user only recently. It's a weird way to implement MIDI mode on their side but we can fix it.
The official Softube way (how they intended it) is to press the "Fine Adjust" button while you move the knob. That doesn't give you relative mode but at least increments of 1, not 3. Still, it's not in the spirit of ReaLearn to depend on such hardware-specific features, plus, maybe holding the "Fine Adjust" button all the time can get quite annoying.
So I came up with this control transformation:
Code:
// Parameters
step = 0.001;
// Code
x > prev_x || x == 1 ? (
y += step;
) : x < prev_x || x == 0 ? (
y -= step;
);
prev_x = x;
This turns it into relative control. It relies on the fact that Console 1 - fortunately - keeps sending messages even when 0 or 127 is reached. You can't use the step/speed sliders to influence the step size, you need to adjust it in the formula. I should add the possibility to let control transformation formulas output increments (https://github.com/helgoboss/realearn/issues/800). Then it would also be possible to put that "make-relative" logic into the "Controller" compartment, which would make much sense. Then you could use it in the main compartment just like any other (natively relative) encoder.
Quote:
Originally Posted by luiza177
Alternatively, Console 1's native mode uses SysEx to control its plug-in. If I learn that as a source, it seems I can only grab the value of one direction of the encoders, is there maybe a way to insert a "wildcard" of sorts into the pattern? I had a look in the user guide, but to be honest, it went way over my head.
Cool that it also sends sys-ex. You might get some use from that by using the "Raw MIDI" source. You can insert a wildcard. I doubt that it would be of much help, it depends on what it sends as variable bytes? Let me know which messages it sends when moving the encoder.
Funny you mention that, I investigated exactly this issue with another Softube Console 1 user only recently. It's a weird way to implement MIDI mode on their side but we can fix it.
The official Softube way (how they intended it) is to press the "Fine Adjust" button while you move the knob. That doesn't give you relative mode but at least increments of 1, not 3. Still, it's not in the spirit of ReaLearn to depend on such hardware-specific features, plus, maybe holding the "Fine Adjust" button all the time can get quite annoying.
So I came up with this control transformation:
Code:
// Parameters
step = 0.001;
// Code
x > prev_x || x == 1 ? (
y += step;
) : x < prev_x || x == 0 ? (
y -= step;
);
prev_x = x;
This turns it into relative control. It relies on the fact that Console 1 - fortunately - keeps sending messages even when 0 or 127 is reached. You can't use the step/speed sliders to influence the step size, you need to adjust it in the formula. I should add the possibility to let control transformation formulas output increments (https://github.com/helgoboss/realearn/issues/800). Then it would also be possible to put that "make-relative" logic into the "Controller" compartment, which would make much sense. Then you could use it in the main compartment just like any other (natively relative) encoder.
Took some fiddling, but leaving the controller side in 'Normal' feedback mode (I originally had it in 'Send feedback after control' mode), putting the code in the main compartment mapping and setting that feedback mode to 'Prevent echo' did the trick! Thanks for that
Otherwise, yes, being able to set this in the Controller compartment to reuse this default behavior would be amazing.
Quote:
Originally Posted by helgoboss
Cool that it also sends sys-ex. You might get some use from that by using the "Raw MIDI" source. You can insert a wildcard. I doubt that it would be of much help, it depends on what it sends as variable bytes? Let me know which messages it sends when moving the encoder.
Took some fiddling, but leaving the controller side in 'Normal' feedback mode (I originally had it in 'Send feedback after control' mode), putting the code in the main compartment mapping and setting that feedback mode to 'Prevent echo' did the trick! Thanks for that
Otherwise, yes, being able to set this in the Controller compartment to reuse this default behavior would be amazing.
Oh right, "Prevent echo". Forgot about that. Without that, Console1 gets confused.
About those sys-ex messages. Are they always the same? If yes, they could be turned into relative messages in the controller compartment and be used just like a real encoder in the main compartment, without any FR and without any wildcards.
This exposes the "fixed" encoder as virtual control element "Multi 1", so you can now go and use it just like a normal encoder in the main compartment. E.g. by using "Learn source".
I'm not sure though how feedback works in Console1 native mode. Can't try it because I don't have this thing.
awesome info here, thanks. a side note on the "fine adjust" button, I use a little piece of metal and a magnet to hold it down when I want: https://youtube.com/shorts/OWYUVapRxv0
Oh right, "Prevent echo". Forgot about that. Without that, Console1 gets confused.
About those sys-ex messages. Are they always the same? If yes, they could be turned into relative messages in the controller compartment and be used just like a real encoder in the main compartment, without any FR and without any wildcards.
This exposes the "fixed" encoder as virtual control element "Multi 1", so you can now go and use it just like a normal encoder in the main compartment. E.g. by using "Learn source".
I'm not sure though how feedback works in Console1 native mode. Can't try it because I don't have this thing.
Aaah very interesting, so from the looks of it (I haven't gotten a chance to try it out yet) basically we have 2 mappings with the same ID, which counts as one,right? Will definitely mess around with this and see what I can do. If I can get the feedback to work it'd be the best of both worlds! Thanks!
@Tycho, very ingenious solution! Having had a quick glimpse of your C1 labels, I'd be curious to see how you set it up
when in sysex mode the encoders are sending two different values, one for clockwise and the other counterclockwise. for example, this is the "input gain" knob:
is there a way to make this work without the FR? I was able to import the code from clipboard into the controller compartment and it showed up as increment / decrement but I was unable to get it to function properly. when I try to learn source in main compartment both directions show as "decrement". I have imported this code:
@luiza: will send a full image of mappings with explanation tomorrow. will upload the realearn profile once I finish it, but still have some refinements to go.
I was able to get the code helgoboss sent in his previous post working for native mode. In the Main compartment it shows the source "Decrement + 1", I mapped it a channel's volume fader to test and it moved the fader nicely. However, as expected there was no feedback. I tried messing around with different settings and mappings, but I wasn't able to get it to work. Unfortunately, there's also no documentation around for C1's native mode SysEx messages.
Back in MIDI mode though, C1's buttons behave like toggle buttons, it seems. I'm able to get them to fire an action on press with either selecting the "toggle button" Character, or using this the Control Transformation:
Code:
x ==0 ? (y = 1) : ( y = 1)
However, the LEDs will still light up as if representing a physical toggle button. I tried simply forcing the LED to stay off (since the action didn't have a toggle state anyway), by going simply `x = 0` in feedback transformation, both in the Main and in the controller side, but that didn't seem to work. I also tried `y = 0` just in case, but no dice. Am I missing something?
@Tycho Really cool setup, thanks for sharing! Definitely love the editing mode.
yeah that was my experience with it too. for now everything is working fine with a couple tweaks so I think I'm going to move forward with my current config and finalize a couple things. will post everything when I'm done