diff options
Diffstat (limited to 'timestretch.c')
-rw-r--r-- | timestretch.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/timestretch.c b/timestretch.c index 7f9bcd6..8baa7c8 100644 --- a/timestretch.c +++ b/timestretch.c | |||
@@ -44,6 +44,9 @@ static size_t calc_convert_values( int sample_rate, float tempo ) { | |||
44 | 44 | ||
45 | free( g_overlap_heuristic ); | 45 | free( g_overlap_heuristic ); |
46 | g_overlap_heuristic = malloc( sizeof(short) * g_corr_length ); | 46 | g_overlap_heuristic = malloc( sizeof(short) * g_corr_length ); |
47 | |||
48 | // boost middle of sequence by top of a flat parabola | ||
49 | // slope stolen from soundtouch, precalc table | ||
47 | for( i = 0; i < g_corr_length; ++i ) | 50 | for( i = 0; i < g_corr_length; ++i ) |
48 | g_overlap_heuristic[i] = (short)16384.0*(-(double)i*(double)i/((double)g_corr_length*(double)g_corr_length)+(double)i/(double)g_corr_length+0.75f); | 51 | g_overlap_heuristic[i] = (short)16384.0*(-(double)i*(double)i/((double)g_corr_length*(double)g_corr_length)+(double)i/(double)g_corr_length+0.75f); |
49 | 52 | ||
@@ -67,17 +70,13 @@ we found an offset of 5 msec | |||
67 | 70 | ||
68 | static unsigned int find_corr_max(const short *input, const short *mixbuf) { | 71 | static unsigned int find_corr_max(const short *input, const short *mixbuf) { |
69 | unsigned int i, j, offs = 0; | 72 | unsigned int i, j, offs = 0; |
70 | double corr_max = FLT_MIN; | 73 | int64_t acc, corr_max = 0; |
71 | 74 | ||
72 | // Scans for the best correlation value by testing each possible position | 75 | // Scans for the best correlation value by testing each possible position |
73 | for (i = 0; i < g_corr_length; ++i) { | 76 | for (i = 0; i < g_corr_length; ++i) { |
74 | int64_t acc = 0; | 77 | for(j = 0, acc = 0; j < g_overlap; ++j ) |
75 | |||
76 | for(j = 0; j < g_overlap; ++j ) | ||
77 | acc += input[i+j] * mixbuf[j]; | 78 | acc += input[i+j] * mixbuf[j]; |
78 | 79 | ||
79 | // boost middle of sequence by top of a flat parabola | ||
80 | // slope stolen from soundtouch | ||
81 | acc *= g_overlap_heuristic[i]; | 80 | acc *= g_overlap_heuristic[i]; |
82 | if ( corr_max < acc ) { | 81 | if ( corr_max < acc ) { |
83 | offs = i; | 82 | offs = i; |
@@ -85,7 +84,7 @@ static unsigned int find_corr_max(const short *input, const short *mixbuf) { | |||
85 | } | 84 | } |
86 | } | 85 | } |
87 | 86 | ||
88 | printf( "%03d %016llX\n", offs, (int64_t)corr_max ); | 87 | printf( "%03d %016llX\n", offs, corr_max ); |
89 | return offs; | 88 | return offs; |
90 | } | 89 | } |
91 | 90 | ||