Round Robin + Group XFade
-
Another possibility would be to use a note offset for the RR group. This works of course only for sample sets which don't span the entire keyboard (but for normal orchestral instruments with their limited range you should be fine).
Let's say you have 2 dynamic layers and 3x RR with a sample set that goes from C2 to B4 (3 octaves = 36 notes). Then you can map the RR1 group to the notes C-1 to B1, RR2 to C2 to B4 and RR3 from C5 to B7 and implement the RR logic like this:
reg octaveShift = 0; function onNoteOn() { local thisShift = (octaveShift-1) * 36; Message.setTransposeAmount(thisShift); octaveShift = (octaveShift + 1) % 3; }
With 3 RR groups you have 127 / 3 = 42 note slots available using this trick.
-
@christoph-hart I will use this technique! Very good suggestion :) thanks
-
@d-healey I know this is quite an old post, but we're running into a similar situation now and I'm wondering if there's a cleaner solution. We currently use the xfade groups for dynamics, but we may also have round robins + velocity layers in our next expansion pack and our samples span the entire keyboard length, so we can't use Christoph's note offset RR solution.
Use multiple xfade groups and script the RR - currently limited to 8 xfades
It seems like this option might still be the best bet?
-
@Casey-Kolb Do your samples also spread over the velocity range?
-
@d-healey Yes.
-
@Casey-Kolb I should have worded that differently. Are you using multiple samples at different velocities on the same key, or is it the same sample covering the entire velocity range?
-
@d-healey ah yes, I see. We will have multiple velocity layers (ie a sample for velocity 0-27, 28-56, 57-80, and so on)
-
@Casey-Kolb If you're not using velocity crossfades you could compress the range of velocities you are using to map those samples and use scripting to remap the incoming velocity to the correct one. That would free up the rest of the velocity range for repetition samples.
-
@d-healey That's an interesting idea. Do you think that's cleaner than switching dynamic groups (1/2, 3/4, 5/6, etc) with scripting?
-
@Casey-Kolb there is an inbuilt solution for this now:
https://docs.hise.audio/scripting/scripting-api/sampler/index.html#setmultigroupindex
-
@Christoph-Hart Killer! Thank you.
-
Bumping again to say that I have an instrument that runs into this constraint, without a way to work around it: lots of samples that need to be categorized into RR, dyanmic, and variant.
I'll just use lots of samplers, but it would be really cool if we could assign samples to both an rr and a dynamic layer, like if the groups used to set up "group fade" were separate from those to set up RRs.
-
@Simon Is there a reason you can't use the velocity range for round robins since you're using groups for dynamics?
-
Yes, because legato samples are mapped to velocity.
-
@Simon Why can't you have both mapped to velocity? You have 127 values to play with.
-
When the amount of rr x dyn is high, the samples don't fit, without doing something janky like offsetting some sets of samples in both note and velocity, which makes working with the maps more difficult. A two octave instrument, six playing styles, and two dynamics is enough to make it not fit comfortably in 127 notes or vels. Plus, my favorite thing about HISE is leaving behind the janky workarounds I had to use all the time in Kontakt. Not needing to manage duplicates of all groups just to have multiple mics is the best :)
The point is not that having lots of rrs and dynamics is impossible, but that it would be very convenient if RRs and crossfade dynamics could be used separately and simultaneously, with a UI that makes the distinction easy to work with.
-
@Simon said in Round Robin + Group XFade:
six playing styles
One sampler per style.
Note range just for the pitches
Groups for the dynamics
Velocity for repetitions (and legato if you don't want to or can't use a separate sampler for them).@Simon said in Round Robin + Group XFade:
it would be very convenient if RRs and crossfade dynamics could be used separately and simultaneously, with a UI that makes the distinction easy to work with.
I agree, but in the meantime I'm trying to find solutions that avoid using lots samplers
-
Actually I just checked and it's now possible in HISE to have lots of groups with xfade, and with the setMultiGroupIndex function you should be able to use RRs and dynamics with groups - I find the group management in HISE much worse than Kontakt's though so I avoid lots of groups where possible.
-
I tried a build from develop but it still looks like group xfade works on the first 8 rr groups. Maybe I misunderstood?
-
@Simon It's an interface issue I think. Click this XFade on button and you'll see a table for every group.
However setting them all individually seems like a nightmare so I would add a script to your project with however many tables you need, let's say you have 3 dynamics, so 3 tables. And through the magic of scripting use those to set the xfade tables for all the RRs.Ignore that, looks like Christoph already foresaw this issue - https://docs.hise.dev/scripting/scripting-api/sampler/index.html#setmultigroupindex