From 898781484dad574c10c9355b7098462020e36f29 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Thu, 19 Mar 2015 21:03:40 +0200 Subject: [PATCH] SFXR: Avoid NaNs by making envelope length minimum 1 sample (this time in the stable-1.1 branch) --- plugins/sfxr/sfxr.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/sfxr/sfxr.cpp b/plugins/sfxr/sfxr.cpp index 7c2f35bdb..4ac7a9e88 100644 --- a/plugins/sfxr/sfxr.cpp +++ b/plugins/sfxr/sfxr.cpp @@ -133,10 +133,18 @@ void SfxrSynth::resetSample( bool restart ) env_vol=0.0f; env_stage=0; env_time=0; + env_length[0]=(int)(s->m_attModel.value()*s->m_attModel.value()*100000.0f); env_length[1]=(int)(s->m_holdModel.value()*s->m_holdModel.value()*100000.0f); env_length[2]=(int)(s->m_decModel.value()*s->m_decModel.value()*100000.0f); + // These will be used as divisors later, let's avoid division by 0 + for(int i = 0; i < 3; ++i) + { + env_length[i] = (env_length[i] == 0) ? 1 : env_length[i]; + } + + fphase=pow(s->m_phaserOffsetModel.value(), 2.0f)*1020.0f; if(s->m_phaserOffsetModel.value()<0.0f) fphase=-fphase; fdphase=pow(s->m_phaserSweepModel.value(), 2.0f)*1.0f;