1 #include "input/common.h"
2 #include <math.h>
3 
4 #include <string.h>
5 
reset_output_buffers(struct audio_data * data)6 void reset_output_buffers(struct audio_data *data) {
7     memset(data->in_bass_r, 0, sizeof(double) * data->FFTbassbufferSize);
8     memset(data->in_bass_l, 0, sizeof(double) * data->FFTbassbufferSize);
9     memset(data->in_mid_r, 0, sizeof(double) * data->FFTmidbufferSize);
10     memset(data->in_mid_l, 0, sizeof(double) * data->FFTmidbufferSize);
11     memset(data->in_treble_r, 0, sizeof(double) * data->FFTtreblebufferSize);
12     memset(data->in_treble_l, 0, sizeof(double) * data->FFTtreblebufferSize);
13     memset(data->in_bass_r_raw, 0, sizeof(double) * data->FFTbassbufferSize);
14     memset(data->in_bass_l_raw, 0, sizeof(double) * data->FFTbassbufferSize);
15     memset(data->in_mid_r_raw, 0, sizeof(double) * data->FFTmidbufferSize);
16     memset(data->in_mid_l_raw, 0, sizeof(double) * data->FFTmidbufferSize);
17     memset(data->in_treble_r_raw, 0, sizeof(double) * data->FFTtreblebufferSize);
18     memset(data->in_treble_l_raw, 0, sizeof(double) * data->FFTtreblebufferSize);
19 }
20 
write_to_fftw_input_buffers(int16_t frames,int16_t buf[frames * 2],void * data)21 int write_to_fftw_input_buffers(int16_t frames, int16_t buf[frames * 2], void *data) {
22     if (frames == 0)
23         return 0;
24     struct audio_data *audio = (struct audio_data *)data;
25 
26     for (uint16_t n = audio->FFTbassbufferSize; n > frames; n = n - frames) {
27         for (uint16_t i = 1; i <= frames; i++) {
28             audio->in_bass_l_raw[n - i] = audio->in_bass_l_raw[n - i - frames];
29             if (audio->channels == 2)
30                 audio->in_bass_r_raw[n - i] = audio->in_bass_r_raw[n - i - frames];
31         }
32     }
33     for (uint16_t n = audio->FFTmidbufferSize; n > frames; n = n - frames) {
34         for (uint16_t i = 1; i <= frames; i++) {
35             audio->in_mid_l_raw[n - i] = audio->in_mid_l_raw[n - i - frames];
36             if (audio->channels == 2)
37                 audio->in_mid_r_raw[n - i] = audio->in_mid_r_raw[n - i - frames];
38         }
39     }
40     for (uint16_t n = audio->FFTtreblebufferSize; n > frames; n = n - frames) {
41         for (uint16_t i = 1; i <= frames; i++) {
42             audio->in_treble_l_raw[n - i] = audio->in_treble_l_raw[n - i - frames];
43             if (audio->channels == 2)
44                 audio->in_treble_r_raw[n - i] = audio->in_treble_r_raw[n - i - frames];
45         }
46     }
47     uint16_t n = frames - 1;
48     for (uint16_t i = 0; i < frames; i++) {
49         if (audio->channels == 1) {
50             if (audio->average) {
51                 audio->in_bass_l_raw[n] = (buf[i * 2] + buf[i * 2 + 1]) / 2;
52             }
53             if (audio->left) {
54                 audio->in_bass_l_raw[n] = buf[i * 2];
55             }
56             if (audio->right) {
57                 audio->in_bass_l_raw[n] = buf[i * 2 + 1];
58             }
59         }
60         // stereo storing channels in buffer
61         if (audio->channels == 2) {
62             audio->in_bass_l_raw[n] = buf[i * 2];
63             audio->in_bass_r_raw[n] = buf[i * 2 + 1];
64 
65             audio->in_mid_r_raw[n] = audio->in_bass_r_raw[n];
66             audio->in_treble_r_raw[n] = audio->in_bass_r_raw[n];
67         }
68 
69         audio->in_mid_l_raw[n] = audio->in_bass_l_raw[n];
70         audio->in_treble_l_raw[n] = audio->in_bass_l_raw[n];
71         n--;
72     }
73 
74     // Hann Window
75     for (int i = 0; i < audio->FFTbassbufferSize; i++) {
76         audio->in_bass_l[i] = audio->bass_multiplier[i] * audio->in_bass_l_raw[i];
77         if (audio->channels == 2)
78             audio->in_bass_r[i] = audio->bass_multiplier[i] * audio->in_bass_r_raw[i];
79     }
80     for (int i = 0; i < audio->FFTmidbufferSize; i++) {
81         audio->in_mid_l[i] = audio->mid_multiplier[i] * audio->in_mid_l_raw[i];
82         if (audio->channels == 2)
83             audio->in_mid_r[i] = audio->mid_multiplier[i] * audio->in_mid_r_raw[i];
84     }
85     for (int i = 0; i < audio->FFTtreblebufferSize; i++) {
86         audio->in_treble_l[i] = audio->treble_multiplier[i] * audio->in_treble_l_raw[i];
87         if (audio->channels == 2)
88             audio->in_treble_r[i] = audio->treble_multiplier[i] * audio->in_treble_r_raw[i];
89     }
90     return 0;
91 }
92