Controlling envelope times using an interpolated 2D table
I've long considered developing wavetable instruments in Kontakt and now that there's a sale I might take the plunge.
But there's something I need it to do, and I haven't yet come across how to do it.
I want to control modulation sources like envelopes, LFOs, etc., by two dimensions at once. For example, I might want to control an envelope generator's decay time from a table of values, where the row number might be connected to the note-on pitch and the column number might be controlled by the mod wheel, using perhaps 4 or 8 breakpoints. With interpolation along both axes.
So, I'd want to populate a table with perhaps 61 rows and 8 columns, each axis driven by a modulation source, and the interpolated value of the table used to control the attack time of an envelope, or the rate of an LFO. Or a position in a wavetable.
To accomplish what I want, I'll need to do a lot of this. Reaktor makes this easy, but how about Kontakt?
Thanks, Chet
Comments
-
Let me see if I got this right, in the decay time example you would pick the value to be passed based on a matrix (a 2D list) where one axis (rows) is given by the note-on pitch and the other axis (column) is given by the mod wheel?
Or more generically, you have a matrix Aij and the way to get i and j values is through given predetermined values. And in that unique address would lie the value you want to pass to your target.
If the above is correct, in case your matrix has 61 rows and 8 columns you will need to do a certain kind of transformation (mapping) between the range of values of your predetermined input towards the rows or columns quantity. Math functions are great for this :)
For example, note-on pitch to rows. You have 128 possible note pitches, that need to convert to 61.
Choosing the simplest math function, a linear one, you would need to map for every number in the set 0-127 an integer number in the set 0-60 (using zero based ranges here).
That would be given by y = 60x/127, but because you need y to be always integer you can choose between ceil, floor or round doing y = rounding_function(60x/127)
And of course you would have to cast x into real, then y back into integer.
Same goes for the column. y = 8x/127. Both are devided by 127 because the pitch range and modwheel range are the same, but this might need to be adjusted for other parameters.
0 -
Thanks! Yes, that's exactly what I want to do.
I'd like to port a Reaktor wavetable instrument I've built (Dannenberg Brass) to Kontakt, and the addressing of the wavetable (in Reaktor) is controlled in some part by LFOs and EGs. And their parameters are controlled by all kinds of functions.
After your response I think the math functions are there to do it.
In particular, I want to use the Flexible Envelope as one of the modulation inputs to the wavetable. The Welcome to Kontakt manual sounds like the first eight breakpoints of a Flexible Envelope can be modulated. Can I presume I can do it via the technique you've described? That's what I'm hoping.
Btw, I don't want the Flexible Envelope itself to be visible in the GUI. It's driven by tables only.
I'm a beginner with Kontakt, but experienced with Reaktor. I'd like to take the Kontakt plunge but am doing some investigating first.
0
Categories
- All Categories
- 19 Welcome
- 1.5K Hangout
- 62 NI News
- 785 Tech Talks
- 4.1K Native Access
- 16.5K Komplete
- 2K Komplete General
- 4.3K Komplete Kontrol
- 5.7K Kontakt
- 1.6K Reaktor
- 378 Battery 4
- 845 Guitar Rig & FX
- 429 Massive X & Synths
- 1.3K Other Software & Hardware
- 5.8K Maschine
- 7.3K Traktor
- 7.3K Traktor Software & Hardware
- Check out everything you can do
- Create an account
- See member benefits
- Answer questions
- Ask the community
- See product news
- Connect with creators