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

Reply
 
Thread Tools Display Modes
Old 02-27-2023, 08:36 AM   #3281
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by KennyG5000 View Post
Thanks both Puck and Helgoboss for the pointers with nks and presets, I am very keen to explore this further (saw the other thread you mentioned Puck, a lot of helpful stuff there too!). I am old enough to remember getting Kore 1 way back and there was so much potential there with the ksd format; never really clicked with Komplete Kontrol as the software felt like a step backwards from Kore 2, but if you can access the presets natively (and have the controllers correctly mapped in Open Stage Control) then that is huge! Actually really excited to see if I can get this working (basically would be a long wanted replacement for Kore!). Great stuff! Quick question, does Reaper working alongside Realearn let you save new presets in the nks format without needing Komplete Kontrol, or is this not currently possible?
Agreed, I liked the idea of Kore back in the day and was somewhat disappointed by Komplete Kontrol. Still, Kore had the same issue as Komplete Kontrol - it was just a wrapper plug-in.

It's not currently possible to let ReaLearn save presets in NKS format. However, I think it would be possible to implement, at least with 3rd-party plug-ins (non-NI).
helgoboss is offline   Reply With Quote
Old 02-27-2023, 08:40 AM   #3282
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by X-Raym View Post
@helgoboss
Thx for your feedback!


BTW I realized something,
Did you know that REAPER API has Joystic support ?


If you want to add native Joystic support to Realearn source, here how to use it:
https://github.com/ReaTeam/ReaScript...API%20test.lua


(Usual way requires using a middleware for joystic to keyboard/MIDI - which may be more flexible anyway).

(note: I absolutely dont know any script which take care of this API. not sure there is any demand for such input support in realean ^^)
I was aware of REAPER's joystick support in general and always found it interesting but never ended up using it in practice. However, I was not aware of the ReaScript functions. Could be nice to add a joystick source to ReaLearn, even only for the sake of completeness.
helgoboss is offline   Reply With Quote
Old 02-27-2023, 08:52 AM   #3283
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by indigomirage View Post
Hi there -

I'm trying to create a conditional activation EEL2 script for a mapping group where the group should only be activated if there is an enabled FX on the track with a specific name. Ideally if the fx is in focus too, but I can handle that in the target config.

Basically, the mapping will translate a midi cc from once value to another, but I only want this to happen when that FX is in place. Since 'MIDI: Send Message' targets cannot be made contingent on a specific track, etc., I have to manually enable/disable the section.

Is this possible? I think I just need to see to sample EEL scripts to help get me started...

Thanks,

EDIT - I have come to the conclusion that the EEL2 scripts will not have the overall reaper API/project in scope, so this is probably a non-starter.
Yes, you can do that. You need to use activation condition "When target value met" and then pick a mapping that has target "FX: Enable/disable" (if "enabled" is the condition of interest) or "FX: Open/close" (if "focused" is the condition of interest). Then put "y > 0" in the expression field.

You don't need the REAPER API in scope for this to work.

Quote:
Originally Posted by indigomirage View Post


I think the best solution (and this is perhaps a feature request) would be to extend the 'Auto-Load' feature to i) apply to groups and ii) allow further specification of a name filter (with wildcard/asterisk). Since many of the mappings/parameter control I'm doing with Realearn applies to various Kontakt instances, simply filtering on FX-Type is not sufficient.
It's already possible to take the preset name into consideration, in case that suites you (I implemented that a long time ago because a Kontakt user requested it). Menu => Global FX-to-preset links => Choose an existing one => Edit FX ID: There you have a few options available. There's also "FX name" but I think this refers to the original FX name, not the customized one. I could easily add that though. Need an FR on GitHub.

I don't understand "(i) apply to groups". What do you mean?

Quote:
Originally Posted by indigomirage View Post

Also - Is there a way to have projection display the name of the FX parameter being controlled as a target, rather than just 'FX_Param'. Since the FX often changes the parameter name for a given parameter id, this could be extremely useful!

Cheers,
This was requested already a few times. I will do an overhaul of the projection app when it becomes part of the Playtime app, but that will still take a while.
helgoboss is offline   Reply With Quote
Old 02-27-2023, 08:53 AM   #3284
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by souk21 View Post
Hello @helgoboss, hope you're doing well.

I was wondering if it would be possible to create an action "Open first ReaLearn instance and filter by source".
The goal would be to wiggle a controller and quickly be able to see a list of bindings for this particular source.

Another use case is deleting or duplicating a binding, but "ReaLearn: Find first mapping by source" opens the edit window from which you can't do either

Thanks again for all the work you do for this amazing extension!
I could add such an action but I'll need an FR (GitHub).
helgoboss is offline   Reply With Quote
Old 02-27-2023, 08:59 AM   #3285
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by KennyG5000 View Post
Is there a way to cycle through the different banks of parameters of each nks preset (the banks with each of the mapped 8 controllers in) or do you just need to sort that out at the controller side?
ReaLearn lets you access higher banks by using indexes greater than 7 (bank one = indexes 0 - 7, bank 2 = indexes 8 - 15, and so on). With that knowledge and the ability to use ReaLearn parameters in dynamic expressions (p[0] for example), you can build what you want. Don't forget to give your ReaLearn parameter a value count (Menu => Compartment parameters). Otherwise it will have values between 0.0 and 1.0, which is counter-intuitive if you want to deal with integers.

Quote:
Originally Posted by KennyG5000 View Post

Also, I don't know whether it is currently possible (but would be awesome!) but is there a way to send the 'headings' of the parameters (eg where in the macro controls in Komplete Kontrol there are section headings such as 'filter', 'OSC 1/2' etc), I am guessing they must be stored in the nks data, but don't know if Realearn can currently access this.


Finally, wondered if Realearn currently has a way to filter to just the 'user' presets of Komplete Kontrol? (as that would be really useful too!)

As always, any help greatly appreciated!
No, but also something I could add (a text expression placeholder). Please add both requests to https://github.com/helgoboss/realearn/issues/743 as comment.
helgoboss is offline   Reply With Quote
Old 02-27-2023, 10:30 AM   #3286
indigomirage
Human being with feelings
 
Join Date: Oct 2020
Posts: 78
Default

Quote:
Originally Posted by helgoboss View Post
Yes, you can do that. You need to use activation condition "When target value met" and then pick a mapping that has target "FX: Enable/disable" (if "enabled" is the condition of interest) or "FX: Open/close" (if "focused" is the condition of interest). Then put "y > 0" in the expression field.

