From cfb47d8b06da17ce2348f6db7a09deb58c453095 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Mon, 18 Aug 2025 15:01:17 +0400 Subject: [PATCH] fix (possible) zero division error and resample hang when resampleTarget<1 --- src/gui/sampleEdit.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 53bae8071..d582feabe 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -1110,19 +1110,20 @@ void FurnaceGUI::drawSampleEdit() { } if (ImGui::BeginPopupContextItem("SResampleOpt",ImGuiPopupFlags_MouseButtonLeft)) { if (ImGui::InputDouble("Rate##SRRate",&resampleTarget,1.0,50.0,"%g")) { - if (resampleTarget<0) resampleTarget=0; + if (resampleTarget<1) resampleTarget=1; if (resampleTarget>96000) resampleTarget=96000; } double factor=resampleTarget/(double)targetRate; unsigned int targetLength=sample->samples*factor; if (ImGui::InputScalar("Length##SRLen",ImGuiDataType_U32,&targetLength, &_ONE, &_SIXTEEN)) { - resampleTarget=targetRate/((double)sample->samples/targetLength); - if (resampleTarget<0) resampleTarget=0; + if (targetLength<1) targetLength=1; + resampleTarget=targetRate*targetLength/(double)sample->samples; + if (resampleTarget<1) resampleTarget=1; if (resampleTarget>96000) resampleTarget=96000; } if (ImGui::InputDouble(_("Factor"),&factor,0.125,0.5,"%g")) { resampleTarget=(double)targetRate*factor; - if (resampleTarget<0) resampleTarget=0; + if (resampleTarget<1) resampleTarget=1; if (resampleTarget>96000) resampleTarget=96000; } if (ImGui::Button("0.5x")) {