[done b4 & b5] Mute groups

Interesting…
Complicated, but interesting…
Thanks or sharing!

An interesting although cumbersome workaround.

But good grief, it does not need to be this difficult! All that you need to do is add a simple extra box in the Sample Properties like in the attached image. I can’t see this change adding too many lines of code, and it would bring Renoise’s sampling capabilities up to a standard that other software has been using for decades.

Group 00 is the null group, and samples in this group do not affect the playback of any other samples in the instrument.
Group 01 (and so on) will define a group which will mute/choke each other, but nothing else. So if you were to build a drum kit, you would leave all of the samples as 00 except the hi-hats, which you would assign to Group 01. You might also set up some groups to simulate crash cymbal chokes.

That is how the General MIDI standard for drums works, and that is how almost every serious sampler that plays back drums works. It is in the soundfont standard, the SFZ standard and various other formats. If you don’t want to use mute groups, you don’t have to - everything should default to 00, where nothing is muted.

Below is an extract from a .sfz multisample drumkit to show how ridiculously simple this is to work with, and why it is so perplexing that Renoise does not yet support it:

  
  
// Acoustic Snare  
  
<group> key=38 loop_mode=one_shot<br>
<br>
<br>
<region> lovel=81 hivel=89 sample=Tight Kit\Snares\Tight Kit Dry Snare 07.wav<br>
<region> lovel=90 hivel=91 sample=Tight Kit\Snares\Tight Kit Dry Snare 08a.wav<br>
<br>
	<br>