You don't need the REAPER API in scope for this to work.



It's already possible to take the preset name into consideration, in case that suites you (I implemented that a long time ago because a Kontakt user requested it). Menu => Global FX-to-preset links => Choose an existing one => Edit FX ID: There you have a few options available. There's also "FX name" but I think this refers to the original FX name, not the customized one. I could easily add that though. Need an FR on GitHub.

I don't understand "(i) apply to groups". What do you mean?



This was requested already a few times. I will do an overhaul of the projection app when it becomes part of the Playtime app, but that will still take a while.
Hi there - thanks for the detailed response.

I'm not sure the 'Target value met' approach will work here - the ultimate goal is to enable a mapping group (that's what I meant wrt Groups) if it has focus, and if it has a specific name pattern (ie - via wildcard '*'). The name being a name that I give the FX on the track. This makes it possible to tweak the name and ignore it if needed. Preset name, though handy isn't quite what I'm after (especially with other FX, such as synths within Reaktor, etc)

Basically, I'm putting Realearn a large number of mapping groups on my monitoring FX and having the maps become active when FX is in focus and the name matches a given pattern.

Over the weekend I came up with a way that works by doing this at the individual map level. I set Track to 'All named' '*', and the FX Named '*Monark*' (or whatever), and FX must have focus checked.

This works, but it's not as efficient as being able to specify an Auto Load at the mapping group level, but using a FX name pattern and Focus. It also has the benefit of activating/de-activating maps of different types besides FX: Set parameter value as part of a group, based on focused FX with a given name pattern (ie - midi sends and similar).

In the end I managed to get it working for my immediate needs.

Should I add a FR on github? Not entirely sure on your preferred workflow.

Definitely appreciating the power of this tool - I can configure new FX with a new group on realearn on my FX chain and it'll be there whenever I load it again - well done!

Cheers!
indigomirage is offline   Reply With Quote
Old 02-27-2023, 11:05 AM   #3287
brummbear
Human being with feelings
 
brummbear's Avatar
 
Join Date: May 2016
Location: out west
Posts: 286
Default

Quote:
Originally Posted by helgoboss View Post
It's not currently possible to let ReaLearn save presets in NKS format. However, I think it would be possible to implement, at least with 3rd-party plug-ins (non-NI).
the two single best sources to understand NI's NKS format are in my mind:

https://github.com/PresetMagician/PresetMagician (I know you are aware of this one)

and

https://denivel.blogspot.com/search/label/NimBank

The Python source code of NimBank reveals additional details about NKS, including the headers which would allow to disguise your own User NKS presets as NI native ones.
brummbear is offline   Reply With Quote
Old 02-27-2023, 03:18 PM   #3288
souk21
Human being with feelings
 
souk21's Avatar
 
Join Date: Mar 2021
Posts: 410
Default

Quote:
Originally Posted by helgoboss View Post
I could add such an action but I'll need an FR (GitHub).
Amazing, I filed an issue there

Thanks !
souk21 is offline   Reply With Quote
Old 02-27-2023, 05:05 PM   #3289
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by indigomirage View Post
Hi there - thanks for the detailed response.

I'm not sure the 'Target value met' approach will work here - the ultimate goal is to enable a mapping group (that's what I meant wrt Groups) if it has focus, and if it has a specific name pattern (ie - via wildcard '*'). The name being a name that I give the FX on the track. This makes it possible to tweak the name and ignore it if needed. Preset name, though handy isn't quite what I'm after (especially with other FX, such as synths within Reaktor, etc)

Basically, I'm putting Realearn a large number of mapping groups on my monitoring FX and having the maps become active when FX is in focus and the name matches a given pattern.
Auto-loading of groups is not going to happen. Groups are not intended as a unit of reuse in ReaLearn. Presets are. Groups can't be saved/loaded, presets can. Why would you want to use groups when you have presets? Groups are just a feature to organize things *within* a preset.

That being said, you can achieve what you want by giving the group itself a "Target value met" condition. Here's an example that activates the group "ReaDelay" whenever a ReaDelay effect is focused and analogously with ReaSynth:

Code:
{
    kind = "MainCompartment",
    version = "2.14.3",
    value = {
        groups = {
            {
                id = "AX0_TWwK5BIrxsKnILEVE",
                name = "ReaDelay",
                activation_condition = {
                    kind = "TargetValue",
                    mapping = "jqnPKwe6hB5PX0KNnbgRO",
                    condition = "y > 0",
                },
            },
            {
                id = "sIq7ahWLaxQGqTnu0O1W5",
                name = "ReaSynth",
                activation_condition = {
                    kind = "TargetValue",
                    mapping = "PgAsvyQ6uzFQfL8TJJAMu",
                    condition = "y > 0",
                },
            },
            {
                id = "xn6ZYYzn6WSoBj-ftQdKL",
                name = "Utility mappings",
            },
        },
        mappings = {
            {
                id = "jqnPKwe6hB5PX0KNnbgRO",
                name = "ReaDelay focus",
                group = "xn6ZYYzn6WSoBj-ftQdKL",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "FxVisibility",
                    fx = {
                        address = "ByName",
                        chain = {
                            address = "Track",
                            track = {
                                address = "ByName",
                                name = "*",
                                allow_multiple = true,
                            },
                        },
                        name = "*ReaDelay*",
                        allow_multiple = true,
                    },
                },
            },
            {
                id = "PgAsvyQ6uzFQfL8TJJAMu",
                name = "ReaSynth focus",
                group = "xn6ZYYzn6WSoBj-ftQdKL",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "FxVisibility",
                    fx = {
                        address = "ByName",
                        chain = {
                            address = "Track",
                            track = {
                                address = "ByName",
                                name = "*",
                                allow_multiple = true,
                            },
                        },
                        name = "*ReaSynth*",
                        allow_multiple = true,
                    },
                },
            },
            {
                id = "yJadcgmJPhFqSw85pxJWi",
                name = "3",
                group = "sIq7ahWLaxQGqTnu0O1W5",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "Dummy",
                },
            },
            {
                id = "HW8NZerGA1wIpQQG2LQyb",
                name = "4",
                group = "AX0_TWwK5BIrxsKnILEVE",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "Dummy",
                },
            },
        },
    },
}
helgoboss is offline   Reply With Quote
Old 02-27-2023, 05:19 PM   #3290
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by brummbear View Post
the two single best sources to understand NI's NKS format are in my mind:

