# Different pages in K4..?



## Tod (Mar 14, 2012)

Hi my VI friends,

I have a script that needs 2 or 3 different pages and was wondering if K4 has got something like this. I did this with K2 using *move_control($whatever, 0, 0)* but thought K4 might have a better way. I've searched the manual and didn't find anything but, heh heh, that don't mean it isn't there.  

Any replies would be appreciated.

Tod


----------



## Big Bob (Mar 14, 2012)

Hi there Tod,

Essentially one still has to do the hide/show control thing but, it's a lot easier and more code-efficient now since controls can be addressed by ID instead of just by name. It isn't too difficult to do if you organize the controls properly and lean on the control_par stuff. Also, the limit now (is 256 controls of any one type, I think) so you don't have to re-use controls (unless you are really using a ton of them).

I have personally found that once you write a UI Library (using the KSE macro facility) with paging in mind as you generalize things, you can support mulitple pages pretty easily. Although, I suspect that everyone has some of their own special techniques that they like to use, in the end I think it still boils down to show/hide controls.

I'm sure others will want to comment on this.

Anyway, nice hearing from you old friend.

Rejoice,

Bob


----------



## ScoringFilm (Mar 15, 2012)

Tod,

This thread is all about that:

http://vi-control.net/forum/viewtopic.php?t=3538

Justin


----------



## Tod (Mar 18, 2012)

ScoringFilm @ Thu Mar 15 said:


> Tod,
> 
> This thread is all about that:
> 
> ...



Thank Justin, I got some good ideas from that.  



Big Bob @ Wed Mar 14 said:


> Hi there Tod,
> 
> Essentially one still has to do the hide/show control thing but, it's a lot easier and more code-efficient now since controls can be addressed by ID instead of just by name. It isn't too difficult to do if you organize the controls properly and lean on the control_par stuff. Also, the limit now (is 256 controls of any one type, I think) so you don't have to re-use controls (unless you are really using a ton of them).
> 
> I have personally found that once you write a UI Library (using the KSE macro facility) with paging in mind as you generalize things, you can support mulitple pages pretty easily. Although, I suspect that everyone has some of their own special techniques that they like to use, in the end I think it still boils down to show/hide controls.



Hi my friend, sorry to take so long to get back, I've been working pretty hard on this. I've been trying to learn more about the ID and the control_par stuff you mentioned from the manual but so far I haven't been able to glean much from it. It's this old brain you know. :D 

What I finally decided is that I really don't think I need a paging system. The script I'm writing is for 4 toms and they each use the same GUI elements. Here's a pict of the Floor Tom.

http://stash.reaper.fm/12013/Floor Tom K4 GUI #1.png

I've basically decided I just need to assign arrays for each tom with a method of saving and retrieving them as I go from tom to tom. Heh heh, unless you have a better idea which I'm sure you have. :D 

God bless you too my friend.

Tod


----------



## Tod (Mar 18, 2012)

One thing I forgot to mention is that there are 5 Mic positions as you can see in the picture and each Mic position has 4 round robins. So that's 4 Toms with 5 Mics and 4Round Robins each. There are a total of 80 groups.


----------



## Big Bob (Mar 18, 2012)

Hi Tod,



> Hi my friend, sorry to take so long to get back, I've been working pretty hard on this. I've been trying to learn more about the ID and the control_par stuff you mentioned from the manual but so far I haven't been able to glean much from it. It's this old brain you know.



Ah Yes, I know all about 'old brain' problems. :? But seriously, maybe you should try a little harder to 'catch-on' to the control id stuff. Let me try to point out some of the key advantages of using control ids instead of control names.

When you only have control names, you can't conviently loop through dozens of controls and perform the same operation on them. Whereas, with control ids you can. For example, consider the following code which declares 20 labels named L_0 through L_19. If you wanted to do something with all these controls, using the 'by name' method, you would have to construct a long list of 20 references for each kind of operation you wanted to perform on all 20 of them.

Whereas, when you know that their IDs are consecutive, you can access them in a simple while loop as illustrated with the following code.

Note that the Hide button callback merely loops through all twenty labels with one short body of code. Similarly, for the Show button. To go a little farther, suppose you want to rearrange the order of 20 labels. Click on Arrange1 and it will order the labels in reverse-row order. Click on Arrange2 and it will order the labels in column order. The neat thing about control IDs is that any operation that you can perform on a control 'by name' can be performed just as easily by supplying the control id and that can be done mathematically in a loop.

