have a question to the example script APC-40-Knob-Memory.
I wanted to get the LED feedback for all 16 Rings from the MK II knobs.
For the 8 above knobs, they run perfect on all channels.
Now I wanted to duplicate my LED rings from 8 to 16.
I have set for the 8 other knobs following variables:
y0-y7 – first of all tried to make them with the samw value of qq, then with a seperate value variable yy.
Gaved 8 other doppel variables like oo, pp, qq.
But nothing seems to work right.
What could be the mistake in it?
Maybe in the update rings :
Have to be another calculation here?
In the same rules I wrote:
if gc==15 then qq=y7
Tried out to change the gc=8 to gc=16 but this isn`t too.
In the Channel Changer I wrote per Channel 8 more (other) variables with the temp y0-y7, but this didn`t work too.
Can`t understand why the translators didn`t wanna work.
Marked as spam
Post an example project (not the big project) of what you have so far and I will take a look.
Oh and remember, changing the variable values themselves will not update the rings. You actually have to send the values to the rings as CC messages as well.
thanks a lot to take a look on it. I am apreciate your support so much.
I made a preset especially for the LED feedback.
And put all other translators on seperate preset for a clean overview.
Hope you understand what I´ve tried.
Marked as spam
OK, it appears you are updating the global variables correctly but you don’t have anything that update the LED rings when you do a channel switch. The upper knobs are using the timer in 6.1 to update the LED rings of the upper knobs but you need either another timer or to extend the timer to also update the rings of the right knobs when switching channels.
qq will need to be the value of the knob and pp will need to be which cc number for that knob.
The knobs on the top go from cc 0x30 to 0x37 (48-55) and the knobs on the right go from cc 9×10 to 0x17 (16-23).
For each step in the counter, you will need to use a condition from 15 to 0 indicating both the knob number and the knob value. You will need to change the number of iterations (gc) for the timer in 6.0 from 8 to 16.
I don’t see any of this in the project file you sent me.
Marked as spam
I have tried this, with gave another variable for the 8 right knobs. The Ring counter is gd=8 and the calculating for the new CCs is:
LED ring counter is gd, put all gc to gd and did 8 new double variables like: ii,jj,hh etc.
But of I make a double project with all other variables didn`t wanna run correct.
In general you should use local variables, when you do not need them outside of a given translator or you want to use them for other purposes and don’t want to have name collision with an existing global variable.
In contrast, you want global variables to be visible, everywhere in your project.
At project start, global variables are all set to 0, so if you need to set them to something else, you would need to do so at project start in rules.
In contrast, local variables have an undefined value (could be any random) until you define them. Coming back to the same translator later, it will not be remembered from the last iteration.
Press F1 or go to help menu in MT Pro and you can find this information in the PDF version of the MT Pro manual.
thank you so much for your good explaining.
Now I got with the big project a result. I can use the 8 right knobs perfect without the 8 knobs above.
I have decided to use these template for channel change to the MK II.
It would be a big help, if I could understand, how the 3 rows can work together, with the LED feedback. This is really confused….
Well since this has been created from a hodge podge of different questions, I think the key thing to work on next is a global variable map and how each are going to be used. I suspect we have some variable collision somewhere.
If I remember right on the MIDIMIX we defined the columns as g-n for columns 1-8 which are all global variables. Now we have 8 more knobs so we are out of columns for the right hand knobs unless we create another scheme for these.
We then had channels as the second portion 0-F
(or something like this)
So the first order of business is to determine EVERY GLOBAL you want to use and its meaning so that we avoid global variable collision/re-use. If we start to run out of global variables, we can then bit map them to use 1 variable for 4 values (28 bits) as we did in a separate exercises.
The key is that the variable selection strategy has to be set in advance so we don’t trip over ourselves in the future. For this reason, I usually document all used global variables in a single translator for future reference.
So now it is time to re-look at the project and all of the variables assigned and then set up a strategy for what is left over and perhaps even redefine them if we are going to run out of room.
Once a global variable map is defined, we may just need to start over with the new map. Either that or look at the two projects and analyze every global variable used in both and re-assign those that may collide.
Now to your question – 3 rows with LED feedback. If each row has 8 knobs, then you have a total of 24 (3*8) values you need to track (per MIDI channel). If you want to control 16 channels, then it would either take 384 global variables (if not using bitmapping) or 96 (if you bit map them into 4 chunks each).
The logic for bit mapping would be to take the value coming in from your controller, stuffing the bits into the proper global variable.
For extraction (LED update) the logic would be to grab the proper global variable, extract the bits for that LED ring and the send it out.
On each iteration of the timer, you would use the iteration count to determine which global variable to use, which bits within the global variable to extract, and which CC to send the value to for controlling the LED ring.
These techniques are already used in the examples I provided you. If you need help for putting together the entire project, then reach out to me via email for paid services. Even then, I would need to know the complete requirements for the project to be able to put it together for you.
Merging different project example to create one bigger project would even be difficult for me and I would probably just start by re-mapping the entire project (which yes, can be time consuming).
Ones global variable mapping is done, we then segment the tasks/rules required for bit stuffing, bit extraction, LED updating, etc. Of course changing the variable structure would require re-writing the variable and bit manipulation routines.
thank you so much for sharing your thoughts.
I wanna try to do this solution:
Using the same global variable on the LED feedback as we did on the “saved last point of the value” (from the MIDImix example) to combine the same last saved points with LED. The LED feedback have to be everytime on the same place as the last saved point from the current channel. Normally this should be work.
I think I can solve this, after your big help and explaining to understand it.
I am appreciate so much to taking your time and help.
Anyway, I will continue to be available for tips and coaching as required.
the second question was, (after my unseen edit mistake in the scirpt), if I could give the LED feedback from the rings the same variable as the last saved value from each knob. But after asking this and looking at my script, I found the answer by myself. Yes it runs but would be a little bit difficult, because we did in the past for 1 variable 4 different values, that would mean, I should use the same work for the LED rings as for the last saved points from the value and try to change the global variable for the faders, which don`t have LED feedback.
I use a similar script in the Rules like this from the “last save knobs” I solved this first of all in another way, which works amazing!
I think so too, that Florian has enough to do. But have to say, I am very happy to find out the BMT after searching for results how people solved their MIDI tricky ways. BMT is really amazing!
Glad to help, Mike!
As far as faders, you should probably suppress any LED ring messages back to them. Some APC devices crash if you send them fader values (IE APC-MINI).
For faders, you might want to implement crossover points as you did with your MIDIMIX. For LED rings, just update the ring position.
As a general rule, LED ring updates should be changed at MIDI channel switch (for all knobs) and for just the knob your moving (for real time).
You might want to experiment with APC-40 Mode 1 as I think it allows local update of LED rings as well as LED feedback. If this is true, you would not need the real-time LED ring updates when you move the knob, but you would still need to capture the value for future channel switch. I really haven’t experimented with Mode 1 but if I read correctly, this may be how it works.
And yes, I know that more global variables and variables with more meaningful names are on Florian’s list for future enhancements.