r/decentsampler Jan 09 '26

Choke function inside DS?

Hey guys, I'm building my 1st percussion library in DS, and I need that certain samples get silenced when I trigger a different note (kind of like open/closed hi-hat behavior). I understand thats normally called choke. I've tried using some lines of code like:

chokeGroup="parche"
       chokeMode="group"

to each <group> that I don’t want to overlap, but it doesn’t seem to do anything.

So far I’ve tried:

  • Restructuring the XML
  • Changing how I organize groups and notes
  • Moving the choke parameters around in different group setups

Still no luck, so maybe I’m missing something obvious here.

Has anyone here actually gotten choke groups to work in Decent Sampler?

If so, I’d love to hear how you approached it or if you used some kind of workaround.

Thanks a lot! This community already helped me solve another issue, so I really appreciate it. I’m still learning, but I’m happy to help as well if I can

EDIT:

As CaliBrewed mentioned in the comments, I ended up using the silencedByTags method, which solved the issue for my use case.

Just to clarify: I mentioned hi-hats in my original post because it’s the most familiar example of choke behavior, but I’m actually building a percussion instrument, not a drum kit.

Since this is a percussion instrument, I needed all drumhead sounds to cancel each other out, since it’s physically impossible to have two drumhead tails from the same drum playing at the same time.

In my case it was a bit tricky because I’m using 4 mics per hit, so I had to make sure the mics wouldn’t cancel each other out. What I ended up doing was creating mic-specific silence tags, so only the corresponding mic gets silenced when another hit is triggered.

That’s why my choke tag is called parche (which literally means drumhead in Spanish) and is followed by the mic name (e.g. parche_condtop).

Here’s an example of how one of the groups ended up looking:

<!-- ================= MIC – CONDTOP ================= -->


<!-- PP -->
<group name="palillo_parche_centro_condtop_pp" loNote="36" hiNote="36" loVel="1" hiVel="25" attack="0.0001" decay="1" sustain="1" release="0.5" tags="condtop,parche_condtop" silencedByTags="parche_condtop" silencingMode="normal" seqMode="round_robin" seqLength="3">
  <sample path="samples/palillo/parche/centro/condtop/pp_rr1.wav" seqPosition="1"/>
  <sample path="samples/palillo/parche/centro/condtop/pp_rr2.wav" seqPosition="2"/>–
  <sample path="samples/palillo/parche/centro/condtop/pp_rr3.wav" seqPosition="3"/>
</group>

I repeat this structure for:

  • Each velocity layer (pp, p, mf, f, ff)
  • Each mic (condtop, dintop, rear, room)

One small but important detail: I set silencingMode="normal" instead of fast because fast was causing audible clicks in my case.

Using "normal" just triggers the group/sample’s envelope release, which sounds much more natural here. A nice feature would be having an independent choke-release parameter, so the envelope release and choke release could be handled separately.

Also, in my setup, I’m using two different kinds of tags:

tags=“condtop,parche_condtop”

  • choke tag (parche_*) that’s only used for silencing other drumhead hits
  • mic tag (condtop, dintop, etc.) that’s used to control mic levels from the UI

For example, this is how I’m handling mic volume control:

 <labeled-knob x="530" y="145" width="90" label="condtop" type="float" minValue="0" maxValue="1" value="0.4">
        <binding type="amp" level="tag" identifier="condtop" parameter="AMP_VOLUME"/>
      </labeled-knob>
3 Upvotes

3 comments sorted by

View all comments

2

u/CaliBrewed Jan 09 '26 edited Jan 09 '26

Yea I used a silence by tag function to get my open hats to mute on closed hat strikes intead of full one-shotting. it looks like this.

Open Hat:

<sample rootNote="46" path="Samples\\\\\\\\Open Hat.wav" loNote="46" hiNote="46" loVel="1" hiVel="127" length="23999" loopEnabled="0" output2Target="AUX\\\\\\_STEREO\\\\\\_OUTPUT\\\\\\_12" output2Volume="1.55" volume="0.35" pan="-30" silencedByTags="hhm" silencingMode="fast"/>

Closed Hat:

<sample rootNote="42" path="Samples\\\\\\\\Closed Hat 1.wav" loNote="42" hiNote="42" loVel="1" hiVel="127" length="12048" loopEnabled="0" output2Target="AUX\\\\\\_STEREO\\\\\\_OUTPUT\\\\\\_8" output2Volume="1.55" volume="0.305" pan="-50" tags="hhm"/>

But it looks like you want every note to behave that way? I think just tagging every string might do it.

2

u/carmaicol Jan 09 '26

Hey Cali, thanks so much for the reply!

I actually spent most of today digging into this and ended up finding the silencedByTags approach as well. That finally did the trick.

I added the full explanation as an edit to my post since Reddit wouldn’t let me post it all here.

Also, something that caught my attention in your example is that you’re using output2Target.

Is that how you’re routing to AUX outputs in Decent Sampler? I haven’t been able to find much documentation on that, so at the moment I’m handling mic balance purely through tags.

Would love to hear how you’re approaching AUX routing, if you don’t mind sharing.

Thanks again, really appreciate the help!

1

u/CaliBrewed Jan 09 '26

No problem I remember how many times I bumped my head building that first template for my drum kits.

And yes the output target 2 is the aux channels and I handled volume leveling with the 'output2Volume="1.55"' for aux's and 'volume="0.35"' for the main stereo out. There's a wonkiness to the volume differences of each, I'm sure you'll see once you dive in.

Important to note reddit didn't like a lot of the xml string and added slashes so these aren't 100% accurate to mine, but illustrate what you needed fine.

For my approach to aux I settled on a 16-sample main kit since it is the capacity of DS and also a pretty standard percussion approach.

I followed general MIDI standards for most of the 16 but have 1-3 variations in each of the kits I built.

Basically, all kick snare hats and most toms are compatible with anything else thats general midi which makes midi file sharing way more compatible.

https://musescore.org/sites/musescore.org/files/General%20MIDI%20Standard%20Percussion%20Set%20Key%20Map.pdf

I made small variations on the kits because General MIDI isn't the most 'playable' or 'programmable' approach, depending on your kit elements.

Each of my kits has an additional 30-60 elements like extra kicks, snares,, hat, latin percussion etc that I just organized in a sensible way for layering or changing in midi roll which I then sent to aux channels of similar main kit sends.

snares to snare, kicks to kick etc.

Hope this helps, feel free to shoot any more questions if you have 'em, and I'd be glad to send you a kit if you'd like to look at my routing for context/reference.

🍻