Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ft2-clone for openSUSE:Factory checked in at 2026-10-17 21:25:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ft2-clone (Old) and /work/SRC/openSUSE:Factory/.ft2-clone.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ft2-clone" Sat Oct 17 21:25:48 2026 rev:49 rq:1385269 version:2.26.1 Changes: -------- --- /work/SRC/openSUSE:Factory/ft2-clone/ft2-clone.changes 2026-10-02 23:09:48.459542313 +0200 +++ /work/SRC/openSUSE:Factory/.ft2-clone.new.3698736/ft2-clone.changes 2026-10-17 21:25:49.594941974 +0200 @@ -1,0 +2,6 @@ +Fri Oct 16 18:01:01 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 2.26.1 + * Fixed aliasing problem with sinc interpolation in v2.25. + +------------------------------------------------------------------- Old: ---- ft2-clone-2.25.tar.gz New: ---- ft2-clone-2.26.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ft2-clone.spec ++++++ --- /var/tmp/diff_new_pack.96XZxG/_old 2026-10-17 21:25:50.437977142 +0200 +++ /var/tmp/diff_new_pack.96XZxG/_new 2026-10-17 21:25:50.439977225 +0200 @@ -17,7 +17,7 @@ Name: ft2-clone -Version: 2.25 +Version: 2.26.1 Release: 0 Summary: Fasttracker II clone License: BSD-3-Clause AND CC-BY-NC-SA-4.0 ++++++ ft2-clone-2.25.tar.gz -> ft2-clone-2.26.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-2.25/src/ft2_about.c new/ft2-clone-2.26.1/src/ft2_about.c --- old/ft2-clone-2.25/src/ft2_about.c 2026-10-02 19:27:48.000000000 +0200 +++ new/ft2-clone-2.26.1/src/ft2_about.c 2026-10-15 18:20:11.000000000 +0200 @@ -11,7 +11,7 @@ #include "ft2_random.h" #define NUM_STARS 1500 -#define STARSHINE_ALPHA_PERCENTAGE 31 +#define STARSHINE_ALPHA_PERCENTAGE 33 #define ABOUT_SCREEN_X 3 #define ABOUT_SCREEN_Y 3 #define ABOUT_SCREEN_W 626 @@ -20,6 +20,7 @@ #define ABOUT_LOGO_H 78 #define BG_COLORKEY 0xFF000000 #define STAR_PIXEL_ID 0xFE000000 +#define STAR_Z_SPEED 3 typedef struct { @@ -103,7 +104,7 @@ clearPixel(x, y+1); } - star->z += 3; + star->z += STAR_Z_SPEED; if (star->z > 16384) star->z -= 32768; @@ -208,8 +209,6 @@ starRotation.y -= 0.0002f; starRotation.z += 0.0001f; rotateStarfieldMatrix(); - - showPushButton(PB_EXIT_ABOUT); // yes, we also have to redraw the exit button per frame :) } void showAboutScreen(void) // called once when about screen is opened diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-2.25/src/ft2_header.h new/ft2-clone-2.26.1/src/ft2_header.h --- old/ft2-clone-2.25/src/ft2_header.h 2026-10-02 19:27:48.000000000 +0200 +++ new/ft2-clone-2.26.1/src/ft2_header.h 2026-10-15 18:20:11.000000000 +0200 @@ -14,7 +14,7 @@ #endif #include "ft2_replayer.h" -#define PROG_VER_STR "2.25" +#define PROG_VER_STR "2.26" // do NOT change these! It will only mess things up... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-2.25/src/mixer/ft2_mix_macros.h new/ft2-clone-2.26.1/src/mixer/ft2_mix_macros.h --- old/ft2-clone-2.25/src/mixer/ft2_mix_macros.h 2026-10-02 19:27:48.000000000 +0200 +++ new/ft2-clone-2.26.1/src/mixer/ft2_mix_macros.h 2026-10-15 18:20:11.000000000 +0200 @@ -224,26 +224,26 @@ /* Uses linear interpolation between the phases in the kernels to achieve ** very good precision at a low pre-computed phase count. ** -** It may look like we go out of bounds for fSinc_2[] and s[], but we have +** It may look like we go out of bounds for fSinc[] and s[], but we have ** extra data at the correct places to account for this. */ #define WINDOWED_SINC8_INTERPOLATION(s, f, scale) \ { \ const uint32_t frac32 = (uint32_t)f; \ - const uint32_t lutPhase = frac32 >> INTRP_PHASE_SHIFT; \ - const float fIntrpFrac = (int32_t)(frac32 & INTRP_PHASE_MASK) * (1.0f / INTRP_PHASE_SCALE); \ + const uint32_t phaseInt = frac32 >> SINC_PHASE_SHIFT; \ + const float fPhaseFrac = (int32_t)(frac32 & SINC_PHASE_MASK) * (1.0f / SINC_PHASE_SCALE); \ \ - const float *fSinc_1 = v->fSincLUT + ( lutPhase << SINC8_TAPS_BITS); \ - const float *fSinc_2 = v->fSincLUT + ((lutPhase+1) << SINC8_TAPS_BITS); \ + const float *fSinc = v->fSincLUT + (phaseInt << SINC8_TAPS_BITS); \ \ float fSum = 0.0f; \ - for (int32_t j = 0; j < SINC8_TAPS; j++) \ + for (int32_t tap = 0; tap < SINC8_TAPS; tap++) \ { \ - const float y1 = fSinc_1[j]; \ - const float y2 = fSinc_2[j]; \ + const float fY1 = fSinc[tap]; \ + const float fY2 = fSinc[SINC8_TAPS+tap]; /* next phase */ \ \ - fSum += s[j-((SINC8_TAPS/2)-1)] * (y1 + ((y2 - y1) * fIntrpFrac)); \ + /* do linear interpolation between phases */ \ + fSum += s[tap-SINC8_CENTER_TAP] * (fY1 + ((fY2 - fY1) * fPhaseFrac)); \ } \ \ fSample = fSum * (1.0f / scale); \ @@ -279,19 +279,19 @@ #define WINDOWED_SINC16_INTERPOLATION(s, f, scale) \ { \ const uint32_t frac32 = (uint32_t)f; \ - const uint32_t lutPhase = frac32 >> INTRP_PHASE_SHIFT; \ - const float fIntrpFrac = (int32_t)(frac32 & INTRP_PHASE_MASK) * (1.0f / INTRP_PHASE_SCALE); \ + const uint32_t phaseInt = frac32 >> SINC_PHASE_SHIFT; \ + const float fPhaseFrac = (int32_t)(frac32 & SINC_PHASE_MASK) * (1.0f / SINC_PHASE_SCALE); \ \ - const float *fSinc_1 = v->fSincLUT + ( lutPhase << SINC16_TAPS_BITS); \ - const float *fSinc_2 = v->fSincLUT + ((lutPhase+1) << SINC16_TAPS_BITS); \ + const float *fSinc = v->fSincLUT + (phaseInt << SINC16_TAPS_BITS); \ \ float fSum = 0.0f; \ - for (int32_t j = 0; j < SINC16_TAPS; j++) \ + for (int32_t tap = 0; tap < SINC16_TAPS; tap++) \ { \ - const float y1 = fSinc_1[j]; \ - const float y2 = fSinc_2[j]; \ + const float fY1 = fSinc[tap]; \ + const float fY2 = fSinc[SINC16_TAPS+tap]; /* next phase */ \ \ - fSum += s[j-((SINC16_TAPS/2)-1)] * (y1 + ((y2 - y1) * fIntrpFrac)); \ + /* do linear interpolation between phases */ \ + fSum += s[tap-SINC16_CENTER_TAP] * (fY1 + ((fY2 - fY1) * fPhaseFrac)); \ } \ \ fSample = fSum * (1.0f / scale); \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-2.25/src/mixer/ft2_windowed_sinc.c new/ft2-clone-2.26.1/src/mixer/ft2_windowed_sinc.c --- old/ft2-clone-2.25/src/mixer/ft2_windowed_sinc.c 2026-10-02 19:27:48.000000000 +0200 +++ new/ft2-clone-2.26.1/src/mixer/ft2_windowed_sinc.c 2026-10-15 18:20:11.000000000 +0200 @@ -16,17 +16,17 @@ } sincKernel_t; // what sinc kernel to use based on resampling ratio -#define KERNEL1_RATIO_LIMIT 1.1875 /* if ratio < x, kernel[0] */ -#define KERNEL2_RATIO_LIMIT 1.5002 /* else if ratio < x, kernel[1] */ -#define KERNEL3_RATIO_LIMIT 2.1000 /* else if ratio < x, kernel[2], else kernel[3] */ +#define KERNEL1_RATIO_LIMIT 1.1875 /* if ratio <= x, kernel[0] */ +#define KERNEL2_RATIO_LIMIT 1.5000 /* else if ratio <= x, kernel[1] */ +#define KERNEL3_RATIO_LIMIT 2.0000 /* else if ratio <= x, kernel[2], else kernel[3] */ static sincKernel_t sincKernelConfig[SINC_KERNELS] = { // kaiser-beta cutoff - { 9.6568, 1.00 }, // kernel #1 - { 8.1933, 0.77 }, // kernel #2 - { 7.1939, 0.52 }, // kernel #3 - { 3.6517, 0.33 } // kernel #4 + { 10.1326, 1.0000 }, // kernel #1 + { 8.3378, 0.7639 }, // kernel #2 + { 7.1979, 0.5212 }, // kernel #3 + { 7.0000, 0.3333 } // kernel #4 }; static float *fSinc8[SINC_KERNELS], *fSinc16[SINC_KERNELS]; @@ -86,11 +86,11 @@ { float **fSincLUT = (config.interpolation == INTERPOLATION_SINC16) ? fSinc16 : fSinc8; - if (v->delta < (uint64_t)(KERNEL1_RATIO_LIMIT * MIXER_FRAC_SCALE)) + if (v->delta <= (uint64_t)(KERNEL1_RATIO_LIMIT * MIXER_FRAC_SCALE)) v->fSincLUT = fSincLUT[0]; - else if (v->delta < (uint64_t)(KERNEL2_RATIO_LIMIT * MIXER_FRAC_SCALE)) + else if (v->delta <= (uint64_t)(KERNEL2_RATIO_LIMIT * MIXER_FRAC_SCALE)) v->fSincLUT = fSincLUT[1]; - else if (v->delta < (uint64_t)(KERNEL3_RATIO_LIMIT * MIXER_FRAC_SCALE)) + else if (v->delta <= (uint64_t)(KERNEL3_RATIO_LIMIT * MIXER_FRAC_SCALE)) v->fSincLUT = fSincLUT[2]; else v->fSincLUT = fSincLUT[3]; @@ -108,7 +108,7 @@ s += ds; d += 2.0; } - while (ds > s*(1E-10)); + while (ds > s*(1E-11)); return s; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-2.25/src/mixer/ft2_windowed_sinc.h new/ft2-clone-2.26.1/src/mixer/ft2_windowed_sinc.h --- old/ft2-clone-2.25/src/mixer/ft2_windowed_sinc.h 2026-10-02 19:27:48.000000000 +0200 +++ new/ft2-clone-2.26.1/src/mixer/ft2_windowed_sinc.h 2026-10-15 18:20:11.000000000 +0200 @@ -5,25 +5,21 @@ #include "../ft2_audio.h" // voice_t #include "ft2_mix.h" // MIXER_FRAC_BITS -#define SINC_KERNELS 4 -#define SINC8_TAPS 8 -#define SINC16_TAPS 16 - // 256 phases + linear interpolation = near perfect (and low CPU cache usage) #define SINC_OVERSAMPLING 256 -// log2(SINC_OVERSAMPLING) -#define SINC_OVERSAMPLING_BITS 8 - -// log2(SINC8_TAPS) -#define SINC8_TAPS_BITS 3 - -// log2(SINC16_TAPS) -#define SINC16_TAPS_BITS 4 +#define SINC_KERNELS 4 +#define SINC_OVERSAMPLING_BITS 8 /* log2(SINC_OVERSAMPLING) */ +#define SINC8_TAPS 8 +#define SINC8_TAPS_BITS 3 /* log2(SINC8_TAPS) */ +#define SINC8_CENTER_TAP ((SINC8_TAPS/2)-1) +#define SINC16_TAPS 16 +#define SINC16_TAPS_BITS 4 /* log2(SINC16_TAPS) */ +#define SINC16_CENTER_TAP ((SINC16_TAPS/2)-1) -#define INTRP_PHASE_SHIFT (MIXER_FRAC_BITS-SINC_OVERSAMPLING_BITS) -#define INTRP_PHASE_SCALE (1L << INTRP_PHASE_SHIFT) -#define INTRP_PHASE_MASK (INTRP_PHASE_SCALE-1) +#define SINC_PHASE_SHIFT (MIXER_FRAC_BITS-SINC_OVERSAMPLING_BITS) +#define SINC_PHASE_SCALE (1L << SINC_PHASE_SHIFT) +#define SINC_PHASE_MASK (SINC_PHASE_SCALE-1) bool setupWindowedSincTables(void); void freeWindowedSincTables(void);
