From 898781484dad574c10c9355b7098462020e36f29 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Thu, 19 Mar 2015 21:03:40 +0200 Subject: [PATCH 1/2] 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; From 0462be7afc6e0028ff94b753706d1a0c568c72cc Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Sat, 21 Mar 2015 12:05:06 +0200 Subject: [PATCH 2/2] SFXR: Removed conditional, moved ensuring env_length!=0 to initial calculation --- plugins/sfxr/sfxr.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/plugins/sfxr/sfxr.cpp b/plugins/sfxr/sfxr.cpp index 4ac7a9e88..1d15c1c88 100644 --- a/plugins/sfxr/sfxr.cpp +++ b/plugins/sfxr/sfxr.cpp @@ -134,16 +134,9 @@ void SfxrSynth::resetSample( bool restart ) 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]; - } - + env_length[0]=(int)(s->m_attModel.value()*s->m_attModel.value()*99999.0f)+1; + env_length[1]=(int)(s->m_holdModel.value()*s->m_holdModel.value()*99999.0f)+1; + env_length[2]=(int)(s->m_decModel.value()*s->m_decModel.value()*99999.0f)+1; fphase=pow(s->m_phaserOffsetModel.value(), 2.0f)*1020.0f; if(s->m_phaserOffsetModel.value()<0.0f) fphase=-fphase;