Posted on Leave a comment

Decent Sampler now has (experimental) support for legato samples and voice muting

The latest version of Decent Sampler (1.0.11) has experimental support for legato. In this post, I go over what has been implemented and also ask for some feedback from instrument creators.

I’ve based my implementation on SFZ, with some notable differences. In fact, what I’m doing (with tags) is a little different from any other sampler I’ve seen, and I want to make sure that I’m not inviting more problems than I’m solving.

Voice Muting (SFZ vs Decent Sampler)

Before we get into legato, let’s talk about voice muting. This is the behavior wherein one set of samples causes another set of samples to stop playing. This can be desirable in situations where two samples should not be sounding at the same time.

Here’s how voice-muting works in SFZ:

  1. A sample creator will assign a group number to a sample or a group of samples.
  2. They will they specify an off_by value. The off_by is the number of the group that should silence the current group.

For example, you might have all of your hi-hats with group=1 and then have them also be self-muting by adding off_by=1. Since both of these are set to the same number, if you trigger any samples in that group it will stop any other samples that might always be playing.

The way I have implemented these in Decent Sampler is slightly different. In a previous release of the sampler, I introduced the concept of tags. These are text labels that you can use to identify samples or groups of samples. Right now, voice muting works using those same tags. You can add a silencedByTags attribute to groups or sample elements. This consists of a comma-separated list of tags. When a sample with a tag matching one of the tags in the silencedByTags is played, it will silence the current sample (or group). Here’s an example:

        <group tags="hihat" silencedByTags="hihat" silencingMode="fast">
            <!-- Your samples go here. -->

Note that silencingMode attribute as well (a value of “fast” means we immediately silence, whereas “normal” means we trigger the ADSR release phase).

So there are really two changes from SFZ here (other than the naming differences, of course). The first change is that we are using tags instead of numbers. The second change is that each sample can potentially be silenced by more than one tag. This sounds useful to me, but is it? Would love to get some feedback on this.


Legato is handled exactly like SFZ. There is a trigger attribute that can be added to the group or samples tag. The default value is attack, but there are two useful new values:

  • first: This value means that this sample will only trigger if no other notes are playing
  • legato: This value means that this sample will only trigger if other notes are already playing


It’s sometimes useful to limit polyphony for a specific sample or set of samples. SFZ allows you to specify this at group, local, or global levels. I’ve once again taken a different approach and I’ve again made it tag-based. At the top-level of your file, you can specify a <tags> element as follows:

        <group tags="some-tag" >
            <!-- ... -->
        <tag name="some-tag" polyphony="1" />


I would love to get some feedback from the sample developer community as to whether the direction I’ve taken with this is the right one. Does this tag-based approach seem like a reasonable system? Or should I simply adopt the SFZ way of doing things?


Posted on 1 Comment

How to get 103 sample libraries for FREE! (Kontakt not required)

Last week, Fred Poirier released DecentSampler versions for 103 instruments on Pianobook. Now you can download them for FREE and use them in your music. More details in the Youtube video:

Check out composer Fred Poirier’s video here.

The easiest way to find the new instruments right now is via this google search.

Decent Sampler is a free plugin for Mac, Windows, and iOS. You can download DecentSampler plugin here.

Have fun!