Dear SOX developers,
Thank you very much for your excellent program. It is really cool and helps a lot in my project!
I'm trying to use noisered filter for two channels input audio with odd number of samples. I'm getting the error like this sox FAIL noisered: multi-channel effect drained asymmetrically!
As I think the problem is here
./src/noisered.c
...
static int sox_noisered_drain(sox_effect_t * effp, sox_sample_t *obuf, size_t *osamp)
{
priv_t * data = (priv_t *)effp->priv;
unsigned i;
unsigned tracks = effp->in_signal.channels;
for (i = 0; i < tracks; i ++)
*osamp = process_window(effp, data, i, tracks, obuf, (unsigned) data->bufdata); // <-- STORE LAST TRACK SAMPLE SIZE!!!!!!!
/* FIXME: This is very picky. osamp needs to be big enough to get all
* remaining data or it will be discarded.
*/
return (SOX_EOF);
}
...
I can suggest a possible solution, but I'm not sure is it enough or not (I don't familiar with your code).
./src/noisered.c
...
static int sox_noisered_drain(sox_effect_t * effp, sox_sample_t *obuf, size_t *osamp)
{
priv_t * data = (priv_t *)effp->priv;
unsigned i;
unsigned tracks = effp->in_signal.channels;
*osamp = 0;
for (i = 0; i < tracks; i ++)
*osamp += process_window(effp, data, i, tracks, obuf, (unsigned) data->bufdata); // <-- SUM ALL TRACKS SAMPLES
/* FIXME: This is very picky. osamp needs to be big enough to get all
* remaining data or it will be discarded.
*/
return (SOX_EOF);
}
...
Sincerely yours,
Kirill.
Confirmed. The suggested fix seems correct.
https://codeberg.org/sox_ng/sox_ng/issues/548