When the controls involved do not have consecutive IDs, you can simply put their randomly ordered IDs into an array and then you can access the controls via the array with a simple linear index (as if the IDs were in consecutive order).

Anyway, compile the following and play with it a bit and you just may want to relook at the control ID stuff, even with your aged brain :lol: 

*on init*
``*declare* ui_switch Hide
````move_control(Hide,1,1)
``*declare* ui_switch Show
````move_control(Show,1,2)
``*declare* ui_switch Arrange1
````move_control(Arrange1,1,3)
``*declare* ui_switch Arrange2
````move_control(Arrange2,1,4)
``*declare* ui_label L_0 (1,1)
``*declare* ui_label L_1 (1,1)
``*declare* ui_label L_2 (1,1)
``*declare* ui_label L_3 (1,1)
``*declare* ui_label L_4 (1,1)
``*declare* ui_label L_5 (1,1)
``*declare* ui_label L_6 (1,1)
``*declare* ui_label L_7 (1,1)
``*declare* ui_label L_8 (1,1)
``*declare* ui_label L_9 (1,1)
``*declare* ui_label L_10 (1,1)
``*declare* ui_label L_11 (1,1)
``*declare* ui_label L_12 (1,1)
``*declare* ui_label L_13 (1,1)
``*declare* ui_label L_14 (1,1)
``*declare* ui_label L_15 (1,1)
``*declare* ui_label L_16 (1,1)
``*declare* ui_label L_17 (1,1)
``*declare* ui_label L_18 (1,1)
``*declare* ui_label L_19 (1,1)
``*declare* Labels
````Labels := get_ui_id(L_0)
``*declare* n
*end on*

*on ui_control*(Hide)
``Hide := 0
``*for* n := 0 *to* 19
````set_control_par(Labels+n,CONTROL_PAR_HIDE,HIDE_WHOLE_CONTROL)
``*end for*
*end on*

*on ui_control*(Show)
``Show := 0
``*for* n := 0 *to* 19
````set_control_par(Labels+n,CONTROL_PAR_HIDE,HIDE_PART_NOTHING)
``*end for*
*end on*

*on ui_control*(Arrange1)
``Arrange1 := 0
``*for* n := 0 *to* 19
````set_control_par(Labels+19-n,CONTROL_PAR_GRID_X,(n mod 5)+2)
````set_control_par(Labels+19-n,CONTROL_PAR_GRID_Y,n/5+1)
``*end for*
*end on*

*on ui_control*(Arrange2)
``Arrange2 := 0
``*for* n := 0 *to* 19
````set_control_par(Labels+n,CONTROL_PAR_GRID_X,(n/4)+2)
````set_control_par(Labels+n,CONTROL_PAR_GRID_Y,(n mod 4)+1)
``*end for*
*end on*




God Bless,

Bob


----------



## Big Bob (Mar 18, 2012)

Tod @ Sun Mar 18 said:


> One thing I forgot to mention is that there are 5 Mic positions as you can see in the picture and each Mic position has 4 round robins. So that's 4 Toms with 5 Mics and 4Round Robins each. There are a total of 80 groups.



But if you use the same control configuration for each Tom (set to different values of course), I think your idea of using arrays and loading the control values from the 'active' set of positions in the arrays should work fine.

If you were going to create 4 separate pages, how would you switch between them? I presume you would have a drop-down menu or a set of 4 buttons on the left side of the panel that you would use to select the desired page? Well, you could do the same thing with array loading the same controls. Suppose you have a drop-down menu named Tom and it gives you a value 0 to 3 depending on which Tom you want to display.

