ALSA mixer - How to control the magnitude of cross-talk or routing between audio channels?


While listening to the playback ouptut of speaker test command on full volume

speaker-test --device hw:0,0 --rate 48000 --channels 2 --format S16_LE --test wav

I noticed that when test audio is being played in left channel, some magnitude of
it (~10%) is also audible on right channel and vice versa. This does not happen on
desktop computer(Ubuntu 16.04 LTS).

After some basic searching, I came across this concept of asoundrc to control
various alsa parameters and created file ~/.asoundrc

pcm.!default {
    type plug
    slave.pcm {
        type asym
        playback.pcm {
            type route
            slave.pcm "hw:0"
            ttable.0.0 1
            ttable.0.1 0
            ttable.1.0 0
            ttable.1.1 1
        capture.pcm "hw:0"

with this configuration file I can control the magnitude of cross-talk from
left to right channel and vice versa, all works fine as long as magnitude is
greater than zero. But if I want to completely stop cross-talk between channels
then it’s not happening with zero magnitude between left and right channels. I still
hear around 10% audio.

Am I missing something. Is this the right way to control cross-talk between stereo channels?



If I understand your post correctly you do not want any cross talk between the channels.

As far as I know there is nothing on the digital side which would add cross talk on purpose. Of course you could use the alsa ttable to introduce this, but without such modification I expect no cross talk happens on the digital side.

I assume what you hear is the cross talk introduced by the current on the common ground return path for both left and right signals.

Possibly the audio codec adds internal cross talk which I expect to be neglect-able.


Hello Max,

Yes, I do not want any cross talk between audio channels because in our application we use external speakers connected to headphone output and when these channels are heard separately cross talk is clearly audible which is not normal for a PCB design.

After reading SGTL5000 codec datasheet, it appears that there might be settings affecting cross-talk at codec level. But which are those I am not sure?



AFAIK there are no controls in the SGTL5000 which would cross feed a part of the signals from L->R, R->L. There are controls for various IO to swap the channels however.

So I guess you’re cross talk is caused by the voltage drop on the common ground return path.

In my measurements with a 1 meter headphone cord and 47Ohm load resistance I see a signal on the ‘silent’ channel of about 5% of the ‘non silent’ channel. With 47kOhm load resistance the ‘silent’ channel is silent.