sfizz icon indicating copy to clipboard operation
sfizz copied to clipboard

Second set of Choke groups

Open kinwie opened this issue 2 years ago • 3 comments

I know I seems greedy for opcode request, but really... we need a second set of Choke opcodes for drums and percussion stuff (especially cymbals) to simulate closer to the real instrument. So, they are :

choke_group=
choke_by=
choke_mode=
choke_time=
choke_shape=
choke_curve=

Why we need two sets? Because we are using one_shot mode and we need two different off_time (release time) to define two different choke events :

  1. Self-Choke : when the region choke itself, to prevent build-up sound effect. Usually longer off_time
  2. Choked-By : when it choked by other region, like for hihat and crash choke. Usually very short off_time.

In this simple example :

<region>
sample=crash.wav
loop_mode=one_shot
key=60
group=1
note_polyphony=1
off_time=5
choke_group=10
choke_by=11
choke_time=0.3
choke_shape=-3

<region>
sample=*silence
key=62
choke_group=11

The crash is set to 1 polyphony, group id No. 1 and with off_time 5 seconds, so it will self-choke and every previous hits will be decaying in 5 seconds.

Then it has choke_group id No.10 and will be choked by key 62 which has choke_group id No.11. The off_time (choke_time) is quick, in 0.3 seconds.

kinwie avatar Feb 16 '22 08:02 kinwie

I link this issue for monitoring : https://github.com/redtide/test/issues/3

kinwie avatar Feb 16 '22 08:02 kinwie

I break down the opcode details :

  • choke_group : Given a new number ID for a region. This ID not related to group / off_by opcodes and not related to polyphony or note_poyphony opcodes. Value : Integer. Default value : 0

  • choke_by : When a new region with a choke_group number equal to choke_by plays, that region will be turned off. Value : Integer. Default value : 0

  • choke_mode : Determinate how a region is turned off by a choke_by opcode. Value : fast, normal, time. Default value : time.

  • choke_time : When choke_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing. Value : seconds. Default value : 0.006 seconds.

  • choke_shape : The coefficient used by choke_curve. Value and default, follows ARIA

  • choke_curve : When choke_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing. Value and default, follows ARIA

kinwie avatar Feb 19 '22 06:02 kinwie

Using ampeg_dynamic=1 can offer a workaround for this, by modulating ampeg_release with off_mode=normal But still there are some issues involved in the practical usage :

  • Choke with polyaft CC130, the data event is very quick changing from CC value 127 to 0, and this cause the region to be choked but then released again so it sounded wrong
  • ampeg_dynamic seems doesn't work with extended CC 133 (key number) to use the "key-mapped choke"

kinwie avatar Feb 28 '22 11:02 kinwie