shithub: ft²

Download patch

ref: 20a65c451d956ca5dd104cdc4d183593056a3d40
parent: 5e0c4f5e1b8a37c61ec75438ce719f0a25ab84fb
author: Olav Sørensen <olav.sorensen@live.no>
date: Sat Aug 31 11:56:07 EDT 2024

Optimized the sample editor "volume change" function

--- a/src/ft2_sample_ed_features.c
+++ b/src/ft2_sample_ed_features.c
@@ -1199,9 +1199,9 @@
 	if (len <= 0)
 		goto applyVolumeExit;
 
-	bool mustInterpolate = (dVol_StartVol != dVol_EndVol);
-	const double dVol = dVol_StartVol / 100.0;
-	const double dPosMul = ((dVol_EndVol / 100.0) - dVol) / len;
+	const bool mustInterpolate = (dVol_StartVol != dVol_EndVol);
+	const double dVolDelta = ((dVol_EndVol - dVol_StartVol) / 100.0) / len;
+	double dVol = dVol_StartVol / 100.0;
 
 	pauseAudio();
 	unfixSample(s);
@@ -1212,23 +1212,18 @@
 		{
 			for (int32_t i = 0; i < len; i++)
 			{
-				double dSmp = (int32_t)ptr16[i] * (dVol + (i * dPosMul)); // linear interpolation
-				DROUND(dSmp);
-
-				int32_t smp32 = (int32_t)dSmp;
+				int32_t smp32 = (int32_t)((int32_t)ptr16[i] * dVol);
 				CLAMP16(smp32);
 				ptr16[i] = (int16_t)smp32;
-			}
 
+				dVol += dVolDelta;
+			}
 		}
 		else // no interpolation needed
 		{
 			for (int32_t i = 0; i < len; i++)
 			{
-				double dSmp = (int32_t)ptr16[i] * dVol;
-				DROUND(dSmp);
-
-				int32_t smp32 = (int32_t)dSmp;
+				int32_t smp32 = (int32_t)((int32_t)ptr16[i] * dVol);
 				CLAMP16(smp32);
 				ptr16[i] = (int16_t)smp32;
 			}
@@ -1241,12 +1236,11 @@
 		{
 			for (int32_t i = 0; i < len; i++)
 			{
-				double dSmp = (int32_t)ptr8[i] * (dVol + (i * dPosMul)); // linear interpolation
-				DROUND(dSmp);
-
-				int32_t smp32 = (int32_t)dSmp;
+				int32_t smp32 = (int32_t)((int32_t)ptr8[i] * dVol);
 				CLAMP8(smp32);
 				ptr8[i] = (int8_t)smp32;
+
+				dVol += dVolDelta;
 			}
 		}
 		else // no interpolation needed
@@ -1253,10 +1247,7 @@
 		{
 			for (int32_t i = 0; i < len; i++)
 			{
-				double dSmp = (int32_t)ptr8[i] * dVol;
-				DROUND(dSmp);
-
-				int32_t smp32 = (int32_t)dSmp;
+				int32_t smp32 = (int32_t)((int32_t)ptr8[i] * dVol);
 				CLAMP8(smp32);
 				ptr8[i] = (int8_t)smp32;
 			}
--