https://github.com/PresetMagician/PresetMagician (I know you are aware of this one)

and

https://denivel.blogspot.com/search/label/NimBank

The Python source code of NimBank reveals additional details about NKS, including the headers which would allow to disguise your own User NKS presets as NI native ones.
Ah cool, thanks brummbear. I was not aware of NimBank. Any chance you know how to construct the VST preset chunk out of a native NI preset file (e.g. *.nfm8 for FM8)? That's the most pressing issue at the moment. With *.nksf and *.nksfx it's quite easy/documented, just extracting the PCHK RIFF chunk from a RIFF file and using the largest part of it as VST preset chunk. With *.nfm8, *.nki and all the others I don't know. But I also haven't tried again during the last months. This project looks very promising when it comes to understanding the NI file formats: https://github.com/monomadic/ni-file
helgoboss is offline   Reply With Quote
Old 02-27-2023, 05:47 PM   #3291
indigomirage
Human being with feelings
 
Join Date: Oct 2020
Posts: 78
Default

Quote:
Originally Posted by helgoboss View Post
Auto-loading of groups is not going to happen. Groups are not intended as a unit of reuse in ReaLearn. Presets are. Groups can't be saved/loaded, presets can. Why would you want to use groups when you have presets? Groups are just a feature to organize things *within* a preset.

That being said, you can achieve what you want by giving the group itself a "Target value met" condition. Here's an example that activates the group "ReaDelay" whenever a ReaDelay effect is focused and analogously with ReaSynth:

Code:
{
    kind = "MainCompartment",
    version = "2.14.3",
    value = {
        groups = {
            {
                id = "AX0_TWwK5BIrxsKnILEVE",
                name = "ReaDelay",
                activation_condition = {
                    kind = "TargetValue",
                    mapping = "jqnPKwe6hB5PX0KNnbgRO",
                    condition = "y > 0",
                },
            },
            {
                id = "sIq7ahWLaxQGqTnu0O1W5",
                name = "ReaSynth",
                activation_condition = {
                    kind = "TargetValue",
                    mapping = "PgAsvyQ6uzFQfL8TJJAMu",
                    condition = "y > 0",
                },
            },
            {
                id = "xn6ZYYzn6WSoBj-ftQdKL",
                name = "Utility mappings",
            },
        },
        mappings = {
            {
                id = "jqnPKwe6hB5PX0KNnbgRO",
                name = "ReaDelay focus",
                group = "xn6ZYYzn6WSoBj-ftQdKL",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "FxVisibility",
                    fx = {
                        address = "ByName",
                        chain = {
                            address = "Track",
                            track = {
                                address = "ByName",
                                name = "*",
                                allow_multiple = true,
                            },
                        },
                        name = "*ReaDelay*",
                        allow_multiple = true,
                    },
                },
            },
            {
                id = "PgAsvyQ6uzFQfL8TJJAMu",
                name = "ReaSynth focus",
                group = "xn6ZYYzn6WSoBj-ftQdKL",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "FxVisibility",
                    fx = {
                        address = "ByName",
                        chain = {
                            address = "Track",
                            track = {
                                address = "ByName",
                                name = "*",
                                allow_multiple = true,
                            },
                        },
                        name = "*ReaSynth*",
                        allow_multiple = true,
                    },
                },
            },
            {
                id = "yJadcgmJPhFqSw85pxJWi",
                name = "3",
                group = "sIq7ahWLaxQGqTnu0O1W5",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "Dummy",
                },
            },
            {
                id = "HW8NZerGA1wIpQQG2LQyb",
                name = "4",
                group = "AX0_TWwK5BIrxsKnILEVE",
                glue = {
                    step_size_interval = {0.01, 0.05},
                    step_factor_interval = {1, 5},
                },
                target = {
                    kind = "Dummy",
                },
            },
        },
    },
}
Thank you! Very useful code snippet.

Wrt groups vs presets I agree that presets are much more useful and had originally mapped all my stuff through multiple instances of realearn (on for each FX) and this was my original approach. However, since I intention was to map my single controller to handle each separate FX, I would end up with the same controller preset on each instance of realearn. When I launched projection, though, I had issues getting the correct instance of the controller to appear. I ended up assuming (probably incorrectly?) that the correct configuration was a single instance per controller - something that I likely misheard from your tutorial videos.

If I can reuse the same controller preset in multiple instances of realearn with a single projection that is the ideal scenario - I'm suspecting now it was an issue on my end. If this is the case, please do confirm!

(The good news is that I've already done the hard part - mapping the controller preset to the main compartment (in my case, a large main compartment, separated by mapping groups). Breaking it back out is trivial of course.)

Thank you so much for your patience here, BTW.
indigomirage is offline   Reply With Quote
Old 02-27-2023, 06:20 PM   #3292
brummbear
Human being with feelings
 
brummbear's Avatar
 
Join Date: May 2016
Location: out west
Posts: 286
Default

Quote:
Originally Posted by helgoboss View Post
Ah cool, thanks brummbear. I was not aware of NimBank. Any chance you know how to construct the VST preset chunk out of a native NI preset file (e.g. *.nfm8 for FM8)? That's the most pressing issue at the moment. With *.nksf and *.nksfx it's quite easy/documented, just extracting the PCHK RIFF chunk from a RIFF file and using the largest part of it as VST preset chunk. With *.nfm8, *.nki and all the others I don't know. But I also haven't tried again during the last months. This project looks very promising when it comes to understanding the NI file formats: https://github.com/monomadic/ni-file
Sorry, no. I have come to terms with using the Komplete Kontrol Wrapper almost all of the time (obviously also when using the KK S88 keyboard it is a no brainer). The overhead - even if I use dozens of tracks - is acceptable and in this way I always end up with a consistent look and feel (plus you get the audio preset ability which I find just as important as tags). With other controllers it is ReaLearn of course :-) (and btw also the still brilliant Playtime 1, using it as a sophisticated live looper with a launchpad).

Oh and thanks for the link to the ni-file github, every piece of documentation / tool helps to unravel the format.

Last edited by brummbear; 02-27-2023 at 06:27 PM.
brummbear is offline   Reply With Quote
Old 02-27-2023, 06:33 PM   #3293
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by indigomirage View Post
Thank you! Very useful code snippet.

