Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chorus: avoid overwriting input buffer when storing samples in the de…
…lay line. In `fluid_rvoice_mixer.c`:`fluid_rvoice_mixer_process_fx()`: If an audio processing callback is used, `mix_fx_to_out` would be `FALSE`. As a result, `in_ch` and `out_ch_l` points to the same buffer. In `fluid_chorus.c`:`fluid_chorus_processreplace()`: ```C /* process stereo unit */ /* store the chorus stereo unit d_out to left and right output */ left_out[sample_index] = d_out[0] * chorus->wet1 + d_out[1] * chorus->wet2; right_out[sample_index] = d_out[1] * chorus->wet1 + d_out[0] * chorus->wet2; /* Write the current input sample into the circular buffer */ push_in_delay_line(chorus, in[sample_index]); ``` Here the chorus processing code writes to the left output buffer (which will overwrite the input buffer in this case) before the sample from the input buffer is stored into the delay buffer, making the chorus output all zeros. If no audio processing callback is used, `mix_fx_to_out` would be `TRUE` and `in` and `left_out` will not point to the same buffer, therefore the order doesn't matter. Simply swapping the two steps should be a sufficient fix. This patch also apply the same change to `fluid_chorus_processmix` only for the sake of consistency (since they are almost exact copies of each other). Resolves FluidSynth#751.
- Loading branch information