Raspbian Whezzy Sound

  • Hallo zusammen, ich besitze ein Radio Modul das den Sound über i2s an den pi sendet,
    nun würde ich diesen gerne mit hilfe von alsamixer bei meiner USB Soundkarte ausgeben.
    Was muss ich dazu einstellen?
    USB Soundkarte wird erkann aber wie leite ich die Musik auf die USB soundkarte um?

    Gruss schnibli

    Ready when you are :bravo2:

  • Ich habe das dab modul von Björn mit i2s aktiv.
    Nur das Problem ist seit ich den ganzen raspberry pi neu aufgesetzt habe geht es gar nicht vorher konnte ich mit

    Code
    alsaloop -C hw:1,0

    das signal empfangen und über den analog ausgang vom pi leiten.
    Was ich jetzt seit der neuinstallation habe ist auch eine usb soundkarte die erkannt wird (kodi kan medien darüber abspielen) nur bei:
    alsaloop -C hw:1,0
    kommt folgender fehler:

    Code
    pi@CarPi ~/dabpi_ctl $ alsaloop -C hw:1,0
    $capture hw:1,0 open error: No such file or directory
    Loopback initialization failure.

    Ready when you are :bravo2:

  • Ok, bis jetzt sind da also zwei Soundkarten, eine USB-Soundkarte (C-Media USB Headphone Set) und der Onboardsound des Raspberry mit analogem und HDMI-Ausgang, der aber über keinen Eingang verfügt, daher das "$capture hw:1,0 open error: No such file or directory" . Ich kenne mich mit dem Radiomodul ja nicht aus, aber ich vermute dir fehlt dafür noch etwas, zB ein zum installierten Kernel passendes Kernelmodul.

    Wenn du nicht weiter weißt poste vielleicht einfach, was bei diesen Befehlen herauskommt, damit wir sehen welche Module geladen wurden und was alles an Audiohardware erkannt wurde:

    Code
    # lsmod | grep snd
    $ dmesg | grep snd


    und auch eine Liste der Audioaufnahmegeräte

    Code
    $ arecord -l


    denn soweit ich gesehen habe, sollte das Radiomodul als solches auftauchen.


    dieser link hier soll nur eine kleine Notiz für mich selbst sein, damit ich weiß worum es geht, wenn ich wieder in den Thread schaue :) (du wirst es ja bereits kennen)

    Einmal editiert, zuletzt von smutbert (6. Januar 2016 um 19:56)

  • Ja ich bin schon so lange bei leider weiss ich nicht weiter :(

    Code
    dmesg | grep snd
    [    3.459162] usbcore: registered new interface driver snd-usb-audio
    [    6.145497] snd-dabpi snd-dabpi.0: si468x-hifi <-> bcm2708-i2s.0 mapping ok
    Code
    arecord -l
    **** Liste der Hardware-Geräte (CAPTURE) ****
    Karte 0: Set [C-Media USB Headphone Set], Gerät 0: USB Audio [USB Audio]
      Sub-Geräte: 1/1
      Sub-Gerät #0: subdevice #0
    Karte 2: sndrpidabpi [snd_rpi_dabpi], Gerät 0: DABPi Hifi si468x-hifi-0 []
      Sub-Geräte: 1/1
      Sub-Gerät #0: subdevice #0

    Ready when you are :bravo2:

  • Na bitte, da haben wir es doch! :)

    Das Problem ist, dass in der Anleitung, die du befolgt hast, das "Radioaufnahmegerät" über die Nummerierung in Alsa angesprochen wird. Die ändert sich aber je nach den verbauten Soundkarten, bei dir ist sie dank USB-Soundkarte eine Nummer nach hinten gerutscht. Ich würde also stattdessen empfehlen die Soundkarten an ihrem Namen anzusprechen, der sich nicht ändern sollte, also statt »hw:1,0« einfach »hw: sndrpidabpi,0«¹ schreiben (",0" kannst du in dem Fall je nach Lust und Laune auch weglassen, diese "Soundkarte" verfügt aber ohnehin nur über ein Gerät).
    Willst du dann noch festlegen an welcher Soundkarte du den Ton ausgeben willst, ist auch das kein Problem, die Liste der Audioausgabegeräte hast du ja bereits im vorigen Post gepostet (die Ausgabe von »aplay -l«). Der Name der Soundkarte ist immer das was vor den eckigen Klammern steht, beim Onboardsound also zB das "ALSA" vor dem [bcm2835 ALSA]. Als Beispiel also noch die Ausgabe über die USB-Soundkarte

    Code
    $ alsaloop -C hw:sndrpidabpi -P plughw:Set


    wenn die abzuspielenden Audioformate (Samplerate, Sampletiefe, Zahl der Kanäle) von der Soundkarte direkt unterstützt werden, dann kannst du das "plughw" auch durch "hw" ersetzen.

    ¹ Das Blank vor zwischen : und sndrpidabpi ist kein Tippfehler sondern das habe ich nur gemacht, damit die Forensoftware da keinen Smiley daraus macht. Das Leerzeichen gehört da also in Wirklichkeit nicht hin!

    Einmal editiert, zuletzt von smutbert (6. Januar 2016 um 20:16)

  • wow vielen dank für die gute erklärung.
    Nun kann ich das so einstellen, dass dies immer mit:

    Code
    alsaloop -C hw:sndrpidabpi -P plughw:Set

    ausgeführt wird?
    also ohne das ich über ssh immer diesen befehl eingeben muss um etwas zu hören?

    Ready when you are :bravo2:

  • Selbstverständlich geht das. Du könntest diesen Befehl zum Beispiel in die /etc/rc.local hineinschreiben, du darfst mit dem Befehl die Ausführung von rc.local aber nicht blockieren. Das könntest du ungefähr so erreichen (zur Orientierung habe ich auch noch ein bißchen "drumherum" der rc.local gepostet, bei dir könnte es auch ein bisschen anders aussehen - entscheidend ist der Befehl vor dem »exit 0«, mit dem die rc.local immer endet bzw. enden sollte):

    Code
    […]
    # By default this script does nothing.
    
    
    alsaloop -C hw:sndrpidabpi -P plughw:Set &
    exit 0


    oder vielleicht etwas besser

    Code
    […]
    # By default this script does nothing.
    
    
    alsaloop -C hw:sndrpidabpi -P plughw:Set -d
    exit 0

    Du blockierst damit allerdings, wie dir vielleicht schon aufgefallen ist, die USB-Soundkarte. Wenn du die auch gelegentlich noch für andere Dinge nutzen willst ohne vorher alsaloop killen zu müssen, müsstest du noch ein bisschen etwas anpassen.
    Wie oder was genau du dafür am geschicktesten machst hängt u.a. davon ob wie/wofür du den Raspberry sonst noch verwendest und ob du pulseaudio installiert hast.

    Einmal editiert, zuletzt von smutbert (6. Januar 2016 um 21:42)

  • Ich nehme jetzt mal schwer an dass es so nicht Funktionieren wird, da ich die USB Soundkarte auch mit kodi verwenden möchte (movie/Musik) Wiedergabe.
    Da ich den Pi leider nicht zur hand habe und nur ssh verwenden kann (und eine Webcam die mir sagt ob Sound kommt) kann ich das nicht wirklich testen.

    Ich werde mich morgen früh mal darum kümmern was genau geschiet.
    Pulseaudio ist auch installiert

    Ready when you are :bravo2:

  • Dann vermute ich dass kodi unter einem eigenen Benutzeraccount laufen und unter diesem pulseaudio starten wird. In dem Fall wäre es eine Möglichkeit alsaloop ebenfalls unter diesem Benutzeraccount zu starten, denn es darf immer nur der Benutzer auf die Pulseaudio-Instanz zugreifen, der er gestartet hat und nicht auf die der anderen und es können auch nicht mehrere Pulseaudio-Instanzen gleichzeitig Audio ausgeben.
    Die Alternativen wären die Wiedergabe über die Netzwerkschnittstelle von Pulseaudio, die aber meiner Erfahrung nach nicht besonders zuverlässig funktioniert und eine systemweite Pulseaudio-Instanz. Letzteres verwende ich und würde es dir auch empfehlen, allerdings raten die Pulseaudio-Entwickler eigentlich davon ab.

    Um dein systemweites Pulseaudio zu aktivieren müsstest du

    • in der »/etc/default/pulseaudio« die Variable PULSEAUDIO_SYSTEM_START auf 1 setzen
    • in der »/etc/pulse/daemon.conf« den Punkt system-instance auf yes setzen. Die Zeile sollte bereits mit no vorhanden sein, du musst sie aber nicht nur auf yes setzen sondern wahrscheinlich auch das Kommentarzeichen »;« entfernen.


    Das einzige was sich ab dem nächsten Systemstart geändert haben sollte ist, dass Pulseaudio nicht unter jedem verwendeten Benutzeraccount getrennt gestartet sondern nur einmal systemweit gestartet wird und damit Pulseaudio für jeden Benutzer, der Mitglied in den Gruppen "pulse" und "pulse-access". Das heißt du wirst die Benutzer, die du verwenden willst diesen Gruppen hinzufügen, für den Benutzer pi zB mit

    Code
    # adduser pi pulse
    # adduser pi pulse-access

    Danach sollte der Radioton (hoffentlich) mit

    Code
    $ alsaloop -C hw:sndrpidabpi -P pulse -d


    laufen. Derselbe Befehl sollte dann auch in der rc.local funktionieren.

    Einmal editiert, zuletzt von smutbert (6. Januar 2016 um 23:23)

  • Vielen Dank,
    Kann es kaum erwarten dies Morgen auszuprobieren, ich werde berichten ob es funktioniert hat oder nicht :) ....
    Auf jedenfalls jetzt schon einen herzlichen dank an dich!

    Ready when you are :bravo2:

  • So nun zu dem versprochenen ergebniss:

    Pulseaudio war noch nicht installiert! Dies habe ich natürlich nachgeholt.
    Anschliessend habe ich den user Pi der Benutzergruppe ect. hinzugefügt.

    Nun ist es so das ich den Sound von kodi "Musik" und "Video"höre. Jedoch kein Sound vom DAB Modul erhalte.

    die rc.local habe ich auch mit

    Code
    alsaloop -C hw:sndrpidabpi -P pulse -d

    angepasst

    :s

    Ready when you are :bravo2:

  • Wenn du gleich gesagt hattest, dass Pulseaudio nicht installiert ist, hätte ich eine andere Lösung vorgeschlagen - ohne Pulseaudio geht es nämlich genauso oder sogar minimal einfacher ;) (ich bemühe mich aber pulseaudio niemandem ein- oder auszureden)

    Nimm das aus der rc.local jedenfalls vorläufig wieder heraus (einfach ein # voranstellen, dann ist es auskommentiert). solange es nicht manuell funktioniert und erzähl was passiert, wenn du das möglicherweise bereits laufende alsaloop abbrichst und auf der Kommandozeile ein neues startest und die Ausgabe des letzten Befehls ist auch interessant:

    Code
    # killall alsaloop
    $ alsaloop -C hw:sndrpidabpi -P pulse
    $ ps aux | grep pulseaudio
  • ohh beide Varianten währen gut dann weiss ich etwas mehr :)

    Also mit

    Code
    alsaloop -C hw:sndrpidabpi -P pulse

    erhalte ich tatsächlich Sound (alsamixer war noch auf 0% Volume)
    Jedoch mit :

    Code
    alsaloop -C hw:sndrpidabpi -P pulse -d

    höre ich nichts.

    Code
    ^Cpi@CarPi ~ $ ps aux | grep pulseaudio
    pulse     2103  1.7  1.0 113964  7740 ?        S<l  14:55   0:01 /usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading=1 --daemonize --log-target=syslog --high-priority
    pi        2465  0.0  0.3  87252  2380 ?        S    14:56   0:00 /usr/bin/pulseaudio --start
    pi        2578  0.0  0.2   4152  1840 pts/0    S+   14:57   0:00 grep --color=auto pulseaudio

    Wenn ich von hand

    Code
    alsaloop -C hw:sndrpidabpi -P pulse -d

    aufsühre erhalte ich sound

    Kann as an meiner Startup Datei liegen:

    Code
    # Set sound output to Analog
    amixer cset numid=3 1
    
    
    # Set the system volume to 100%
    amixer cset numid=1 100%

    Ready when you are :bravo2:

    Einmal editiert, zuletzt von schnibli (7. Januar 2016 um 15:02)

  • Pulseaudio steht auch über Alsa zur Verfügung und zwar, wenn man so will in Form einer Art virtuellen Soundkarte. Das heißt deine amixer Befehle dürften zwar nicht die Ursache dafür sein, dass es nicht funktioniert, aber der erste amixer-Befehl bringt nun wohl auch nichts mehr. Welchen Schalter oder Regler sollte denn der erste amixer-Befehl überhaupt einstellen?
    Der zweite funktioniert vielleicht nach wie vor, aber beide amixer-Befehle wären der Form auch ohne Pulseaudio ähnlich ungünstig wie der alsaloop-Befehl zu Beginn - du verlässst dich dabei auf die Nummern der Soundkarten in Alsa. Die Wiedergabelautstärke könntest du mit Pulseaudio mit

    Code
    $ amixer -D pulse sset Master 100%


    setzen.

    Funktioniert es denn mit

    Code
    alsaloop -C hw:sndrpidabpi -P pulse &


    in der rc.local?

  • Ich habe eine Startup Datei in dieser kommt das vor.

    Wenn ich den befehl:

    Code
    alsaloop -C hw:sndrpidabpi -P pulse &

    manuell eingebe Funktioniert es, wenn ich ihn jedoch in die rc.local setze nicht :s

    Nun habe ich es noch einmal versucht, (erster versuch war gester) jetzt Funktioniert der Sound :) nur leider Funktioniert die Audio Wiedergabe von Kodi (Musik & Video) nicht mehr :s

    so wies aussieht scheint sich kodi und das dabpi modul gegenseitig zu blockieren :s

    Ready when you are :bravo2:

    Einmal editiert, zuletzt von schnibli (8. Januar 2016 um 07:06)

  • Ich kenne kodi nicht gut, aber eigentlich sollte von dieser Seite nicht viel schief gehen:


    Quelle

    Ich habe etwas mehr zitiert, weil ich noch erähnen wollte, dass Passthrough, das man in kodi vermutlich aktivieren kann, ganz unabhängig davon ob man Pulseaudio verwendet oder nicht, nicht funktioniert, wenn gleichzeitig mit einer anderen Anwendung Audio ausgegeben werden soll. Bei analoger Ausgabe ist Passthrough aber ohnehin sinnlos, wenn man es überhaupt aktivieren kann.


    Taucht kodi in der Liste der Pulseaudio-Clients auf »pactl list short clients«?
    Wenn kodi seinen eigenen Benutzeraccount hat, hast du auch daran gedacht diesen Benutzer (kodi?) den Gruppen pulse und pulse-access hinzuzufügen?

    Was ist denn das für eine Startup-Datei? (Wo liegt sie und wie heißt sie?)

  • Ich arbeite an Raspicarpc.com mit dem DAB Modul
    Nur leider Funktioniert die Umschaltung mit Pulsuadio nicht und
    ich kann immer nur entweder Musik oder DAB hören, möchte ich wechseln muss ich den RPI rebooten....

    Ready when you are :bravo2:

  • Hm, weiß nicht ob ich alles aus dem Thread richtig in Erinnerung habe, habe es jetzt nur noch einmal überflogen, aber der alsaloop-Befehl mit pulse als Ausgabe »alsaloop -C hw:sndrpidabpi -P pulse« funktioniert?

    Dann stellt sich die nächste Frage wie und womit hörst du denn Musik?

    Einmal editiert, zuletzt von smutbert (23. Januar 2016 um 16:39)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!