Wrt groups vs presets I agree that presets are much more useful and had originally mapped all my stuff through multiple instances of realearn (on for each FX) and this was my original approach. However, since I intention was to map my single controller to handle each separate FX, I would end up with the same controller preset on each instance of realearn. When I launched projection, though, I had issues getting the correct instance of the controller to appear. I ended up assuming (probably incorrectly?) that the correct configuration was a single instance per controller - something that I likely misheard from your tutorial videos.

If I can reuse the same controller preset in multiple instances of realearn with a single projection that is the ideal scenario - I'm suspecting now it was an issue on my end. If this is the case, please do confirm!

(The good news is that I've already done the hard part - mapping the controller preset to the main compartment (in my case, a large main compartment, separated by mapping groups). Breaking it back out is trivial of course.)

Thank you so much for your patience here, BTW.
You need only one instance having auto-load enabled, per controller. So I think the same controller preset being on each instance of ReaLearn is a non-issue (even if there would be, it wouldn't be a bad thing to have the same controller preset being used in multiple instances).

The general rule is that you need AT LEAST one instance of ReaLearn per controller. But depending on what you want to do, you can also have multiple instances per controller. The only thing not possible is supporting multiple controllers with just a single instance (although this can be emulated using FX input, it's not straightforward).

Combining multiple instances with projection though is a different story You are looking for this FR: https://github.com/helgoboss/realearn/issues/108 ... but it will take a while. But from here it doesn't look like you need multiple instances in the first place?
helgoboss is offline   Reply With Quote
Old 02-27-2023, 06:36 PM   #3294
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by brummbear View Post
Sorry, no. I have come to terms with using the Komplete Kontrol Wrapper almost all of the time (obviously also when using the KK S88 keyboard it is a no brainer). The overhead - even if I use dozens of tracks - is acceptable and in this way I always end up with a consistent look and feel (plus you get the audio preset ability which I find just as important as tags). With other controllers it is ReaLearn of course :-) (and btw also the still brilliant Playtime 1, using it as a sophisticated live looper with a launchpad).

Oh and thanks for the link to the ni-file github, every piece of documentation / tool helps to unravel the format.
I understand. What's the "audio preset ability"? Haven't heard of it.
helgoboss is offline   Reply With Quote
Old 02-27-2023, 06:45 PM   #3295
brummbear
Human being with feelings
 
brummbear's Avatar
 
Join Date: May 2016
Location: out west
Posts: 286
Default

Quote:
Originally Posted by helgoboss View Post
I understand. What's the "audio preset ability"? Haven't heard of it.
Oops, I meant "preview" not "preset": the ability to listen to a an audio sample preview belonging to a preset (if it is an instrument / sample / loop - not an effect of course).
brummbear is offline   Reply With Quote
Old 02-27-2023, 07:32 PM   #3296
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by brummbear View Post
Oops, I meant "preview" not "preset": the ability to listen to a an audio sample preview belonging to a preset (if it is an instrument / sample / loop - not an effect of course).
Ah okay, that's possible in ReaLearn by using target "Pot: Preview preset".
helgoboss is offline   Reply With Quote
Old 02-27-2023, 08:44 PM   #3297
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Released ReaLearn 2.15.0-pre.1 (ReaPack installation instructions)

Changes:
- #493 Added possibility to restrict the list of included target types when using target "Global: Last touched"
- #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance
- #744 Added possibility to pick target from last-touched ones (one last-touched per type)
- #811 Added group interaction kind "Inverse target value (off only)"
- #708 Added basic Behringer x32 instructions to the list of tested controllers
- #765 Improved transformation editor to apply changes immediately when typing (no need to close window)
- #744 Improved performance of target "Global: Last touched"
- #744 Improved target "Global: Last touched" to pick up transport actions and some other actions as well (if included in the list of target types)
- #810 Fixed disappearing target value sequence values when the target is "FX parameter: Set value" and the FX is a JS FX
helgoboss is offline   Reply With Quote
Old 02-28-2023, 01:40 AM   #3298
Cloudswim
Human being with feelings
 
Join Date: May 2017
Posts: 335
Default

Quote:
Originally Posted by helgoboss View Post
Released ReaLearn 2.15.0-pre.1 (ReaPack installation instructions)

Changes:
- #493 Added possibility to restrict the list of included target types when using target "Global: Last touched"
- #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance
- #744 Added possibility to pick target from last-touched ones (one last-touched per type)
- #811 Added group interaction kind "Inverse target value (off only)"
- #708 Added basic Behringer x32 instructions to the list of tested controllers
- #765 Improved transformation editor to apply changes immediately when typing (no need to close window)
- #744 Improved performance of target "Global: Last touched"
- #744 Improved target "Global: Last touched" to pick up transport actions and some other actions as well (if included in the list of target types)
- #810 Fixed disappearing target value sequence values when the target is "FX parameter: Set value" and the FX is a JS FX
yahoo!

- #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance

Could you kindly explain how this works, was playing around with it and wasnt too sure!

thanks!

Last edited by Cloudswim; 02-28-2023 at 02:25 AM.
Cloudswim is offline   Reply With Quote
Old 02-28-2023, 03:52 AM   #3299
KennyG5000
Human being with feelings
 
Join Date: Nov 2022
Posts: 49
Default

Quote:
Originally Posted by helgoboss View Post
ReaLearn lets you access higher banks by using indexes greater than 7 (bank one = indexes 0 - 7, bank 2 = indexes 8 - 15, and so on). With that knowledge and the ability to use ReaLearn parameters in dynamic expressions (p[0] for example), you can build what you want. Don't forget to give your ReaLearn parameter a value count (Menu => Compartment parameters). Otherwise it will have values between 0.0 and 1.0, which is counter-intuitive if you want to deal with integers.
That's working perfectly now, thanks for the help Helgoboss, this is beyond useful! I was attempting to map my most used plugins in Open Stage Control one by one, and I now realise how much more intuitive and powerful this system is using the nks database, a huge thank you for building this in to Realearn!

Thinking about the possibilities of utilising this feature even further, can you use one of Realearn's internal parameters as a variable to dynamically select which slot you wish to load (using 'Pot: Load Preset) the FX into? Have briefly tried to set this up (using 'selected' for the track and 'p2' in the 'at position' slot, but without success! I am thinking then you could quickly load a number of different FX and similarly jump between them dynamically to control everything remotely on the fly! (Might need some textual feedback to define what FX you are currently controlling mind!).

This would take things to the next level (this always annoyed me about using the Kore 2 hardware, jumping between different instances of Kore within a session was less than intuitive!). If this is possible somehow, I would be over the moon!
KennyG5000 is offline   Reply With Quote
Old 02-28-2023, 05:05 AM   #3300
Vladistone
Human being with feelings
 
Join Date: Jul 2022
Posts: 80
Default

Quote:
Originally Posted by Cloudswim View Post
yahoo!

- #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance

Could you kindly explain how this works, was playing around with it and wasnt too sure!

thanks!
Yes I support you! it would be better to moderny get the necessary information on the settings and examples of use ...
Otherwise - most ordinary users do not keep up with @Helgoboss and his innovations! Here We didn`t have time to study the old user guide but updates are already appearing one by one!

By the way!
@helgoboss pay attention to the "user guide update" PR, more than 112 screenshots of panels have been added there, which would help new candidates to quickly understand the structure and system of realearn, .. otherwise it will quickly turn into an elite club of "advanced Realearn coders" and will not wide knowledge for another music produsers w/DAW-users! In the same way as it happened with your competitor developers, when you wrote to at the beginning of introduce the RL..
Vladistone is offline   Reply With Quote
Old 02-28-2023, 08:35 AM   #3301
indigomirage
Human being with feelings
 
Join Date: Oct 2020
Posts: 78
Default

Quote:
Originally Posted by helgoboss View Post
You need only one instance having auto-load enabled, per controller. So I think the same controller preset being on each instance of ReaLearn is a non-issue (even if there would be, it wouldn't be a bad thing to have the same controller preset being used in multiple instances).

The general rule is that you need AT LEAST one instance of ReaLearn per controller. But depending on what you want to do, you can also have multiple instances per controller. The only thing not possible is supporting multiple controllers with just a single instance (although this can be emulated using FX input, it's not straightforward).

Combining multiple instances with projection though is a different story You are looking for this FR: https://github.com/helgoboss/realearn/issues/108 ... but it will take a while. But from here it doesn't look like you need multiple instances in the first place?
In my case, you are right - I don't need multiple controller instances, in fact, I'm at a loss as to how you'd prioritize projection if a control drives more than one active item, etc... So, I'm keeping everything mutually exclusive for my own sake.

As for presets - this is making more sense now finally (and I continue to be grateful for your patience). You mentioned a possibility of adding an FX ID parameter that reflects the customized FX Name (as opposed to the original) with wildcards as a further filter requirement for auto-load. I think this would be a very useful addition. To prevent an FX instance from participating in the Auto-Load process it would be a simple matter of giving it a different name.

Note - I added https://github.com/helgoboss/realearn/issues/828 for this FR.

I continue to be very impressed with ReaLearn and believe it's a tool worthy of ongoing support from the community.

Many thanks!

Last edited by indigomirage; 02-28-2023 at 08:50 AM.
indigomirage is offline   Reply With Quote
Old 02-28-2023, 06:20 PM   #3302
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Cloudswim View Post
yahoo!

- #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance

Could you kindly explain how this works, was playing around with it and wasnt too sure!

thanks!
This target is for bringing another mapping into "Learn target" mode or to set its target to whatever target was recently touched.

1. Choose "Kind" ("Learn target" or "Set target to last touched").
2. Click the "..." button right next to it in order to choose the included types of target (other ones will be ignored). => That step is probably non-obvious, need to improve on that.
3. If the other mapping resides in another ReaLearn instance, pick that instance here. If it's in the same instance, just leave it as <This>.
4. Pick the mapping!

Then you map that to some button and that's it! The "Learn target" kind also has feedback, so it makes sense to map it to an LED button.
helgoboss is offline   Reply With Quote
Old 02-28-2023, 06:25 PM   #3303
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by KennyG5000 View Post
That's working perfectly now, thanks for the help Helgoboss, this is beyond useful! I was attempting to map my most used plugins in Open Stage Control one by one, and I now realise how much more intuitive and powerful this system is using the nks database, a huge thank you for building this in to Realearn!

Thinking about the possibilities of utilising this feature even further, can you use one of Realearn's internal parameters as a variable to dynamically select which slot you wish to load (using 'Pot: Load Preset) the FX into? Have briefly tried to set this up (using 'selected' for the track and 'p2' in the 'at position' slot, but without success! I am thinking then you could quickly load a number of different FX and similarly jump between them dynamically to control everything remotely on the fly! (Might need some textual feedback to define what FX you are currently controlling mind!).

This would take things to the next level (this always annoyed me about using the Kore 2 hardware, jumping between different instances of Kore within a session was less than intuitive!). If this is possible somehow, I would be over the moon!
You should be able to do that. Some hints:

- You need to use FX "<Dynamic>", not "At position". Only the dynamic selector allows you to use compartment parameters (p2 aka p[1], for example).
- Give the compartment parameter a value count (in your case, Compartment Parameter 2).
- Keep in mind that the result of dynamic expressions is an *index*. Indexes start at 0, so the first FX would be 0, the second FX 1, and so on.
- There must be an FX at the resulting position, otherwise the target won't become active. Just put some placeholder FX there, e.g. ReaSynth
helgoboss is offline   Reply With Quote
Old 02-28-2023, 06:38 PM   #3304
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Vladistone View Post
Yes I support you! it would be better to moderny get the necessary information on the settings and examples of use ...
Otherwise - most ordinary users do not keep up with @Helgoboss and his innovations! Here We didn`t have time to study the old user guide but updates are already appearing one by one!

By the way!
@helgoboss pay attention to the "user guide update" PR, more than 112 screenshots of panels have been added there, which would help new candidates to quickly understand the structure and system of realearn, .. otherwise it will quickly turn into an elite club of "advanced Realearn coders" and will not wide knowledge for another music produsers w/DAW-users! In the same way as it happened with your competitor developers, when you wrote to at the beginning of introduce the RL..
Appreciate the screenshots! But to me it looks like this new PR has similar issues as the previous one (too many changes at once, unexpected file format, ...). As I said, we should talk about file format, exact procedure, PR size, possible means of automation and so on, *before* you do all that work. Usually, the way is to post a GitHub issue, discuss all of these things, and then make a PR. The reason for this is that I want to maintain a certain amount of consistency in the code base / documentation. Also, a small PR that I see coming, is something that I can respond to much faster. I have a full time contract at the moment, so unfortunately I can't be super quick with processing the PRs.

See my second response to your initial PR here: https://github.com/helgoboss/realearn/pull/819
helgoboss is offline   Reply With Quote
Old 03-01-2023, 07:03 AM   #3305
jimosity
Human being with feelings
 
Join Date: Jul 2007
Location: Cincinnati, Ohio
Posts: 51
Default Send Feedback to all

Is there a way to basically send a reset feedback to all channels/CCs for a device?
I can use the marker ID of !_REALEARN_SEND_ALL_FEEDBACK and it will reset the state of a button color that I have mapped on a Novation Launchpad; but I want to be able to reset the entire Launchpad when hitting a certain point in a song - so if it's something I can do with those marker points; that'd be great.
jimosity is offline   Reply With Quote
Old 03-01-2023, 08:37 AM   #3306
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by jimosity View Post
Is there a way to basically send a reset feedback to all channels/CCs for a device?
I can use the marker ID of !_REALEARN_SEND_ALL_FEEDBACK and it will reset the state of a button color that I have mapped on a Novation Launchpad; but I want to be able to reset the entire Launchpad when hitting a certain point in a song - so if it's something I can do with those marker points; that'd be great.
So you want to clear all LEDs of the Launchpad in response to a marker being reached? Well, looks like you have it working for one LED already. So the missing piece of the puzzle is to figure out the MIDI message that the Launchpad needs to clear all LEDs. As soon as you know that, you can use the "Raw MIDI" source to enter that message.
helgoboss is offline   Reply With Quote
Old 03-01-2023, 08:54 AM   #3307
jimosity
Human being with feelings
 
Join Date: Jul 2007
Location: Cincinnati, Ohio
Posts: 51
Default

Quote:
Originally Posted by helgoboss View Post
So you want to clear all LEDs of the Launchpad in response to a marker being reached? Well, looks like you have it working for one LED already. So the missing piece of the puzzle is to figure out the MIDI message that the Launchpad needs to clear all LEDs. As soon as you know that, you can use the "Raw MIDI" source to enter that message.
Actually, it looks like as long as there is a mapping for a particular channel/button; the "!_REALEARN_SEND_ALL_FEEDBACK" marker action will work.

I'm not seeing a good midi message to reset the buttons on the launchpad without switching it into programmer mode and using SYSEX (I don't want to do that).

If there were a way to set the OSC target coming back to all channels or CCs, that sounds like it'd be an easier way.

Otherwise, just having a mapping for a button seems to work - it's just a lot of extra entries.
jimosity is offline   Reply With Quote
Old 03-02-2023, 10:42 PM   #3308
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by jimosity View Post
Actually, it looks like as long as there is a mapping for a particular channel/button; the "!_REALEARN_SEND_ALL_FEEDBACK" marker action will work.

I'm not seeing a good midi message to reset the buttons on the launchpad without switching it into programmer mode and using SYSEX (I don't want to do that).

