Showing the changes to src/spectrogram.c (1 of 1 file). Show all
Unified · Split
| @@ -71,7 +71,7 @@ typedef struct { · 70 unmodified lines | ||
| 71 | 71 | int dft_size, step_size, block_steps, block_num, rows, cols, read; |
| 72 | 72 | int x_size, end, end_min, last_end; |
| 73 | 73 | sox_bool truncated; |
| 74 | − double buf[MAX_FFT_SIZE], dft_buf[MAX_FFT_SIZE], window[MAX_FFT_SIZE]; | |
| 74 | + double buf[MAX_FFT_SIZE], dft_buf[MAX_FFT_SIZE], window[MAX_FFT_SIZE+1]; | |
| 75 | 75 | double block_norm, max, magnitudes[(MAX_FFT_SIZE>>1) + 1]; |
| 76 | 76 | float * dBfs; |
| 77 | 77 | } priv_t; |
| @@ -170,7 +170,7 @@ static int getopts(sox_effect_t * effp, int argc, char **argv) · 92 unmodified lines | ||
| 170 | 170 | static double make_window(priv_t * p, int end) |
| 171 | 171 | { |
| 172 | 172 | double sum = 0, * w = end < 0? p->window : p->window + end; |
| 173 | − int i, n = p->dft_size - abs(end); | |
| 173 | + int i, n = 1 + p->dft_size - abs(end); | |
| 174 | 174 | |
| 175 | 175 | if (end) memset(p->window, 0, sizeof(p->window)); |
| 176 | 176 | for (i = 0; i < n; ++i) w[i] = 1; |
| @@ -185,7 +185,7 @@ static double make_window(priv_t * p, int end) · 8 unmodified lines | ||
| 185 | 185 | (p->dB_range + p->gain) * (1.005 + p->window_adjust / 50) + 6); |
| 186 | 186 | } |
| 187 | 187 | for (i = 0; i < p->dft_size; ++i) sum += p->window[i]; |
| 188 | − for (i = 0; i < p->dft_size; ++i) p->window[i] *= 2 / sum | |
| 188 | + for (--n, i = 0; i < p->dft_size; ++i) p->window[i] *= 2 / sum | |
| 189 | 189 | * sqr((double)n / p->dft_size); /* empirical small window adjustment */ |
| 190 | 190 | return sum; |
| 191 | 191 | } |