From 7fa3431dca962dd2ac9c628e69908b42705497e6 Mon Sep 17 00:00:00 2001 From: DeeJayLSP Date: Fri, 1 Mar 2024 20:06:48 -0300 Subject: [PATCH] WAV importer: use cubic interpolation on resampler --- editor/import/resource_importer_wav.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index c97b6a757930..ab14a5f01dde 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -328,7 +328,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s int ipos = 0; for (int i = 0; i < new_data_frames; i++) { - //simple cubic interpolation should be enough. + // Cubic interpolation should be enough. float mu = frac; @@ -337,15 +337,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s float y2 = data[MIN(frames - 1, ipos + 1) * format_channels + c]; float y3 = data[MIN(frames - 1, ipos + 2) * format_channels + c]; - float mu2 = mu * mu; - float a0 = y3 - y2 - y0 + y1; - float a1 = y0 - y1 - a0; - float a2 = y2 - y0; - float a3 = y1; - - float res = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3); - - new_data.write[i * format_channels + c] = res; + new_data.write[i * format_channels + c] = Math::cubic_interpolate(y1, y2, y0, y3, mu); // update position and always keep fractional part within ]0...1] // in order to avoid 32bit floating point precision errors