[alsa-devel] Fundamental principle of audio mixing?
Can any body throw some lights on how audio mixing is done in software? Basic principle? Or Any link to web pages expianing this?
Thanks & Regards Nobin Mathew
On 9/24/07, Nobin Mathew nobin.mathew@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.
On Monday 24 September 2007 12:49, Claudio Matsuoka wrote:
On 9/24/07, Nobin Mathew nobin.mathew@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
Thanks a lot
Something like Z = A + B -A.B/normaliztion value
On 9/24/07, Alan Horstmann gineera@aspect135.co.uk wrote:
On Monday 24 September 2007 12:49, Claudio Matsuoka wrote:
On 9/24/07, Nobin Mathew nobin.mathew@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
participants (3)
-
Alan Horstmann
-
Claudio Matsuoka
-
Nobin Mathew