If there were a way to set the OSC target coming back to all channels or CCs, that sounds like it'd be an easier way.

Otherwise, just having a mapping for a button seems to work - it's just a lot of extra entries.
How about just placing a MIDI item on the timeline that contains the MIDI messages to reset the Launchpad? Seems the most straightforward solution to me, since you would prefer it to be triggered at a specific time anyway instead of at a button press.
helgoboss is offline   Reply With Quote
Old 03-03-2023, 12:46 AM   #3309
Vladistone
Human being with feelings
 
Join Date: Jul 2022
Posts: 80
Default log debug info

why when you click on log debug info - an information dump immediately pops up? (even if no key is pressed on the controller)
and how to read such information?
Code:
abels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }]), Main: CompartmentParams([Param { setting: ParamSetting { key: None, name: "Track", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Seek coarse/fine", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Zoom on/off", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Timer 250 Warp", value_count: None, value_labels: [] }, value: 0.5 }, Param { setting: ParamSetting { key: None, name: "Timer 1 / LCD page", value_count: None, value_labels: [] }, value: 1.0 }, Param { setting: ParamSetting { key: None, name: "CHAN Strip", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "SEND / AUX", value_count: Some(8), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "EQ / Width", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "PLUG", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "INSTR", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Parameter LCD", value_count: Some(2), value_labels: [] }, value: 1.0 }, Param { setting: ParamSetting { key: None, name: "SHIFT", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "OPT", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Cmd", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "WIN\u{a0}Ctrl", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "LCD COUTER", value_count: Some(6), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }])} }
my problem was the strange behavior of the controller: duplication of the controller feedback from two buttons:
Mapping PAN mode button 4
real control | [90, 2A, 7F] = [144, 42, 127] = NoteOn
and scrub/seek
real feedback | [90, 65, 7F] = [144, 101, 127] = NoteOn
how to find mutual influence on each other?

Code:
1677829201.339 | ReaLearn Q5496NyV | Target control   | Mapping PAN mode button 4: Hit target successfully [invocation = 44, target = 1, control value = 1] (normal control)
1677829201.357 | ReaLearn Q5496NyV | Target control   | Mapping SEND reset Switch 5: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.357 | ReaLearn Q5496NyV | Target control   | Mapping INST mode button 1: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.358 | ReaLearn Q5496NyV | Target control   | Mapping PLUG mode button 2: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.359 | ReaLearn Q5496NyV | Target control   | Mapping EQ mode button 3: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.359 | ReaLearn Q5496NyV | Target control   | Mapping CHAN S. mode button 6: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.361 | ReaLearn Q5496NyV | Target control   | Mapping MODE button 7: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.362 | ReaLearn Q5496NyV | Virtual feedback | Multi 7 with value 0.0000
1677829201.363 | ReaLearn Q5496NyV | Target control   | Mapping MODE button 8: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.365 | ReaLearn Q5496NyV | Virtual feedback | Multi 8 with value 0.0000
1677829201.366 | ReaLearn Q5496NyV | Virtual control  | Button 4 with value 127/127 at Instant { t: 3192184229426 } (matched)
1677829201.368 | ReaLearn Q5496NyV | Real control     | [90, 2A, 7F] = [144, 42, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(127) } at Instant { t: 3192184229426 } (matched)
1677829201.404 | ReaLearn Q5496NyV | Real control     | Parameter 1 with value 1
1677829201.406 | ReaLearn Q5496NyV | Virtual feedback | Button 4 with value 100.0000
1677829201.408 | ReaLearn Q5496NyV | Real feedback | [90, 2A, 7F] = [144, 42, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(127) } (Normal)
1677829201.428 | ReaLearn Q5496NyV | Virtual feedback | Button scrub with value 100.0000
1677829201.431 | ReaLearn Q5496NyV | Real feedback | [90, 65, 7F] = [144, 101, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(101), velocity: U7(127) } (Normal)
1677829201.519 | ReaLearn Q5496NyV | Target control   | Mapping PAN mode button 4: Control value ignored by glue [invocation = 45, target = 1] (normal control)
1677829201.522 | ReaLearn Q5496NyV | Virtual control  | Button 4 with value 0/127 at Instant { t: 3192386905245 } (matched)
1677829201.524 | ReaLearn Q5496NyV | Real control     | [90, 2A, 00] = [144, 42, 0] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(0) } at Instant { t: 3192386905245 } (matched)
after logical reflections on the mapping panels, I came to the conclusion that the target was accidentally changed from "particular" to "dynamic"
- and therefore the parameter element changed when switching from p(2) "scrub" to p(10) "PAN".
it would be nice if this data options was displayed in the logging list. or are there other tracking options? Tell me please!

Last edited by Vladistone; 03-03-2023 at 01:40 AM.
Vladistone is offline   Reply With Quote
Old 03-03-2023, 01:33 AM   #3310
Vladistone
Human being with feelings
 
Join Date: Jul 2022
Posts: 80
Default mapping rows size window

and the last lamer question for Main panel window:
what is the reason of window size made for 5 elements, and not 8 rows of the mapping? a classic bank layout of 8 would be much better for viewing elements.
Vladistone is offline   Reply With Quote
Old 03-03-2023, 04:40 AM   #3311
Vladistone
Human being with feelings
 
Join Date: Jul 2022
Posts: 80
Default Realearn warning

for common monitor FX settings: what is the method to eliminate the Realearn warning about automatic mapping conversion in the MCU controller? in those cases when you describe the target settings for changing the parameter of XT banks of other controller? (specifying "particular FX" destination for XT instance)
This is a usгaly installation for bank to left/right control buttons... that are always in the MCU instance, and XT instances only receive changes from the MCU influence
.
Attached Images
File Type: png particula.png (36.2 KB, 44 views)

Last edited by Vladistone; 03-03-2023 at 04:57 AM.
Vladistone is offline   Reply With Quote
Old 03-04-2023, 07:32 AM   #3312
Puck
Human being with feelings
 
Puck's Avatar
 
Join Date: Feb 2022
Location: Almost Canada
Posts: 505
Default

I *thought* I asked this before and made a feature request. However I can't find it here or on Github. It's likely that my search skills are lacking.

....

Currently, we don't have access to stereo metering, correct? That's something I'd like to be able to do.
Puck is offline   Reply With Quote
Old 03-04-2023, 04:37 PM   #3313
theFRXST
Human being with feelings
 
theFRXST's Avatar
 
Join Date: Mar 2017
Posts: 126
Default

I have midi fighter twister

"Global: last touched" works perfectly but Reaper has focus issues and I don't want to control tcp controls on this particular knob.

I only want it to affect the last touched parameter of an FX.

I cant find any scripts that do this, we have "Adjust last touched FX parameter (MIDI CC/OSC only)" but it does not work with an encoder and makes the next parameter jump to where the position of the knob is at.

Does someone have an solution to only control :last touched FX parameter" work like "Global: last touched"?
__________________
thefrxst.com
theFRXST is offline   Reply With Quote
Old 03-04-2023, 08:29 PM   #3314
Gurt Tractor
Human being with feelings
 
Join Date: Apr 2013
Posts: 75
Default

Hi, I'm having a lot of problems with the value sequence function. I'm trying to set a button to increment through "0, 170, 340, 510, 680, 850, 1000," and wrap back to 0, it's for the mode select in NastyDLA MkII.

If the last value is 1000 (the max for this target) the value sequence just doesn't work at all, it just increments via the step size sliders. 999 is fine, but not good enough for this because the last mode in the plugin is set at 1000.

Also if I click off of the value sequence the numbers disappear leaving just commas, and in this case with the last number at 1000 the box is entirely cleared. I've noticed the disappearing numbers thing generally when trying to use the value sequence feature.
Gurt Tractor is offline   Reply With Quote
Old 03-05-2023, 01:14 AM   #3315
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by theFRXST View Post
I have midi fighter twister

"Global: last touched" works perfectly but Reaper has focus issues and I don't want to control tcp controls on this particular knob.

I only want it to affect the last touched parameter of an FX.

I cant find any scripts that do this, we have "Adjust last touched FX parameter (MIDI CC/OSC only)" but it does not work with an encoder and makes the next parameter jump to where the position of the knob is at.

Does someone have an solution to only control :last touched FX parameter" work like "Global: last touched"?
See below.

Quote:
Originally Posted by Gurt Tractor View Post
Hi, I'm having a lot of problems with the value sequence function. I'm trying to set a button to increment through "0, 170, 340, 510, 680, 850, 1000," and wrap back to 0, it's for the mode select in NastyDLA MkII.

If the last value is 1000 (the max for this target) the value sequence just doesn't work at all, it just increments via the step size sliders. 999 is fine, but not good enough for this because the last mode in the plugin is set at 1000.

Also if I click off of the value sequence the numbers disappear leaving just commas, and in this case with the last number at 1000 the box is entirely cleared. I've noticed the disappearing numbers thing generally when trying to use the value sequence feature.
Quick answer to both of you: Use the latest pre-release 2.15.0-pre.1. see the fixes (disappearing target value numbers) and new features (configurable target types for last touched target) above.

The target value number 1000 not working, this must be something plug-in specific. Nothing I can do without more details and an example project.

Last edited by helgoboss; 03-05-2023 at 04:08 AM.
helgoboss is offline   Reply With Quote
Old 03-05-2023, 04:09 AM   #3316
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Puck View Post
I *thought* I asked this before and made a feature request. However I can't find it here or on Github. It's likely that my search skills are lacking.

....

Currently, we don't have access to stereo metering, correct? That's something I'd like to be able to do.
Stereo metering? You mean the target "Track: Peak" allowing to feed two displays, one for left and one for right channel?
helgoboss is offline   Reply With Quote
Old 03-05-2023, 04:22 AM   #3317
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Vladistone View Post
why when you click on log debug info - an information dump immediately pops up? (even if no key is pressed on the controller)
and how to read such information?
Code:
abels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }]), Main: CompartmentParams([Param { setting: ParamSetting { key: None, name: "Track", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Seek coarse/fine", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Zoom on/off", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Timer 250 Warp", value_count: None, value_labels: [] }, value: 0.5 }, Param { setting: ParamSetting { key: None, name: "Timer 1 / LCD page", value_count: None, value_labels: [] }, value: 1.0 }, Param { setting: ParamSetting { key: None, name: "CHAN Strip", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "SEND / AUX", value_count: Some(8), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "EQ / Width", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "PLUG", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "INSTR", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Parameter LCD", value_count: Some(2), value_labels: [] }, value: 1.0 }, Param { setting: ParamSetting { key: None, name: "SHIFT", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "OPT", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "Cmd", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "WIN\u{a0}Ctrl", value_count: Some(2), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "LCD COUTER", value_count: Some(6), value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }, Param { setting: ParamSetting { key: None, name: "", value_count: None, value_labels: [] }, value: 0.0 }])} }
my problem was the strange behavior of the controller: duplication of the controller feedback from two buttons:
Mapping PAN mode button 4
real control | [90, 2A, 7F] = [144, 42, 127] = NoteOn
and scrub/seek
real feedback | [90, 65, 7F] = [144, 101, 127] = NoteOn
how to find mutual influence on each other?

