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