Closed kinwie closed 1 year ago
I've made a wiki describe the need of this opcodes addition along with example sfz test file for demonstration of this case, in here : https://github.com/kinwie/sfztest/wiki/Test-for-the-need-of-2-different-'off_time'-for-drums
This is an example of an existing sample player that has 2 off_time settings (rel. time)
https://user-images.githubusercontent.com/65444898/89728279-55380a00-da56-11ea-9050-b5045fe50315.png
I agree to ARIA's alias polyphony_group
for group
opcode, so it's the most suitable to define polyphony group voicing.
As the first post suggest 2 set off/mute group opcode, I think it is good to add 1 more as preservation for future needs or for some advanced feature combination, so we have 3 sets of off/mute group opcodes.
The opcode names of the 3rd set can be, maybe : mute_group mute_by etc, or any better name.
I made an example test that includes these 3 set of opcodes. First one is used for Self-mute, with off_time at 2 seconds, to prevent the build-up effect. 2nd set is used for Choked by other key, with off_time at 0.5 seconds. 3rd set is used for Round-robin on/off toggle, with off_time at 0 seconds.
This first example will load and play and illustrate the sfz programming/design. Notice the first keyswitch example won't get choked shortly because the off_time is too long.
<global>
sample=*saw
key=48
ampeg_decay=4
ampeg_sustain=0
ampeg_release=4
note_polyphony=1
sw_lokey=36
sw_hikey=38
sw_default=36
<region>
sw_last=36
sw_label=Long, Self-mute
off_time=2
group=1
off_by=2
<region>
sw_last=37
sw_label=Short, Choked by other key
off_time=0.5
group=1
off_by=2
//-------------
<group>
sw_last=38
sw_label=Zero, For RR-on/off
off_time=0
seq_length=3
<region>
seq_position=1
region_label=RR_1
group=1
off_by=2
<region>
seq_position=2
region_label=RR_2
tune=1200
group=2
off_by=2
<region>
seq_position=3
region_label=RR_3
tune=2400
group=2
off_by=2
//===============
<global>
<region>
sample=*silence
key=50
note_polyphony=1
group=2
off_by=2
This second example won't play properly at this moment, but this is the example of the intended feature. So, the first one used polyphony_group= set of opcode. 2nd ones used cut_group= and 3rd ones used mute_group=
<global>
sample=*saw
key=48
ampeg_decay=4
ampeg_sustain=0
ampeg_release=4
note_polyphony=1
sw_lokey=36
sw_hikey=37
sw_default=36
//Long, Self-mute
polyphony_group=1
off_time=2
//Short, Choked by other key
cut_group=1
cut_by=2
cut_time=0.5
//-------------
<group>
sw_lolast=36
sw_hilast=37
sw_label=RR off
//Zero, For RR-on/off
mute_group=1
mute_by=2
mute_time=0
<region>
region_label=RR_1
//-------------
<group>
sw_last=37
sw_label=RR on
mute_group=2
seq_length=3
<region>
seq_position=2
region_label=RR_2
tune=1200
<region>
seq_position=3
region_label=RR_3
tune=2400
//===============
<global>
<region>
sample=*silence
key=50
cut_group=2
As an alternative addition to current SFZ v2 specs, #20 seems to be simpler implemented and would have similar desired function
To better mimic the real behaviour of Drums & Percussion into sampled instrument, where this type of percussive instruments sound are decaying itself interuptedly after every new hits. And for the like, cymbals/hihat, also need to be choked/muted by other articulations. So there are two decaying in its sound which are,
So in sfz programming, it is need to setup two different off_time, to prevent the unnatural build-up sound and also to have a proper choked sound
Currently, sfz has only 1 set of off/mute group opcodes, which are : group off_by off_mode off_time off_shape off_curve Those can be used to set polyphony group voicing
I suggest to add another set of opcodes for the choke needs, which are : cut_group cut_by cut_mode cut_time cut_shape cut_curve
* other than "cut", optional opcode name can be also like :
mute_group
,mute_by
, etc.choke_group
,choke_by
, etc.