Code:
1677829201.339 | ReaLearn Q5496NyV | Target control   | Mapping PAN mode button 4: Hit target successfully [invocation = 44, target = 1, control value = 1] (normal control)
1677829201.357 | ReaLearn Q5496NyV | Target control   | Mapping SEND reset Switch 5: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.357 | ReaLearn Q5496NyV | Target control   | Mapping INST mode button 1: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.358 | ReaLearn Q5496NyV | Target control   | Mapping PLUG mode button 2: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.359 | ReaLearn Q5496NyV | Target control   | Mapping EQ mode button 3: Hit target successfully [invocation = 16, target = 1, control value = 0] (group interaction)
1677829201.359 | ReaLearn Q5496NyV | Target control   | Mapping CHAN S. mode button 6: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.361 | ReaLearn Q5496NyV | Target control   | Mapping MODE button 7: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.362 | ReaLearn Q5496NyV | Virtual feedback | Multi 7 with value 0.0000
1677829201.363 | ReaLearn Q5496NyV | Target control   | Mapping MODE button 8: Hit target successfully [invocation = 15, target = 1, control value = 0] (group interaction)
1677829201.365 | ReaLearn Q5496NyV | Virtual feedback | Multi 8 with value 0.0000
1677829201.366 | ReaLearn Q5496NyV | Virtual control  | Button 4 with value 127/127 at Instant { t: 3192184229426 } (matched)
1677829201.368 | ReaLearn Q5496NyV | Real control     | [90, 2A, 7F] = [144, 42, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(127) } at Instant { t: 3192184229426 } (matched)
1677829201.404 | ReaLearn Q5496NyV | Real control     | Parameter 1 with value 1
1677829201.406 | ReaLearn Q5496NyV | Virtual feedback | Button 4 with value 100.0000
1677829201.408 | ReaLearn Q5496NyV | Real feedback | [90, 2A, 7F] = [144, 42, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(127) } (Normal)
1677829201.428 | ReaLearn Q5496NyV | Virtual feedback | Button scrub with value 100.0000
1677829201.431 | ReaLearn Q5496NyV | Real feedback | [90, 65, 7F] = [144, 101, 127] = NoteOn { channel: Channel(0), key_number: KeyNumber(101), velocity: U7(127) } (Normal)
1677829201.519 | ReaLearn Q5496NyV | Target control   | Mapping PAN mode button 4: Control value ignored by glue [invocation = 45, target = 1] (normal control)
1677829201.522 | ReaLearn Q5496NyV | Virtual control  | Button 4 with value 0/127 at Instant { t: 3192386905245 } (matched)
1677829201.524 | ReaLearn Q5496NyV | Real control     | [90, 2A, 00] = [144, 42, 0] = NoteOn { channel: Channel(0), key_number: KeyNumber(42), velocity: U7(0) } at Instant { t: 3192386905245 } (matched)
after logical reflections on the mapping panels, I came to the conclusion that the target was accidentally changed from "particular" to "dynamic"
- and therefore the parameter element changed when switching from p(2) "scrub" to p(10) "PAN".
it would be nice if this data options was displayed in the logging list. or are there other tracking options? Tell me please!
"Log debug info" is something like a dump of ReaLearn's internal data. Don't try to read it If a user reports a very hard-to-analyze bug, I might ask them to press "Log debug info" and send me the result. But otherwise, there's no reason to ever use it.

