Controller linking scale/multiplier
- Dominant language
- C++
- Stars
- 10.4k
- Forks
- 1.3k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 7
Description
Right now, it's possible to link two different controllers: when one is changed, the other takes the same value.
This value is not scaled, so if I link a 0-1 controller to a 0-5 one, the second one cannot go over 1, and if the first is at half of its range, the other is at 1/10 of its one.
It would be interesting to decide the scale or a multiplier for this. Let's say I want to connect:
- Note Stacking Range [1-9, integers]
- Volume [0-200, integers]
But I need that when Range is higher, Volume is decreased.
So I link them, by ctrl-dragging Range to Volume, and then I would left click on one of them to set it's scale.
I'll left click on Volume, find the right connection (right now no connection is shown, you can only remove all connections), and then click on "Scale controllers".
This way, when one is max, the other is max too. When one is at half (Volume at 100%), Range will be at half too (4, wich is the floor of the actual value, since Range is a integer)
Then I'll click on "Invert controllers", so that when one icreases, the other decreases.
Cherry on top: write a function.
I right-click on Volume and go to the link with Range. Instead of Scale them, I'll write a funcion:
Volume = [user input]
In the input, the user will be able to write an "x", wich stands for "Value of the other controller"
For example:
Volume = 200 - (30 + 10x)
This way, if Range is 9, Volume will be 80%. If Range is 5, Volume will be 120%. If Range is 1, Volume will be 160%.
Of course this will need a lot of bug testing for stability, but if this works right, well, LMMS would be able to do all sorts of interesting things. Maybe most of them would just be experimental, but who knows!
Contributor guide
No contributing guide indexed for this repository
Research direction
No files, tests, or entry points are named. Start by locating the existing controller-linking behavior, then clarify the scope for scaling, inversion, and expressions using the proposed Range and Volume examples; completion would require stable behavior and bug testing for these cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100