diff options
| author | XANTRONIX Development | 2022-01-31 23:33:12 -0500 | 
|---|---|---|
| committer | XANTRONIX Development | 2022-01-31 23:33:12 -0500 | 
| commit | 617cac672b997ffde087caafbbbf54f7a6c46714 (patch) | |
| tree | df6b83cc5ba48acede8e4b9ecabe1e397ecf8bbf /src | |
| parent | 918a7f459a2bebb178efa269afaab43fadb6fdb6 (diff) | |
| download | xas-617cac672b997ffde087caafbbbf54f7a6c46714.tar.gz xas-617cac672b997ffde087caafbbbf54f7a6c46714.tar.bz2 xas-617cac672b997ffde087caafbbbf54f7a6c46714.zip | |
Ensure gain is factored into mixer input sources
Diffstat (limited to 'src')
| -rw-r--r-- | src/mixer.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/src/mixer.c b/src/mixer.c index 001c765..0f3b5b1 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -10,50 +10,54 @@  static void mixer_apply_mono_to_mono(int16_t *dest,                                       int16_t *src,                                       size_t count, +                                     float gain,                                       float bias_l,                                       float bias_r) {      size_t i;      for (i=0; i<count; i++) { -        dest[i] += src[i]; +        dest[i] += gain * src[i];      }  }  static void mixer_apply_mono_to_stereo(int16_t *dest,                                         int16_t *src,                                         size_t count, +                                       float gain,                                         float bias_l,                                         float bias_r) {      size_t i;      for (i=0; i<count; i++) { -        dest[i*2]   += bias_l * src[i]; -        dest[i*2+1] += bias_r * src[i]; +        dest[i*2]   += gain * bias_l * src[i]; +        dest[i*2+1] += gain * bias_r * src[i];      }  }  static void mixer_apply_stereo_to_stereo(int16_t *dest,                                           int16_t *src,                                           size_t count, +                                         float gain,                                           float bias_l,                                           float bias_r) {      size_t i;      for (i=0; i<count; i++) { -        dest[i*2]   += bias_l * src[i*2]; -        dest[i*2+1] += bias_r * src[i*2+1]; +        dest[i*2]   += gain * bias_l * src[i*2]; +        dest[i*2+1] += gain * bias_r * src[i*2+1];      }  }  static void mixer_apply_stereo_to_mono(int16_t *dest,                                         int16_t *src,                                         size_t count, +                                       float gain,                                         float bias_l,                                         float bias_r) {      size_t i;      for (i=0; i<count; i++) { -        dest[i] += (src[i*2] + src[i*2+1]) / 2; +        dest[i] += gain * ((src[i*2] + src[i*2+1]) / 2);      }  } @@ -74,6 +78,7 @@ static ssize_t mixer_fill(xas_mixer *mixer,                              int16_t *,                              size_t,                              float, +                            float,                              float);          xas_mixer_input *next = input->next; @@ -102,6 +107,7 @@ static ssize_t mixer_fill(xas_mixer *mixer,          mixer_apply((int16_t *)(mixer->buf),                      buf,                      readlen, +                    input->gain,                      input->bias_l,                      input->bias_r); | 
 
    