Control/feedback logging is what you are looking for, and you already found it, it seems.

If you want to see the result of dynamic expression (in real-time), you need to look at the text next to the dynamic expression text field. It's not in the logs.
helgoboss is offline   Reply With Quote
Old 03-05-2023, 04:28 AM   #3318
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Vladistone View Post
and the last lamer question for Main panel window:
what is the reason of window size made for 5 elements, and not 8 rows of the mapping? a classic bank layout of 8 would be much better for viewing elements.
Because a hand has 5 fingers.

Kidding.

It's just 5 to not exhaust vertical screen space. Now don't ask me about resizability Too much effort.
helgoboss is offline   Reply With Quote
Old 03-05-2023, 04:36 AM   #3319
helgoboss
Human being with feelings
 
helgoboss's Avatar
 
Join Date: Aug 2010
Location: Germany
Posts: 2,023
Default

Quote:
Originally Posted by Vladistone View Post
for common monitor FX settings: what is the method to eliminate the Realearn warning about automatic mapping conversion in the MCU controller? in those cases when you describe the target settings for changing the parameter of XT banks of other controller? (specifying "particular FX" destination for XT instance)
This is a usгaly installation for bank to left/right control buttons... that are always in the MCU instance, and XT instances only receive changes from the MCU influence
.
What's XT? Mackie Extender? Anyway, it never make sense to save mappings with "Particular" FX targets as presets. So ReaLearn provides no way to disable that question.
helgoboss is offline   Reply With Quote
Old 03-05-2023, 06:30 AM   #3320
Puck
Human being with feelings
 
Puck's Avatar
 
Join Date: Feb 2022
Location: Almost Canada
Posts: 505
Default

Quote:
Originally Posted by helgoboss View Post
Stereo metering? You mean the target "Track: Peak" allowing to feed two displays, one for left and one for right channel?
Precisely
Puck 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:36 AM.


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