[alsa-devel] Fundamental principle of audio mixing?

Nobin Mathew nobin.mathew at gmail.com
Mon Sep 24 15:41:14 CEST 2007


Thanks a lot

Something like Z = A + B -A.B/normaliztion value



On 9/24/07, Alan Horstmann <gineera at aspect135.co.uk> wrote:
> On Monday 24 September 2007 12:49, Claudio Matsuoka wrote:
> > On 9/24/07, Nobin Mathew <nobin.mathew at gmail.com> wrote:
> > > Can any body throw some lights on how audio mixing is done in
> > > software? Basic principle?
> >
> > Basically you add the PCM samples (if they are at the same resolution
> > and sampling rate) and renormalize if needed. The sampling rate
> > conversion can be tricky tho.
>
> I was about to say the same; multiply each sample by the applicable gain and
> add - as in this extract from Audacity/src/AudioIO.cpp:
>
> {
>
>     if (vt->GetChannel() == Track::LeftChannel ||
>         vt->GetChannel() == Track::MonoChannel)
>     {
>       float gain = vt->GetChannelGain(0);
>
>       if (gAudioIO->mEmulateMixerOutputVol)
>                   gain *= gAudioIO->mMixerOutputVol;
>
>        for(i=0; i<len; i++)
>           outputFloats[numPlaybackChannels*i] += gain*tempFloats[i];
>     }
>
>     if (vt->GetChannel() == Track::RightChannel ||
>         vt->GetChannel() == Track::MonoChannel)
>     {
>        float gain = vt->GetChannelGain(1);
>
>        if (gAudioIO->mEmulateMixerOutputVol)
>           gain *= gAudioIO->mMixerOutputVol;
>
>        for(i=0; i<len; i++)
>           outputFloats[numPlaybackChannels*i+1] += gain*tempFloats[i];
>     }
> }
>
> I guess implementing it is always more complicated, though!
>
> Alan
>


More information about the Alsa-devel mailing list