// Hi-Hats<br>
<br>
<br>
// Closed Hi Hat<br>
<group> key=42 loop_mode=one_shot	<br>
<br>
<region> group=1 off_by=1 lovel=0 hivel=24 sample=Tight Kit\Hi-Hats\14 inch New Beat Hi-Hats Closed Tip 01.wav<br>
<region> group=1 off_by=1 lovel=25 hivel=42 sample=Tight Kit\Hi-Hats\14 inch New Beat Hi-Hats Closed Tip 02.wav<br>
<region> group=1 off_by=1 lovel=43 hivel=52 sample=Tight Kit\Hi-Hats\14 inch New Beat Hi-Hats Closed Tip 03.wav<br>
<br>
<br>```

<br>
<br>
In the above sample of an .sfz instrument, the snare has not been assigned to a mute group, while the hi hat has been assigned to group 1. Anything in group 1 will choke anything else in group 1, but nothing in the null group or in group 2 etc...<br>
<br>
As you can see, unless you expressly assign a sample to a mute group, it won't be affected.<br>
<br>
For those interested, the .sfz format is detailed here:<br>
<br>
<a href="http://www.sfzformat.com/">SFZ Format</a><br>
<br>
Renoise would do well to incorporate full support for the .sfz standard.</region></region></region></group></region></region></group>

We’ve been looking for an easy approach to implement mute groups during the alpha testing, but could not find one.
This looks like a great and easy way to realize it. Thanks for sharing your idea!

I looked more into it, it doesn’t! There are several problems:

  1. It is one way only. The closed hihat will mute the open one, but not the other way around.
  2. The open hihat does not mute itself when hit repeatedly!
  3. Despite the name “mute” groups, the sounds actually have to be stopped in playback! In the example with the key tracker, the open hi hat will be muted only, if you play another open hihat, the tail of the old one will still play. This is unusable for fast hihat patterns.

So to be clear here: The problem is not solved!!! The offered method is not a solution!

I honestly don’t understand what is so complicated about the concept of mute groups. Just allow samples to be grouped and let people set the polyphony of this group (polyphony=1 would be a mute group). It is just this NNA concept you already have, only applied to a subset of all samples instead of all samples. Seems straight forward to implement to me.

I don’t understand why you think that this would not work. Would you mind explaining this a bit more detailed?

The rule would be: when a sample in mute group X gets triggered, it stops playing (or applies NNA) all other playing samples within the track which are assigned to mute group X as well. By default samples are in no mute group at all.

!How! to set this up in/with the UI is the problem, not how to implement it.

Mute groups are really useful, I would love to see this happen (and I’m sure any MPC user would agree).
Lets try to be very specific about how it could work? For instance, I would expect the NNA feature to come into action when using mute groups. The NNA is currently reserved for notes triggered in the same column, but it would be damn cool to see this useful feature appear when playing an instrument.

So adding any sample to a mute group could then define, per-sample, if a given sample was “cut”, using the release phase of it’s modulation (“note off”), or continue playing (although this last option would actually make the mute group setting obsolete, but “continue” is a strange beast anyway…). And, as fladd writes, the mute group setting could apply to samples that are retriggered, too. So, the hihat which is set to “NNA cut” would effectively cut itself, too.

Also, let’s not forget about note-off layers. Might be a rarely used feature in Renoise, but it really seems relevant in the context of mute groups because they could get triggered at the exact same time as the new note was triggered.

IMHO, it would be best to have an “either or” approach to mute groups. A polyphonic group group is sort of…hm…hard to work with. Imagine this, mixed with the round robin feature and such?
Perhaps polyphonic groups belong elsewhere, as a global property of the instrument (such as it is being discussed here)

Thanks for the quick response!

Looking again at the example, I actually just realized that you could hack around those problems indeed!

  1. Just add a gainer and a key tracker to all samples in the non-existent mute group and then connect the each key tracker to each other sample’s gainer (cumbersome, but the end results would work, I think - I did not test this, though!)
  2. NNA seem to be per sampler, so setting it to cut on each of the samples in the virtual mute group should do. Again, not tested, so I am not sure if there are unwanted side effects.
  3. Setting NNA to cut on each sample would also solve this, I think.

Cool! So far so good! It is possible, but it seems a bit cumbersome given the simple problem to solve.

Skip the word “track” in this explanation and yes, this is how I also would imagine it to work. It should work irrespective of tracks, that is the whole point. You can already sequence the sounds correctly, mite groups are about playing them! Except if we will be able to assign samples/groups to tracks of course.

Uhm, in the advanced sample settings (where also the NNA setting per sample is) a combination of a Label saying “Mute Group:” and a simple dropdown menu with numbers as items should do it… Or what am I missing here?

I think we’re talking about different things. I’ve replied to “Hazardous!” last idea. No gainers or key trackers are involved here?

I don’t see why it hurts to apply this per track. In contrary. You can play an instrument in realtime on one track only, so this does not break real-time playback.
It would allow you to sequence/use the same instruments on multiple tracks at the same time though.

Sorry taktik, we were indeed talking about different things. I somehow thought you replied to the other solution posted above. I should have read better, sorry.
Anyway, the solution you are talking about seems the most straightforward solution! Looking forward to see this implemented! I am glad this thread led to a proper solution. Cheers!

Thanks taktik

No issues with it being limited to a track - that is how I use Renoise anyway (one instrument assigned to a track (potentially more than one track if it is a multi-out VSTi), which is why I’ve been asking for instruments which can be attached to tracks instead of notes.

Having said that, I see no particular reason why it should have to be limited to one track only. I recommend having a look at how some other samplers do this - there are a few open source programs that play back soundfonts and .sfz files (you could see how they have coded mute groups), and the .sfz spec could give you some more ideas for the future of XRNI…

I look forward to seeing this implemented!

So a closed hihat on track 1 will mute an open hihat on track 2, if both are part of the same instrument? Because this is what one would expect of course. Mute groups are part of the instrument, not part of a specific track.

Awesome taktik! Thanks a lot! The implementations looks straight forward, well done! One minor bug though, when no group is assigned and an envelope is used, and samples are set to cut, they will still cut each other, but only when the key of the playing note (which will continue playing due to the envelope) has been released already when the other note is hit. I think this shouldn’t happen when set to no mute group?

Samples played back on the same column always will cut (NNA) each others. That’s how things work in a tracker.
If you mean something else, could you please try to explain that again?

I wasn’t sequencing. I just played the notes with the keyboard.

To make it more clear:

  1. Open Renoise
  2. Load sample1 into instrument, assign e.g. C-4 to it
  3. Load Sample2 into instrument, assign e.g. D-4 to it
  4. Set NNA of Sample1 to “cut”
  5. Set NNA of Sample2 to “cut”
  6. Add volume envelope (horizontal line at full volume) to the instrument
  7. Press down the “Z” key (and hold it) --> Sample1 plays
  8. Press down the “X” key --> Sample2 plays in addition to Sample1
  9. Press down the “Z” key (and release it again immediately) --> Sample1 plays (and keeps playing due to the envelope)
  10. Press down the “X” key --> Sample2 plays, but cuts Sample1

Given that both, Sample1 and Sample2 are not assigned to any mute group, 8. is expected behaviour (both samples play individually), but 10. is not expected behaviour, since Sample2 cuts off (mutes) Sample1, although they are not in a common mute group. The only difference between both scenarios is that in 8. the key triggering Sample1 is hold down when the key for Sample2 is hit, while this is not the case in 10. However, that should have absolutely no impact on the mute group behaviour of course.

I hope this is now a bit more clear. Please let me know if there are further questions.

That never was so in 2.8 and lower and i suspect for compatibility sake this is probably kept like the old way quite intentionally.

It would perhaps be a better design to add all samples to group 1 by default, discard the “none” option at all and extend the group feature by applying the NNA rather than just simply cut: simply call them NNA group or NNA cluster.
It would remove all confusions because it is now clear:by default all samples are always in one group → NNA now applies to all samples and respects the old tracker behavior.
Anyone requiring extra groups can simply sway other samples to an extra NNA cluster to prevent the NNA from cluster 1 being applied to those samples.
Visually only the title of the option changes, technically, you have full NNA power over different groups of samples.

I’m really happy that this has been implemented - thanks Renoise team!!!

There are some wrinkles however, as fladd points out.

If all notes are set to NNA=Continue, the mute group setting should override this to cut notes within a mute Group. If I set all of the notes in the unmuted “none” group with NNA=continue, and setting the hi-hat Group (which I’ve assinged to Group 1) to NNA=Cut, the hi hats are cutting notes outside their group when they shouldn’t. This issue occurs when playing notes on a keyboard - it is not so much a problem from a perspective of tracking the notes, but when playing/recording via MIDI, it is a big deal. I suggest this will become more evident in Redux, when the XRNI will be used in a traditional DAW environment with MIDI rather than a tracker.

Could you please tweak the way NNA=continue works with mute groups so that if samples inside a mute Group (other than the “null” group" set to NNA=Continue will mute, but only when another sample in that mute group is triggered, and does not affect playback of anything outside the mute group. This will then make the sampler behavior consistent with the way 95% of other samplers work, and make realistic playable drumkits more viable.

To be consistent with the way other samplers do things, particularly the popular .sfz format, Group 0 should be the default group that does not mute other samples, while groups from 1 onwards will mute other samples in the group.

Edit: I’m not sure if I am also running into some kind of polyphony limitation, as it seems like notes get cut randomly when there are a lot of samples with long tails playing. For the instrument to work properly, it really needs to have a high polyphony setting to prevent note tails being cut off. Is there some limitation on the number of simultaneous notes being triggered per instrument, and if so what is it? If there is, can it be increased. Ideally I’d like to be able to manually set the polyphony of an instrument from anywhere from monophonic to at least 64 voices, if not 128.

Uhm, what? NNA is per sample, not per instrument (at least it was in earlier betas). If it wasn’t, that is if every sample cut off every other sample, this would have meant that Renoise already did mute group behaviour per default and could not do otherwise. In that case this thread would have been a feature request not for mute groups, but for “non-mute groups”, as this is what I cannot seem to achieve at the moment anymore. Now everything mutes everything, irrespective of the mute group settings (and even if no mute group is set).

Well, yes, that is the one single thing a mute group seeks to achieve! And it does not work…

I do not understand how the mute group feature is supposed to work at the moment! Now everything is muted by everything by default it seems. Even worse, I cannot make this behaviour stop!
At least not when envelopes are used, which have to be used in the case of drums, since a drum is not like a piano key which is held down and released when it should stop playing. A drum hit is a single hit, where there is no note off! To achieve this in Renoise you have to use a volume envelope that keeps the sound playing even after release of the key that triggers the drum hit!

To make the function of mute groups clear again:
By default, that is when samples are not assigned to a mute group, they should NOT stop each other of course (irrespective of whether an envelope is used or not!). They are individual samples, continuing playing individually.
If two or more samples are assigned to a mute group, then those samples within this mute group will cut off ANY OTHER SAMPLE in this group, when triggered. Again, this is of course irrespective of whether an envelope is used or not.
I also don’t want to exclude that functionality is actually there (but apparently in a different way) and that we just don’t get it. In this case, please provide us a step by step instruction (or even better an example XRNI) of how the mute groups work. In general, I am very confident that we will find a good solution before Renoise goes final!

Devs: Please let us know what the exact comprehension problems for this concept are. For me (and most people asking for this feature) it is a very straight forward concept. I understand that the concept is apparently new for you, so please let us know what exactly is still unclear about it for you, so that we can explain in the level of detail that is necessary.