Moin,
Ziel war ein Multiroom Audio System für ein neues Haus mit Zentralen Verstärkern und Lautsprecherkabeln in jeden Raum.
Hauptanforderung war, dass mehrere Quellen sich unabhängig in einzelne Räume schalten lassen können.
Fertige Multiroomsysteme kamen erst mal nicht in Frage um das knappe Baubuget nicht noch mehr zu belasten. Also habe ich rein auf das gesetzt was ich schon habe.
- IPS Server in Windows VM
- Linux VDR Server auf Debian Basis (selbst gebaut, keine fertige Distri)
- Terratec Aureon 5.1 USB Soundkarte
- Stereo Verstärker und Aktivboxen
Hauptproblem war, wie bekommt man die 5.1 Kanäle der Aureon in einzelne Stereo Pärchen, bzw. sogar Mono Kanäle die sich einzeln ansteuern lassen?
Unter Linux lies sich das relativ einfach mit Pulseaudio lösen. Hiermit konnte ich die Kanäle zu virtuellen Soundkarten aufdröseln und einzeln ansteuern.
Zum testen in der Mietswohnung habe ich die Front Buchse zum Wohnzimmer gemacht, die Küche ist an der Rear Buchse und das Bad an der Center/Sub.
Kurz zu den Begrifflichkeiten:
Pulseaudio = PA
Sink = Ziel, (virtuelle) Soundkarte
Zuerst habe ich in der PA Konfiguration diese beiden Parameter gesetzt, damit er nicht selbstständig rum mischt:
enable-remixing = no;
enable-lfe-remixing = no;
über das pavucontrol habe ich im Configuration Reiter die Profile alle auf Off gesetzt. Damit verschwinden sämtliche Karten aus den möglichen Ausgängen.
Danach wird die USB Karte hinzugefügt:
pacmd load-module module-alsa-sink sink_name=multiroom_card sink_properties='device.description="Multiroom Card"' device=hw:3 channels=6 channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe
Damit nachher die Umschaltung nahtlos klappt, erzeuge ich für jede Audioquelle virtuelle Karten für die einzelnen Räume:
pacmd load-module module-remap-sink sink_name=s1_Wohnzimmer master=multiroom_card channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right sink_properties='device.description="S1 Wohnzimmer"'
pacmd load-module module-remap-sink sink_name=s1_Kueche master=multiroom_card channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right sink_properties='device.description="S1 Kueche"'
pacmd load-module module-remap-sink sink_name=s1_Bad master=multiroom_card channels=2 master_channel_map=front-center,lfe channel_map=front-left,front-right sink_properties='device.description="S1 Bad"'
pacmd load-module module-remap-sink sink_name=s2_Wohnzimmer master=multiroom_card channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right sink_properties='device.description="S2 Wohnzimmer"'
pacmd load-module module-remap-sink sink_name=s2_Kueche master=multiroom_card channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right sink_properties='device.description="S2 Kueche"'
pacmd load-module module-remap-sink sink_name=s2_Bad master=multiroom_card channels=2 master_channel_map=front-center,lfe channel_map=front-left,front-right sink_properties='device.description="S2 Bad"'
S1 und S2 steht für Source, also die Quelle. Ja, momentan erscheint das noch unsinnig alles doppelt zu machen.
Die einzelnen virtuellen Karten werden jetzt jedenfalls wieder zusammengefasst:
pacmd load-module module-combine sink_name=S1 slaves=s1_Wohnzimmer,s1_Kueche,s1_Bad adjust_time=0
pacmd load-module module-combine sink_name=S2 slaves=s2_Wohnzimmer,s2_Kueche,s2_Bad adjust_time=0
Damit bekommt man wieder zwei virtuelle Karten auf die dann die einzelnen Zuspieler-Programme zugreifen.
In meinem einfachen Fall erst mal zwei mplayer die Webradio abspielen:
mplayer -ao pulse::S1 -cache 256 icyx://stream1.url
mplayer -ao pulse::S2 -cache 256 icyx://stream2.url
Im pavucontrol sieht das dann so aus:
Oben ist die Master Soundkarte. Man könnte hier global die Lautstärke regeln, z.B. wenn es an der Haustür klingelt.
Darunter sind die einzelnen Räume für Stream 1 und die Karte die die Räume zusammenfasst.
Hier das gleiche für Stream 2.
Die mplayer wie sie mit den kombinierten Karten verbunden sind.
Derzeit spielen beide MPlayer gnadenlos parallel in allen Räumen ab. Die einzelnen virtuellen Karten werden nun auf Mute gestellt und dann einzeln wieder eingeschaltet und deren Lautstärke angepasst. Um also Stream 1 im Wohnzimmer und in der Küche zu hören, wird s1_wohnzimmer und s1_kueche nicht mehr stumm geschaltet. Im Bad könnte Stream 2 laufen und dort wird dann s2_bad eingeschaltet.
Hier kommt jetzt IPS ins Spiel. Für Windows gibt es pulseaudio Binarys. Damit kann übers Netzwerk pulseaudio gesteuert werden.
Damit das klappt muss noch der Zugriff übers Netz freigegeben werden.
pacmd load-module module-native-protocol-tcp auth-ip-acl="127.0.0.1;192.168.11.62/32" auth-anonymous=1
192.168.11.62 ist dabei mein IPS Server.
Für jeden Raum gibt es dann 2 Variablen. Lautstärke und Quelle. Beides Integer. Lautstärke als Intensity.100 und Quelle als eigenes Profil.
Quelle hat als Eigene Aktion nun dieses Script hinterlegt:
SetValue($IPS_VARIABLE , $IPS_VALUE);
switch($IPS_VALUE) {
case 0:
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-mute "s1_Kueche" 0');
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-mute "s2_Kueche" 1');
break;
case 1:
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-mute "s1_Kueche" 1');
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-mute "s2_Kueche" 0');
break;
}
Damit sendet IPS die Mute/Unmute Befehle für die virtuellen Karten.
Hinter der Lautstärke Variable liegt als Script:
SetValue($IPS_VARIABLE , $IPS_VALUE);
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-volume "s1_Kueche" ' . $IPS_VALUE * 655);
system('C:\pulseaudio\bin\pactl.exe -s vdrhd set-sink-volume "s2_Kueche" ' . $IPS_VALUE * 655);
Um die gewünschte Lautstärke an die virtuelle Karte zu senden.
Im Webfront sieht es dann so aus:
Im Haus wird es dann erweitert auf die möglichen Zuspieler, wie z.B. Music Player Daemon (mpd), Line-In für CD/DVD Player, usw.
Das was noch fehlt und noch geplant ist, ist wenn ein Stream gar nicht gehört wird, dieser auch nicht gestartet ist. Ich möchte nicht rund um die Uhr mehrere Webstreams laufen haben und damit Bandbreite verschwenden.
Viel Spaß beim nachbauen der möglicherweise billigsten Multiroom-Audio Anlage.
Gruß
Andreas