Replies: 8 comments 8 replies
-
I fail to comprehend this approach, sry. If you want this to be taken seriously, you should once again explain your use-case or problem you're trying to solve. I remember that we've already been in touch some time ago, so feel free to share a link to where you have explained this before.
I fail to understand what you mean by this sentence. Pls. try again. It would also be helpful if you provided a full modulator example. So far, you have only suggested to introduce a new modulator source, but you have not explained how this is supposed to influence any particular destination generator, which is the main task of a modulator. |
Beta Was this translation helpful? Give feedback.
-
Hello from @derselbst . Thank you for your attention.
Sorry for my bad English.
Actually I meant: "The controller source uses the value of the key_off event sent from the MIDI command with the sustain pedal pressed". I would like to be able to modify the volume envelope when the voice status changes to sustained: (voice->status = FLUID_VOICE_SUSTAINED). I have a flute preset that sounds indefinitely while the key is pressed and also when the key is released while the sustain pedal is pressed. This is the initial volume envelope: Delay = 0.001s, Attack = 0.025s, Hold = 0.001s, Sustain = 0.0 dB, Release = 0.250s, Decay= 9.998s With modulator 1 Note-On Sustained = 1, amout 600 mod dest volume envelope sustain. When the modulator is activated there should be a smooth decay in about 10 seconds. The existing modulation sources do not give us access to the key release event (key_off) when the sustain pedal is pressed, so I propose creating a modulation source (Note-On Sustained) to be triggered when the voice changes status to sustained (voice->status = FLUID_VOICE_SUSTAINED). Note that this smooth decay must occur before volume envelope release. |
Beta Was this translation helpful? Give feedback.
-
Let's not override the meaning of existing terms. NoteOff refers to the MIDI event. The corresponding sound will end when the voice has finished its release phase (e.g. let's call it voiceOff, or soundOff). But I think I'm starting to understand it. What you need is a way for the modulator to only become effective once the noteOff event has been received. So let's consider my example from above again: src1: If you were able to not only specify an "absolute transform" but also an additional transform, which evaluates to:
from my understanding, this would satisfy your use-case, wouldn't it? I'm suggesting to use an additional transform because, whether or not a noteOff event has been received is a binary option, i.e. it wouldn't make sense to waste a modulator source for this, as you cannot map it in the range [0;1]. (I'm trying to find more general solution to your specific use-case.) |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Maybe the final result will be 30db on this one, because of the range[-63:64].
I didn't pay attention to this. I thought I could keep volEnvHold while noteOff didn't happen, but that wasn't possible.
I've noticed this a few times, but I haven't related it to the volEnvDecay time.
I enjoyed seeing the high level conversation. I think the solution presented by @Davi7125 excellent and simple to implement, in my opinion: create another playback mode.
I tested it using CC69. It looked similar to @Davi7125's chart. |
Beta Was this translation helpful? Give feedback.
-
Hi, @derselbst . Could you open this pull request? //src/synth/fluid_voice.h add ignore_sustain to struct _fluid_voice_t at line 80
//src/synth/fluid_voice.c init value to ignore_sustain at new_fluid_voice at line 249
// src/synth/fluid_voice.c evaluate ignore_sustain in fluid_voice_calculate_runtime_synthesis_parameters inside loop structure at line 616
// src/synth/fluid_voice.c add to try force new release if voice already is in release fase in fluid_voice_update_param in case GEN_VOLENVRELEASE at line 1106
// src/synth/fluid_voice.c change that line to ignore default sustain at fluid_voice_noteoff at line 1365
With these few lines, perhaps you could modify the release without adding a new source. We only ignore channel_sustained if CC64 wants to modulate volEnvRelease. ![]() |
Beta Was this translation helpful? Give feedback.
-
Wow. I didn't notice that either. I wanted to make sure there would only be a release if it was already in progress, so the count would start at the time of the event. (If the release was set to 5 seconds and 2 seconds have already passed by the time it's changed to 1 second, there will be a sudden drop because 2 seconds have already passed since the start of the count. Therefore, I believe that if there's a new release, the count will start over.) The evaluation needs to be done before changing the release time. Let's change it to this in line 1101: /* old */
/* new */
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
add note-on sustain as a modulator source
Could someone please add note-on-sustain as a modulator source?
I mean note-on-sustain when the key is released, but the note remains sustained by the depressed sustain pedal.
According to the specification, these are the non-CC sources:
0 No Controller
2 Note-On Velocity
3 Note-On Key Number
10 Poly Pressure
13 Channel Pressure
14 Pitch Wheel
16 Pitch Wheel Sensitivity
I propose to create this additional number 1:
0 No Controller
1 Note-On Sustained
2 Note-On Velocity
3 Note-On Key Number
10 Poly Pressure
13 Channel Pressure
14 Pitch Wheel
16 Pitch Wheel Sensitivity
1 Note-On Sustained = The controller source to be used is the event value key_off is sent from the MIDI note-on command which generated the given sound width CC64 depressed.
This way, a volume envelope could be applied when the key is released and is sustained by CC64=1
I found that in "fluid_voice.c" there is the function: "fluid_voice_noteoff(fluid_voice_t *voice)" that changes the voice status to Sustained if the pedal is already pressed.
I believe that this is where this modulator should be triggered if it is activated.
Beta Was this translation helpful? Give feedback.
All reactions