It looks like you have 20 parameters per tom (plus maybe Lock, because I don't know what that does). You could simply create 20, 4-element arrays named for their function and the four elements of each would correspond with the four toms. However, this won't be as 'loop-friendly' as it would be if you used just one 80-element array. With one array, everything could be accessed mathematically in a loop without having to choose from several 'names' all the time.

Suppose we name the array TomSettings[80]. You could put Tom0 in array slots 0..19, Tom1 in array slots 20..39, etc. Within the 20 slots for each Tom, you could order things as Mics 0..4, Pan 0..4, Mute 0..4, and Out 0..4.

With this general scheme, you could switch the displayed Tom with something rather simple like:


```
for n := 0 to 19
  set_control_par(ID+n,CONTROL_PAR_VALUE,TomSettings[Tom*20+n])
end for
```
Where Tom is the selected Tom index from 0 to 3.

It would be just as easy to update the TomSettings array when you edit one of the panels. Again, I emphasize, that this whole process gets a lot easier when you use control IDs.

Think about it! :roll: 

Rejoice,

Bob


----------



## Tod (Mar 18, 2012)

Heh heh, I figured you'd have a better way, and I figured it'd be way over my head. :D 

I'm going to take everything you gave me and examine it as close as this old brain is capable of.

The manual has bits and pieces of everything your talking about but trying to put it all in practice is another matter. 

You mention "simply create 20, 4-element arrays", I looked all over the manual to see if arrays could have more than one element and couldn't find anything. So how do you declare an array with 2 elements? Something like "*declare* %array [5, 4]"? 

Well, I'm off to check out your script, I love you my friend.


----------



## Big Bob (Mar 18, 2012)

Hi Tod,



> So how do you declare an array with 2 elements?



Hey old buddy, I'm sorry about my confusing terminology. All I mean when I say an array with 2 elements is an array of size 2. Like ABC[2]. I call that an array with two elements, or a 2-word, or a 2-integer array, etc.

By 20, 4 element arrays, I mean something like:


```
declare Mic0[4]
declare Mic1[4]
   |
   |
declare Out3[4]
declare Out4[4]
```

Then, once you set the active Tom index (0 to 4), you can access its data with:

Mic0[Tom], Mic1[Tom], etc

However, as I pointed out this requires the code that loads and stores the set of data for each tom to contain a long string of same-o, same-o commands with all the name variations. Like:

Mic0_Knob := Mic0[Tom]
Mic1_Knob := Mic1[Tom]
etc.

Much easier, is to access an 80-word array with 20*Tom as the base index, and then read 20 integers in a row from the array (setting all the corresponding panel controls by using their sequential ID indices as I illustrated in my last post). This allows you to use a loop to do the work instead of being forced to unroll the loop and perform 20 sets of operations on different named controls and arrays. 

If this still isn't clear after you think about it and examine my demo code, let me know and maybe I can give you a more-specific illustration of how to solve your particular problem. Sometimes speaking in a general way can get a bit confusing until you see a live, relevant example, no? :roll: 

But, on the other hand, there is a little bit of a learning curve involved here and if this is the only project you intend to do for a while, I would say you should do it whatever way you feel most comfortable with. 

Rejoice,

Bob


----------



## Big Bob (Mar 19, 2012)

Hey Tod,

I decided to take a little time this morning and write a better script example for you. 

I'm attaching a demo instrument, .nki, and the KScript source code for you to study.

I more or less duplicated the panel layout you posted but of course I don't know the knob ranges and display formats that you are using so, don't be too picky about such details :lol: 

The main purpose of this is to illustrate how you can use control ids to simplify the project at hand. I think what you are trying to do is to implement some sort of Preset system. Your panel has 20 controls that display or set the values for any one of four tom toms. If this isn't precisely what you are trying to do, I'm sure you should be able to modify it as needed.

Try it out. Set the panel controls to some arbitrary settings and then click on the Save menu (Tom 1 to Tom 4). Then make another set of panel settings and save those to a different Tom#, etc. After you have saved all four sets of Toms, you should be able to recall them using the Recall menu.

If you recall a Tom preset and diddle with the controls, the next time you recall that same Tom, it will revert to the last Saved settings. In other words, any changes you make to the panel will not be retained unless you Save them with the Save menu.

BTW I made the attached .nki with the latest version of K4. I don't know what version of Kontakt you are using but if it's something earlier than that, you will have to update to the latest K4 version (or use K5). NI usually, won't load any .nki files made with a later version than you are running.

Maybe this will help clarify the situation but if not, please let me know.

God Bless you my friend.

Bob


----------



## Tod (Mar 19, 2012)

Heh heh, I just slipped in to grab your other little script, time sort of got away from me yesterday.  

*Presets!* I never thought of that. :idea: I'm doing this for a friend and he'll love it. :wink: 

The only problem I might have is I updated to the latest K4 version some time ago. Strangely my stand-a-lone updated but for some reason the dll VST files didn't update, which is what I use because then I have my DAW's midi editor to help check things out. I should be able to load this in stand-a-lone and then copy the script to Nils editor.

At this point I've got the arrays set up much like you suggested above. I started out with one big array[80], but since the Vol, Pan, Mutes, etc. work independently I changed it it to 4 arrays with 20 elements each. That way I can index them with the same array[4] that is keyed by the menu with 4 toms.

Thanks a million my friend, I'll check this out and get back.


----------



## Big Bob (Mar 19, 2012)

> I started out with one big array[80], but since the Vol, Pan, Mutes, etc. work independently I changed it it to 4 arrays with 20 elements each.



I think you may want to go back to one array with 80 elements after you examine the demo script :lol: It's not really any more difficult to access any item in the 80-word array, you just have to manipulate the indices properly.

If you can give me an example of something you think is easier to do with 4 separate arrays, I'll post the counterpart for 80 element accessing. And, of course when it comes to copying the panel settings to the array or vice versa, the 80-word array is superior.

Rejoice,

Bob


----------



## Tod (Mar 20, 2012)

Big Bob @ Mon Mar 19 said:


> > I started out with one big array[80], but since the Vol, Pan, Mutes, etc. work independently I changed it it to 4 arrays with 20 elements each.
> 
> 
> 
> ...



Hi Bob,

I managed to load your nki in stand-alone so I could see it working. I also checked your un-compiled and compiled scripts so I could try to figure out what your doing. Macros must be something Nils included in his editor like Functions? :? 

I was rather late to the K4 party so I'm still writing in the K2 mode while learning bits and pieces. :oops: Actually I started out writing this for K2 because I have a couple of other friends that only have K2. But when the friend with the library requested output assignments, that changed.

I think one of the things that make it difficult for me to decipher other's scripts are variable names. Heh heh, yours are lean, neat, and short while mine are almost like sentences. :mrgreen: Well not quite but they're pretty descriptive for this old brain to keep track of.

I did manage to get my script working but not 100%. All the variables are updating properly which is good but I'm having trouble getting the UI to update. I think the key is your idea of using IDs.

I got your email and I'm going to put some stuff together to send to you.

Bless you Bob and thankyou, I can't imagine what VI-Control would be without you. o-[][]-o


----------



## Big Bob (Mar 20, 2012)

Hi Tod,



> Macros must be something Nils included in his editor like Functions?



Oh my, you are back in the dust :shock: Macros were added eons ago. They are very handy to use for declaring ui elements as you should be able to see by comparing my source code with the F5 output for Kontakt.

BTW To see the code without the functions and macros to cloud the picture for you, use Nils' latest editor and *turn off *the following options:

Compact Output
Compact Variables
Optimize compiled code

Then load my source code and hit F5. Open a new tab and paste the clipboard into it. You should now be able to see how you would write the code without using macros or functions.



> I think one of the things that make it difficult for me to decipher other's scripts are variable names. Heh heh, yours are lean, neat, and short while mine are almost like sentences. Well not quite but they're pretty descriptive for this old brain to keep track of.



Yes, that's a bad old habit of mine from the days when memory was precious so names had to be kept very short. I really should try harder to use longer, more obvious names.

Did you also load and run the prior script I posted with the 24 labels? If not, you should run that one also because it will give you further motivation to get into the control-id arena :lol: 

Anyway, I wish you the best of happy endings.

God Bless,

Bob


----------



## Tod (Mar 20, 2012)

Big Bob @ Tue Mar 20 said:


> Oh my, you are back in the dust :shock: Macros were added eons ago. They are very handy to use for declaring ui elements as you should be able to see by comparing my source code with the F5 output for Kontakt.



Yes I noticed that.



> BTW To see the code without the functions and macros to cloud the picture for you, use Nils' latest editor and *turn off *the following options:
> 
> Compact Output
> Compact Variables
> ...



I didn't try it the way you suggest above but I'm going to go do that now.



> > I think one of the things that make it difficult for me to decipher other's scripts are variable names. Heh heh, yours are lean, neat, and short while mine are almost like sentences. Well not quite but they're pretty descriptive for this old brain to keep track of.
> 
> 
> 
> Yes, that's a bad old habit of mine from the days when memory was precious so names had to be kept very short. I really should try harder to use longer, more obvious names.



Heh heh, I remember the old 8 character days.



> Did you also load and run the prior script I posted with the 24 labels? If not, you should run that one also because it will give you further motivation to get into the control-id arena :lol:



Yes I did, I ran it in stand-a-lone mode because my dll files didn't get updated for some reason. I was a little confused by the "Save Tom" menu, I was thinking it might be a preset. However, I think it was basically for saving the current Tom, right? The way I've been setting up my script is that all the pertinent data is updated as the the controls are moved. Heh heh, am I even close to understanding this right? :D 

Anyway I sent you an email which should show the direction I've been going. 

Thankyou my friend.


----------



## Big Bob (Mar 20, 2012)

Hi Tod,

In response to my question as to whether you also ran the 24 label demo you answered>



> Yes I did, I ran it in stand-a-lone mode because my dll files didn't get updated for some reason. I was a little confused by the "Save Tom" menu, I was thinking it might be a preset. However, I think it was basically for saving the current Tom, right?



I think there is a double problem here. :? The 24-label script has no Save Tom menu. So, maybe you didn't try that script yet. It gives you four actions you can run to show or hide the labels or to rearrange them. It was just to demonstrate how you can manipulate multiple controls with simple while loops.

Regarding the Save Tom menu, whenever you want you can save any panel setup to any of the four tom presets by selecting the 'destination' with the Save Tom menu. If you change the panel but don't choose a destination with the Save Tom menu, no presets will be changed. This allows you to experiment with the current preset by changing it only on the panel and not in memory so to speak. Only when you are happy with the setup, then and only then you save it to the desired preset in memory. However, if you prefer 'any panel change is immediately stored with the current preset', that's easy to arrange.

If you want, when I get a chance I can modify the demo to behave that way. Let me know if you'd like me to do that.

I received your email but I haven't had a chance to sort it out yet. I may be able to get some time for that tomorrow. I'll let you know.

To be continued ...

Rejoice,

Bob


----------



## Tod (Mar 21, 2012)

> I think there is a double problem here. The 24-label script has no Save Tom menu. So, maybe you didn't try that script yet. It gives you four actions you can run to show or hide the labels or to rearrange them. It was just to demonstrate how you can manipulate multiple controls with simple while loops.



Aah yes, I'm sorry, I got so involved with the other script I forgot about it. :oops: I have now though and have a couple of rather dumb questions.

> When you declare some UI element in the ICB without placing it does it simply take the next available slot? For example your declared all the labels "declare ui_label L_0 (1,1)"?

> In the "for" loop you're placing the labels in the manner below. Is it placing the labels twice or does it need both the "GRID_X" and "GRID_Y" before it places it? Minor details but I'm curious.  

on ui_control(Arrange1) 
``Arrange1 := 0 
``for n := 0 to 19 
````set_control_par(Labels+19-n,CONTROL_PAR_GRID_X,(n mod 5)+2) 
````set_control_par(Labels+19-n,CONTROL_PAR_GRID_Y,n/5+1) 
``end for 
end on 

> Another question about the "for loop". When it compiles it changes to "while n <= to 19". Is there much difference in efficiency between "while n <= to 19 and "while n < 20? I know it's not much but again I'm just curious.

That script shows me a lot Bob, especially I've got a lot of learning to do. :( 



> Regarding the Save Tom menu, whenever you want you can save any panel setup to any of the four tom presets by selecting the 'destination' with the Save Tom menu. If you change the panel but don't choose a destination with the Save Tom menu, no presets will be changed. This allows you to experiment with the current preset by changing it only on the panel and not in memory so to speak. Only when you are happy with the setup, then and only then you save it to the desired preset in memory. However, if you prefer 'any panel change is immediately stored with the current preset', that's easy to arrange.



Okay, now I understand where you're going with this and you have a point. Given an option like that I need to think about it but I think you're right. Maybe rather than a "Save menu" just have a button to save current Tom? On the other had that might take two sets of arrays.



> I received your email but I haven't had a chance to sort it out yet. I may be able to get some time for that tomorrow. I'll let you know.



Don't worry about it Bob, I just sent you the whole thing so that you'd know exactly what it is but it's obvious you've already got it figured out. :D 

Thankyou so much, I've got so much to learn I'm just a bit overwhelmed right now. :roll:


----------



## Big Bob (Mar 21, 2012)

Hey old bean, I don't want to overwhelm you, I'm just trying to fill in some holes for you :lol: 



> > When you declare some UI element in the ICB without placing it does it simply take the next available slot? For example your declared all the labels "declare ui_label L_0 (1,1)"?



Generally K4 will kind of position them in some sort of order but, of course, you could always rearrange them as you wish with move_control statements (or better yet in a post-init routine using control ids :roll: ). However, since I was going to illustrate using ids to rearrange things with a simple while loop, I thought I'd just let the chips fall where they wished :lol: 



> > In the "for" loop you're placing the labels in the manner below. Is it placing the labels twice or does it need both the "GRID_X" and "GRID_Y" before it places it? Minor details but I'm curious.



Most ksp commands do not actually execute until the callback issuing them exits or pauses. So, I suspect they are simply queued up and then handled collectively, hopefully in some efficient way but who knows what goes on inside of Kontakt :roll: 



> > Another question about the "for loop". When it compiles it changes to "while n <= to 19". Is there much difference in efficiency between "while n <= to 19 and "while n < 20? I know it's not much but again I'm just curious.



Well, when the loop limit is a constant known at compile time, either way is fine but suppose that the limit is the contents of a variable at run time? For example, 

```
for n := 6 to X
```
With the format Nils uses, this translates into:

```
n := 6
while n <= X
```

Whereas to compile the test as less than would reguire:

```
n := 6
while n < X+1
```
 which involves an additional 'addition' at run time, no?



> Okay, now I understand where you're going with this and you have a point. Given an option like that I need to think about it but I think you're right. Maybe rather than a "Save menu" just have a button to save current Tom? On the other had that might take two sets of arrays.



Maybe I should have used different labels. Something like: *Recall Preset *for the top menu and *Save Panel *for the bottom menu. Would that have been clearer?

Rejoice,

Bob


----------



## Tod (Mar 21, 2012)

One other question, it's becoming apparent that I need a phase button too. I've looked all over and I don't think changing group sample phase exists, right? :D


----------



## Big Bob (Mar 21, 2012)

Hi Tod,



> I've looked all over and I don't think changing group sample phase exists, right?



I don't think so but, what do you want group phase to do? Phase of what relative to what? 

Edit:

Oh, I see Mario seems to know what you meant and has a few thoughts on this that may be more appropriate for you

Bob


----------



## mk282 (Mar 22, 2012)

Tod, if you use the Inverter effect you can invert the phase. Just bypass it in and out with a button. Make sure you put it post-amp!


In Kontakt 5, NI added L/R swap and Invert phase to the Amplifier section, but OF COURSE they did not add KSP commands for those buttons.

Just like they didn't add KSP commands for LFO/Envelope retrigger button.

Just like they didn't add KSP command for LFO Phase knob.

Just like they didn't add KSP commands to swap filter types in a slot from the script.


Eh...


----------



## Tod (Mar 22, 2012)

Big Bob @ Wed Mar 21 said:


> Hi Tod,
> 
> I don't think so but, what do you want group phase to do? Phase of what relative to what?
> 
> Bob



Hi Bob, yes when you invert the phase on the bottom mic relative to the top mics it makes a big difference and sounds better. Since I've added the output selection menu for each mic it's just a matter of using a different output and then switching the phase in the DAW. However, these toms are part of a full library my friend is putting together so the number of outputs used can become rather important.

Incidently, I got the script working pretty well, at least all parts are functioning properly. However, I do want to incorporate the suggestions you've given me. I spent most of yesterday looking over your scripts, I need to learn this stuff.  



mk282 @ Thu Mar 22 said:


> Big Bob @ Wed Mar 21 said:
> 
> 
> > Oh, I see Mario seems to know what you meant and has a few thoughts on this that may be more appropriate for you
> ...



ED is that you? :D That's a good suggestion, however, I think the friend I'm doing this for only has the K5 player. He's using what ever came with Superior Drummer and he's able to load the nkis I send him. I wonder if that has the Inverter? It's worth a try.



> In Kontakt 5, NI added L/R swap and Invert phase to the Amplifier section, but OF COURSE they did not add KSP commands for those buttons.
> 
> Just like they didn't add KSP commands for LFO/Envelope retrigger button.
> 
> ...



Probably part of NI's marketing strategy, perhaps K6. :D 

Thanks mk282.


----------



## mk282 (Mar 22, 2012)

Kontakt has had the Inverter for a very long time now...


----------



## UCAudio (Mar 30, 2012)

Can you have 5 knobs positioned at the exact same pixel location as long as you use HIDE_WHOLE_CONTROL/HIDE_PART_NOTHING so that only one is visable at a time?


----------



## polypx (Mar 30, 2012)

Yes


----------

