Ankündigung

Einklappen
Keine Ankündigung bisher.

8-Kanal Multiroom Audio Controller+Verstärker auf piCorePlayer Basis

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Multimedia] 8-Kanal Multiroom Audio Controller+Verstärker auf piCorePlayer Basis

    Der Wunsch nach einem günstigen, fernsteuerbaren Mulitroom Audio System hat mich dazu bewegt dieses Thema in Angriff zu nehmen. Herausgekommen ist dabei ein Prototyp, der vielleicht als Grundlage für ähnliche Projekte gut zu gebrauchen ist. Deshalb möchte ich euch das bisherige Ergebnis nicht vorenthalten.

    Grundsätzlich ähnelt der Ansatz den allseits bekannten Raspi + DAC + passende Software = Multiroom Client Konzept.
    Allerdings gab es einige Anforderungen die sich zu allen mir bisher bekannten Umsetzungen unterschieden:
    • zentraler Verstärker/Controller für den IT-Schrank
    • möglichst niedrige Stromaufnahme im Standby / Betrieb (>20W Standby = NoGo)
    • mindestens 4 unabhängig steuerbare Stereo-Ausgänge
    • über vorhandene Plugins/Logikmodule mit verschiedenen Systemen (HS/Wiregate/Edomi,...) nutzbar
    • bei Bedarf per Aktor abschaltbar (ohne negative Folgen für Software)
    • kompakt

    Herausgekommen ist dabei ein 1HE-Gerät mit Rapberry 1B (war vorhanden), 8 China-Endstufen-Modulen, Standard 19V-Notebook-Netzteil und der von anderen Projekten bereits bekannten 8-Kanal-Soundkarte Logilink 7.1. Die Unkosten betrugen in meinem Fall durch die vielen schon vorhandenen Teile < 50 €.
    Die Herausforderungen bei der Hardware waren:
    • Endstufenmodule mit Standby-Schaltung finden die bis ca. 24V Betriebsspannung und bis herab zu 4Ohm vertragen
    • Stromversorgung von Raspi und Verstärkerteil massetechnisch entkoppeln um Störungen zu vermeiden (hat viele Nerven gekostet)
    • passende Beschaltung finden um die Ausgänge galvanisch getrennt per Raspi schalten zu können

    Herausforderungen auf der Softwareseite:
    • piCorePlayer so modifizieren, dass 4 Stereo Outputs und 4 squeezelite-Instanzen mit der Logilink Soundkarte möglich sind (war ein Kampf)
    • alsamixer, asound.conf* und andere Dinge händisch anpassen und Änderungen dauerhaft speichern


    Das bisherige Ergebnis:
    image_55023.jpg

    Eckdaten:
    • piCorePlayer 3.02 als Softwaregrundlage, mit vier squeezelite-Instanzen, LMS läuft auf externem PC/NAS
    • 8x TPA3118D2 Endstufenmodule
    • 19V, 90W Notebook-Netzteil
    • 5V, 1A Schaltnetzteil für Raspi
    • Logilink 7.1 Soundkarte
    • 8x Optokoppler für GPIO Ausgänge zur Mute-Schaltung
    • Verbrauch im Standby (alle Kanäle inaktiv) ca. 5,5W
    • Verbrauch in Betrieb (alle Kanäle aktiv, geringe Lautstärke ca. 10W


    *die passende asound.conf für vier Stereo- bzw. 8 Monokanäle
    Code:
    #########################################################################
    ## CUSTOM ASOUND.CONF by mfd https://knx-user-forum.de/member/7968-mfd      
    #########################################################################
    ##   Channel splitting your UA0099 USB sound card to get up to four                              
    ##     independent stereo outputs (...and more )                                                                
    #########################################################################
    ##        stereofront        = the FRONT labeled green jack                                                  
    ##        stereosurround    = the SURROUND labeled black jack                                        
    ##        stereocenter    = the CENTER / BASS labeled yellow jack                                    
    ##         stereoback        = the BACK labeled black jack                                                    
    ##        stereoall        = all stereo outputs                                                                            
    ##                                                                                                                                        
    ##        for up to eight mono output channels use:                                                            
    ##                                                                                                                                        
    ##        monofrontl        = the FRONT labeled green jack - tip          
    ##        monofrontr        = the FRONT labeled green jack - ring          
    ##        monosurroundl    = the SUROUND labeled black jack - tip          
    ##        monosurroundr    = the SUROUND labeled black jack - ring        
    ##        monocenterl     = the CENTER / BASS labeled yellow jack    - tip
    ##        monocenterr     = the CENTER / BASS labeled yellow jack    - ring
    ##         monobackl        = the BACK labeled black jack - tip              
    ##         monobackr        = the BACK labeled black jack - ring          
    #########################################################################
    
    
    #########################################################################
    ## labels and colors could be different for differnt vendors or        
    ## versions of the device (Logilink, Sewell, Sweex, ...)              
    #########################################################################
    ##              put this file into your /ect/asound.conf                
    #########################################################################
    
    pcm.logilink {        # alias for our sound card
        type hw            # must be hw in our case
        card 1            # check your correct card number by typing
        device 0        # 'aplay -l' in your terminal
    }                    # the 1st usb card on the Raspi shows as
                        # card 1: Device [USB Sound Device], device 0: USB Audio [USB Audio]
    
    ctl.logilink {      
        type hw
        card 1
        device 0
    }
    
    pcm.dmixer {
        type dmix
        ipc_key 1024            # must be unique number on your system
        ipc_perm 0666            # neccesary for normal user to have access
        slave.pcm "logilink"
        slave {
            period_time 0
            period_size 1024
            buffer_size 4096    
            rate 44100            
            channels 8
        }
        bindings {
            0 0
            1 1
            2 2
            3 3
            4 4
            5 5
            6 6
            7 7
            }
    
    }    
    
    pcm.!default {
        type plug
        slave.pcm "dmixer"
    }
    
    pcm.stereofront {    
        type plug
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.0 1
        ttable.1.1 1
    }
    
    pcm.stereocenter {
        type plug
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.2 1
        ttable.1.3 1
    }
    
    pcm.stereoback {
        type plug
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.4 1
        ttable.1.5 1
    }
    
    pcm.stereosurround {
        type plug
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.6 1
        ttable.1.7 1
    }
    
    pcm.stereoall {
        type plug
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.0 1    # input left and right to all 4 l+r outputs
        ttable.1.1 1
        ttable.0.2 1
        ttable.1.3 1
        ttable.0.4 1
        ttable.1.5 1
        ttable.0.6 1
        ttable.1.7 1
    }
    pcm.monofrontl {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.0 1 # in-channel 0, out-channel 0, 100% volume
        ttable.1.0 1 # in-channel 1, out-channel 0, 100% volume
    }
    
    pcm.monofrontr {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.1 1
        ttable.1.1 1
    }
    
    pcm.monocenterl {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.2 1
        ttable.1.2 1
    }
    
    pcm.monocenterr {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.3 1
        ttable.1.3 1
    }
    
    
    pcm.monobackl {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.4 1
        ttable.1.4 1
    }
    
    pcm.monobackr {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.5 1
        ttable.1.5 1
    }
    
    pcm.monosurroundl {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.6 1
        ttable.1.6 1
    }
    
    pcm.monosurroundr {
        type route
        slave {
            pcm "dmixer"
            channels 8
        }
        ttable.0.7 1
        ttable.1.7 1
    }
    Die zusätzlich erstellten "Ausgänge" tauchen im System nirgends auf. Lediglich durch die Verknüpfung mit dem Befehl "-o" in den einzelnen Instanzen werden sie angesprochen (oder natürlich auch mit jedem anderen Player auf der Kommandozeile), also nicht davon verwirren lassen. Auch können die einzelnen Instanzen bis dato nicht separat über die pCP Konfigurationsoberfläche angesprochen werden, wohl aber über die Oberfläche des LMS.


    piCorePlayer 3.02 Einstellungen:
    weitere Instanzen von squeezelite können mit einem Befehl wie
    Code:
    /mnt/mmcblk0p2/tce/squeezelite-armv6hf -n "piCorePlayer2" -o stereosurround -a 80:::0: -m ab:cd:ef:12:34:02 -C 1 -G 8:L -z
    erstellt werden.

    ab piCorePlayer 3.11 hat sich offenbar die Syntax geändert:
    Code:
    /usr/local/bin/squeezelite -n "piCorePlayer2" -o stereosurround -a 80:::0: -m ab:cd:ef:12:34:02 -C 1 -G 8:L -z
    Wichtig dabei, für jede Instanz eine eindeutige (und frei gewählte!) MAC-Adresse und einen passenden Namen zu verwenden. GPIO Port auf eigene Bedürfnisse anpassen.
    Falls mehr zusätzliche Instanzen benötigt werden empfiehlt es sich die o.g. Befehle gleich direkt in der bootlocal.sh anzulegen und dort abzuspeichern.


    Das Schaltbild für die simple Mute-Schaltung per GPIO.
    Es ist so angedacht, dass die Endstufen gemutet sind sobald die 3,3V am Raspi anliegen, also sofort nachdem die Spannungsversorgung besteht und erst (per Low-Pegel an den Raspi Outputs) freigegeben werden, wenn ein Kanal aktiv ist. Das Schalten per High-Pegel würde zu unerwünschten Effekten beim Booten/Reboot des Raspi führen.

    amp_mute.png

    ggf. nützliche Komponenten für den Elektronikteil:
    • Siebelkos für Spannungsversorgung der Endstufenmodule
    • Lochstreifenplatine(n)
    • Buchsenleiste(n) um den Raspi zu kontaktieren
    • Bauteile für Optokopplerbeschaltung
    • Kabelmaterial mit entsprechenden Querschnitten



    Weitere Punkte

    Rauschen an Ausgängen minimieren - ab Werk kommen die Module mit 32dB Verstärkung
    Nachträglich die Lautstärkeeinstellung mit alsamixer anpassen und dauerhaft speichern:
    Code:
    alsamixer
    ruft die aktuelle Soundkarteneinstellung auf, mit F6 ist das richtige Audiogerät auswählbar und mit den Pfeiltasten die Lautstärke (in %) des jeweiligen Kanals zu justieren.
    Code:
    sudo alsactl store
    sudo filetool.sh -b
    zum Abspeichern der Einstellungen.
    In meinem Fall reicht je nach Raumsituation ein Wert zwischen 5 und 10%.

    Wärmeentwicklung bei Rackeinbau beobachten, bei mir bisher unkritisch

    Passende Beschaltung um Ausschaltplopp zu eliminieren, nur notwendig, wenn das Gerät z.B. bei Abwesenheit oder Nachts komplett vom Strom gekappt werden soll
    Es gibt auch andere Endstufenmodule, die direkt mit eingebauter Beschaltung gegen Ausschaltplopp geliefert werden, hier gibt es dann aber meist keinen nach außen geführten Mute-Anschluss.

    Ich habe es letztlich so gelöst, dass ich den Raspi über sein eigenes Netzteil versorge und auch (per Aktor) schalte, also unabhängig vom Endstufennetzteil.
    Als All in One Lösung würde ich derzeit einen simplen 2fach Schaltaktor mit in das Gehäuse verbauen, der nach Bedarf Raspi und Endstufen bzw. deren Netzteil separat schaltet. Das bringt viele zusätzliche Möglichkeiten (auch wenn der Raspi z.B. 24/7 durchlaufen soll und die Endstufen nicht). Auch eine Einschaltverzögerung der Endstufen, bis ein stabiler Zustand, d.h. pCP komplett hochgefahren, erreicht ist, ist damit kein Problem, eine zusätzliche Logikmaschine ist dafür hilfreich, ansonsten muss der Schaltaktor über entsprechende Zeitfunktionen an den Ausgängen verfügen.


    Selbstverständlich kann man das Ganze auch vollkommen anders und eleganter/besser lösen - deshalb alle Angaben ohne Gewähr.
    Wer wirklich Teile davon nachbauen möchte sollte möglichst wissen was er tut, und wie welche Teile entsprechend zu dimensionieren sind!
    Zuletzt geändert von mfd; 31.03.2017, 10:49.
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    #2

    Kommentar


      #3
      Schaut super aus und nach viel Arbeit :-)

      Die Tripath hatte ich auch schonmal im Auge...hört man nur Gutes. Was hast Du denn als Gehäuse genommen?
      Viele Grüße,
      Stefan

      >> Smelly One << (DIY-Raumklimaanzeige mit Luftqualitätsmessung und RTR-Funktionalität)

      Kommentar


        #4
        Als Gehäuse dient ein ausgeschlachtetes altes 1HE-Gerät. Da war vorher irgendwelche 90iger Jahre Videotechnik drin. Ordentliche Materialstärke - kein dünnes Blech. Bekommt man sicher auch in der Bucht ab und an sowas in der Art.
        Gruß -mfd-
        KNX-UF-IconSet since 2011

        Kommentar


          #5
          Wow, da muss unglaublich viel Arbeit drin stecken. Sieht klasse aus. Großer Respekt !
          Wie viele könntest du pro Woche fertigen wenn hier eine größere Sammelbestellung zusammen kommt ? :-)
          Vielleicht könnte der PI noch einen Temperatursensor im Gehäuse abfragen?
          Heimautomation Buch

          Kommentar


            #6
            Zitat von knxfindichgut Beitrag anzeigen
            Wie viele könntest du pro Woche fertigen wenn hier eine größere Sammelbestellung zusammen kommt ? :-)
            Ich bin nur für den Prototypen zuständig. Massenfertigung dürft gern ihr übernehmen

            Der PI könnte sicher noch allerhand zusätzliche sinnvolle Dinge übernehmen. Allerdings fehlt mir dazu im Moment etwas die Muße um in der Richtung noch mehr Funktionen einzubauen. Zumal das mit dem TinyCore Linux für Anfänger gar nicht so ohne ist Änderungen vorzunehmen. Dafür hat man den IMHO unschätzbaren Vorteil das System jederzeit komplett vom Strom "reißen" zu können...

            Wie anhand der asound.conf ersichtlich ist könnte man auch 8x Mono statt 4x Stereo oder eine Mischung daraus realisieren. Damit hat man schon mal eine gute Ausgangsbasis für's Eigenheim.
            Gruß -mfd-
            KNX-UF-IconSet since 2011

            Kommentar


              #7
              Gehen auch externe Quellen ?

              Kommentar


                #8
                Dann hätte das auch mit einem Zero funktioniert?
                VG
                Jürgen

                Kommentar


                  #9
                  wenn ich richtig verstehe, werden die Lautsprecher direkt angeschlossen (also ohne extra Verstärker).
                  Wie verlegt ihr die Kabel im Haus? wo werden die Lautsprecher "versteckt"?

                  Kommentar


                    #10
                    das Projekt finde ich genial - entspricht genau meinen Vorstellungen, übersteigt aber meine Fähigkeiten als Entwickler.
                    ... aber Nachbau traue ich mir zu.
                    Kannst Du noch die GPIO-Belegung / Verwendung der Optokoppler / Mute-Schaltung vorstellen?
                    Vielen Dank schon Mal.

                    Eugenius : Die Lautsprecher sind (bei mir) in die Decken eingebaut - also dort "versteckt". In Bädern, Fluren, Küche, Schlafzimmer etc. sollte nicht zusätzlich "rumstehen".

                    Gruß Marco

                    Kommentar


                      #11
                      Hi

                      Zitat von mfd Beitrag anzeigen
                      Der Wunsch nach einem günstigen, fernsteuerbaren Mulitroom Audio System hat mich dazu bewegt dieses Thema in Angriff zu nehmen. Herausgekommen ist dabei ein Prototyp, der vielleicht als Grundlage für ähnliche Projekte gut zu gebrauchen ist. Deshalb möchte ich euch das bisherige Ergebnis nicht vorenthalten.
                      Coole Sache, danke für's teilen!


                      Zitat von mfd Beitrag anzeigen
                      Eckdaten:
                      • piCorePlayer 3.02 als Softwaregrundlage, mit vier squeezelite-Instanzen, LMS läuft auf externem PC/NAS
                      • 8x TPA3118D2 Endstufenmodule
                      • 19V, 90W Notebook-Netzteil
                      • 5V, 1A Schaltnetzteil für Raspi
                      • Logilink 7.1 Soundkarte
                      • 8x Optokoppler für GPIO Ausgänge zur Mute-Schaltung
                      • Verbrauch im Standby (alle Kanäle inaktiv) ca. 5,5W
                      • Verbrauch in Betrieb (alle Kanäle aktiv, geringe Lautstärke ca. 10W
                      Feine Liste, da kann man ja gleich mal shoppen gehen...

                      Frage: Ich kann's nicht genau identifizieren, was ist das hier?

                      2016-12-01.png
                      Kind regards,
                      Yves

                      Kommentar


                        #12
                        Das ist ein Schaltregler-Mod für den Raspberry 1 B. Die neueren Versionen haben ohnehin schon Schaltregler für die 3,3V und 1,8(?)V onboard. Ist also bei neuen Raspi-Generationen überflüssig. Mit dem 1er spart man aber durch die Modifikation nochmal ca. 1 Watt am Raspi. Wie oben erwähnt lag der eh rum, also habe ich auch nicht extra einen neuen gekauft. Und von den kis3r33 Modulen waren auch noch welche "auf Lager" sind auch für andere Zwecke ganz brauchbar.

                        gerdj26 was meinst du mit externen Quellen? Grundsätzlich könnte man natürlich die Endstufen auch mit anderen Signalen füttern, aber ich hoffe doch sehr, dass ich über den Logitech Media Server so gut wie alles digitale auf die Ausgänge bekomme. Das ist ja einer der wesentlichen Punkte eines Multiroom Systems.
                        Soweit ich das nachgeforscht habe sollten sogar abgefahrene Dinge wie DVB-S2 Audio Streams oder DAB+ - entsprechende Hardware vorausgesetzt - mit dem LMS möglich sein. Alle "üblichen" Dinge wie Internet-Radio, Streaming-Dienste und die eigene Musiksammlung funktionieren ja ohnehin ootb.

                        Eugenius das ist der Sinn von dem Projekt, dass sowohl Controller - Schaltmatrix - wie auch immer man es nennen möchte, als auch die Endstufen in einer Einheit sind. Man muss nur noch Stromversorgung, Netzwerk und die Lautsprecher anschließen. Das setzt natürlich voraus, dass alle LS-Kabel aus den einzelnen Räumen im Technikschrank/-raum zusammenlaufen. Sofern das bei euch nicht der Fall ist, könnt ihr das ja noch nachziehen, deshalb verlegen wir ja alle so fleißig Leerrohre...

                        mars Für die Optokoppler-Sache habe ich zwar keinen Schaltplan gemacht, da es sich nur um eine sehr simple Konstruktion (x8) handelt, aber ich versuche das bei Gelegenheit mal nachzuliefern. Eine Skizze für einen Ausgang dürfte ja exemplarisch genügen.
                        Gruß -mfd-
                        KNX-UF-IconSet since 2011

                        Kommentar


                          #13
                          Cooles Projekt, Marco! Danke fürs Teilen.

                          Ist der parallele Betrieb von 4x squeezelite auf derm Raspi bereits erprobt, d.h. packt der Raspi das bezüglich Performance? Ich hatte immer den EIndruck, dass die Squeeze-Implementierungen nicht gerade ressourcensparend sind.

                          Kommentar


                            #14
                            Servus Marco,
                            wäre es denkbar, daß Du ein Image vom Raspi ( Tiny Core Linux / piCorePlayer ) teilen würdest.

                            Danke, JG
                            Gruß, JG

                            Kommentar


                              #15
                              Hi
                              den picoreplayer kannst du dir einfach runterladen....
                              VG juergen

                              Kommentar

                              Lädt...
                              X