Raspberry Pi, Kodi und Tonausgabe in Mono über HDMI

In Kodi kann man alle möglichen Lautsprecherkombinationen einstellen. Nur Mono, also „1.0“, fehlt.
Falls unbedingt mal jemand (wie ich) Mono-Sound über HDMI haben will, so funktioniert’s:

  1. /etc/asound.conf anlegen:
    pcm.mono {
        type route
        slave {
            pcm "hw:CARD=ALSA,DEV=0"
            channels 2
        }
        ttable {
               0.1 0.75
               1.1 0.75
               0.0 0.75
               1.0 0.75
        }
    }
    pcm.!default {
        type plug
        slave.pcm "mono"
    }
    ctl.!default {
        type hw card 0
    }
    
  2. In Kodi als Audio-Ausgabegerät „ALSA Default bcm2835“ auswählen.
  3. Außerdem in Kodi die Anzahl der Audiokanäle auf „2.0“ stellen.

Die Downmix-Magie steckt in der „ttable“: Ein Stereo-Signal hat zwei Kanäle: Links und Rechts, bzw. 0 und 1.
Die erste Zeile „0.1 0.75“ heißt, dass Eingangskanal 0 zu Ausgangskanal 1 geroutet wird („0.1“), und zwar mit 75% („0.75“) Lautstärke. Je 50% wäre zwar logischer, mir kam es dann aber zu leise vor.

Das Ganze wird für jeden Ein- und Ausgangskanal gemacht. Am Ende liegt das zu Mono heruntergemische Stereosignal an beiden Ausgangskanälen an: Aus dem linken Lautsprecher kommt das gleiche wie aus dem rechten.

Das „hw:CARD=ALSA,DEV=0“ ist das Alsa-Soundgerät. Sollte es mit diesem Soundgerät nicht funktionieren: Mit aplay -L kann man sich alle verfügbaren Soundgeräte anzeigen lassen. Viele davon sind zur internen Verwendung, andere geben Ton auf dem falschen Ausgang aus. Bei Problemen einfach mit aplay -D<Soundgerät> <WAV-Datei> die Einzelnen nacheinander durchprobieren und testen, ob Ton oder eine Fehlermeldung kommt. Beispiel:aplay -Dhw:CARD=ALSA,DEV=0 /usr/share/sounds/alsa/Front_Left.wav

Update:

Wer statt eines Raspberry Pi einen Vero4k+ einsetzt kann diese asound.conf nutzen:

pcm.mono {
type route
slave {
pcm "plughw:CARD=AMLM8AUDIO,DEV=1"
channels 2
}
ttable {
0.0 0.75
0.1 0.75
1.0 0.75
1.1 0.75
}
}
pcm.!default {
type plug
slave.pcm "mono"
}
ctl.!default {
type hw card 0
}