Set the envelope free-running also when loopmode=one_shot
This commit is contained in:
parent
75c27b0577
commit
5a10af74ed
3 changed files with 40 additions and 1 deletions
|
|
@ -40,7 +40,11 @@ void ADSREnvelope<Type>::reset(const EGDescription& desc, const Region& region,
|
|||
|
||||
releaseDelay = 0;
|
||||
shouldRelease = false;
|
||||
freeRunning = ((region.trigger == SfzTrigger::release) || (region.trigger == SfzTrigger::release_key));
|
||||
freeRunning = (
|
||||
(region.trigger == SfzTrigger::release)
|
||||
|| (region.trigger == SfzTrigger::release_key)
|
||||
|| region.loopMode == SfzLoopMode::one_shot
|
||||
);
|
||||
currentValue = this->start;
|
||||
currentState = State::Delay;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -224,6 +224,29 @@ TEST_CASE("[Synth] Trigger=release_key and an envelope properly kills the voice
|
|||
REQUIRE( synth.getVoiceView(0)->isFree() );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] loopmode=one_shot and an envelope properly kills the voice at the end of the envelope")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
synth.setSampleRate(48000);
|
||||
synth.setSamplesPerBlock(480);
|
||||
sfz::AudioBuffer<float> buffer(2, 480);
|
||||
synth.setNumVoices(1);
|
||||
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/envelope_one_shot.sfz");
|
||||
synth.noteOn(0, 60, 63);
|
||||
synth.noteOff(0, 60, 63);
|
||||
REQUIRE( !synth.getVoiceView(0)->isFree() );
|
||||
synth.renderBlock(buffer); // Attack (0.02)
|
||||
synth.renderBlock(buffer);
|
||||
synth.renderBlock(buffer); // Decay (0.02)
|
||||
synth.renderBlock(buffer);
|
||||
synth.renderBlock(buffer); // Release (0.1)
|
||||
REQUIRE( synth.getVoiceView(0)->canBeStolen() );
|
||||
// Release is 0.1s
|
||||
for (int i = 0; i < 10; ++i)
|
||||
synth.renderBlock(buffer);
|
||||
REQUIRE( synth.getVoiceView(0)->isFree() );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] Number of effect buses and resetting behavior")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
|
|
|
|||
12
tests/TestFiles/envelope_one_shot.sfz
Normal file
12
tests/TestFiles/envelope_one_shot.sfz
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
<group>
|
||||
lovel=0
|
||||
hivel=127
|
||||
|
||||
<region>
|
||||
sample=*noise
|
||||
loop_mode=one_shot
|
||||
ampeg_attack=0.02
|
||||
ampeg_decay=0.02
|
||||
ampeg_release=0.1
|
||||
ampeg_sustain=0
|
||||
Loading…
Add table
Reference in a new issue