[alsa-devel] Fundamental principle of audio mixing?
Alan Horstmann
gineera at aspect135.co.uk
Mon Sep 24 14:27:28 CEST 2007
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