Update fluidsynth_fx example to explain effects mixing

This commit is contained in:
derselbst 2020-02-16 10:03:45 +01:00
parent 871e409572
commit 98d395bab0

View file

@ -44,21 +44,36 @@ int fx_function(void *data, int len,
{ {
struct fx_data_t *fx_data = (struct fx_data_t *) data; struct fx_data_t *fx_data = (struct fx_data_t *) data;
int i, k; int i, k;
float *out_i;
/* Call the synthesizer to fill the output buffers with its if(fx == 0)
* audio output. */
if(fluid_synth_process(fx_data->synth, len, nfx, fx, nout, out) != FLUID_OK)
{ {
/* Some error occurred. Very unlikely to happen, though. */ /* Note that some audio drivers may not provide buffers for effects like
return FLUID_FAILED; * reverb and chorus. In this case it's your decision what to do. If you
* had called fluid_synth_process() like in the else branch below, no
* effects would have been rendered. Instead, you may mix the effects
* directly into the out buffers. */
if(fluid_synth_process(fx_data->synth, len, nout, out, nout, out) != FLUID_OK)
{
/* Some error occurred. Very unlikely to happen, though. */
return FLUID_FAILED;
}
}
else
{
/* Call the synthesizer to fill the output buffers with its
* audio output. */
if(fluid_synth_process(fx_data->synth, len, nfx, fx, nout, out) != FLUID_OK)
{
/* Some error occurred. Very unlikely to happen, though. */
return FLUID_FAILED;
}
} }
/* Apply your effects here. In this example, the gain is /* Apply your effects here. In this example, the gain is
* applied to all the output buffers. */ * applied to all the output buffers. */
for(i = 0; i < nout; i++) for(i = 0; i < nout; i++)
{ {
out_i = out[i]; float *out_i = out[i];
for(k = 0; k < len; k++) for(k = 0; k < len; k++)
{ {
@ -66,6 +81,16 @@ int fx_function(void *data, int len,
} }
} }
for(i = 0; i < nfx; i++)
{
float *fx_i = fx[i];
for(k = 0; k < len; k++)
{
fx_i[k] *= fx_data->gain;
}
}
return FLUID_OK; return FLUID_OK;
} }