[alsa-devel] Play multiple sounds concurrently
clemens at ladisch.de
Fri Dec 18 15:02:51 CET 2009
Markus Luttenberger wrote:
> I want to play multiple sounds concurrently with ALSA. The audio data is
> mono and G.711 a-law encoded. I can successfully play a single source of
> audio data but the sound is distorted when I try to play two sources.
> wr_buf[count] = (char) (0.5 * buf1[count]) +
> (char) (0.5 * buf2[count]);
A-law is a somewhat logarithmic encoding; simply adding two values with
linear scale factors will not work.
If both your source data and the output device use A-law, you have to
decode the samples to linear PCM, add them, and encode them back. See
for the algorithm that alsa-lib uses; you would use something like
buf = s16_to_alaw((alaw_to_s16(buf1) + alaw_to_s16(buf2)) / 2);
If it is possible for your output device to use a linear PCM format,
you might want to use that to avoid the additional encoding step.
More information about the Alsa-devel