Richten Sie Raspberry Pi 3 als Bluetooth-Lautsprecher ein

36

Ich suche nach einer Möglichkeit, den Raspberry Pi 3 mit Raspbian Jessie als Bluetooth-Lautsprecher zu konfigurieren. Was ich als Bluetooth-Lautsprecher bezeichne, ist, dass es verwendet wird, um Audio-Streams über Bluetooth mit A2DP zu empfangen und über Lautsprecher wiederzugeben, die über die Audio-Buchse, den HDMI-Anschluss oder den USB-Audio-Adapter an den Raspberry Pi angeschlossen sind.

Verschiedene Tutorials sind online verfügbar, aber ziemlich veraltet und die meisten funktionieren nicht mehr.

gtatr
quelle
Es ist unklar, was Sie mit "als Bluetooth-Lautsprecher" meinen
Milliways
1
Bearbeitet Die Hoffnung ist jetzt klar
Dienstag,
Mir ist vollkommen klar, dass ich daran interessiert bin, echte Antworten zu lesen.
Burt_Harris
Die gewählte Lösung ist ein ähnlicher Weg, den ich eingeschlagen habe. Ich habe jedoch ein Github-Repo, das dies für Sie bei einer Neuinstallation von Raspbian Jessie Lite einrichtet (unsicher, ob es ohne eine kleine Konfiguration für Jessie mit Pixel funktioniert). Befolgen Sie einfach die Installationsanweisungen hier: github.com/bareinhard/… . Das Hauptproblem, das ich bei vorhandenen Lösungen sehe, ist, dass sie standardmäßig pulseaudio5 verwenden. Dadurch wird pa6 kompiliert und viele Wiedergabefehler, die bei pa5 auftreten, werden beseitigt.
Brett Reinhard

Antworten:

25

Ich war nach einiger Zeit an diesem Projekt beteiligt (um meinem Freund zu helfen, seinen Abschluss zu machen) und finde, dass das Online-Projekt in Ordnung ist (obwohl die Pi-Verarbeitung des Audios dem Pi ziemlich nacheilt und der Spannungsabfall es als einzige Möglichkeit zum Einfrieren bringt Zum Neustart muss das Netzkabel abgezogen werden.

Dies ist der Schritt, an dem ich gearbeitet habe und der auf Himbeer-Pi 3 funktioniert.

1. Laden Sie das gewünschte Paket herunter

Dieses Projekt hängt von pulseaudio ab. Ergreifen Sie es und installieren Sie es, indem Sie Folgendes eingeben:

sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev

Ich aktualisiere lieber zuerst die Firmware von Himbeere, bevor ich sie installiere, weil ich ein Problem mit dem rpi-bluetoothPaket habe.

sudo rpi-update

und machen Sie es zu installieren und fahren Sie mit dem nächsten Schritt fort.

2. Bearbeiten Sie die Konfiguration und wenden Sie sie an

Fügen Sie zunächst mit pi username der Gruppe pulseaudio hinzu

sudo usermod -a -G lp pi

Erstellen Sie eine neue Konfiguration unter /etc/bluetooth/audio.conf mit dem Texteditor und fügen Sie die folgende Zeile hinzu

[General]:
Enable=Source,Sink,Media,Socket

Bearbeiten Sie die Datei /etc/bluetooth/main.confmit Ihrem bevorzugten Texteditor (ich verwende Nano).

Bluetooth-Klasse einstellen, Ändern Sie die folgende Zeile auf:

 Class = 0x00041C

0x000041C bedeutet, dass das RPI Bluetooth A2DP-Protokoll unterstützt.

change /etc/pulse/daemon.conf add / modify (vergessen Sie nicht, den Code gründlich zu überprüfen, bevor Sie ihn hinzufügen) und change

resample-method = trivial

Sie können mit jeder Methode, die Sie mögen, ich persönlich speex-float-3als Referenz verwenden, können Sie diesen Link sehen

starte pulseaudio mit:

pulseaudio -D

Wir werden Ragusa87-Skript verwenden, um die Bluetooth-Quelle zur Audio-Senke zu automatisieren. Fügen Sie zuerst eine neue Konfiguration zu udev init.d hinzu, indem Sie die Datei bearbeiten /etc/udev/rules.d/99-input.rulesund diese der Datei hinzufügen

SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"

Ordner hinzufügen udev, /usr/libindem Sie mkdir verwenden

sudo mkdir /usr/lib/udev && cd /usr/lib/udev

und füge dies der Datei bluetooth hinzu (credits ragusa87)

#!/bin/bash
# This script is called by udev when you link a bluetooth device with your computer
# It's called to add or remove the device from pulseaudio
#
#

# Output to this file
LOGFILE="/var/log/bluetooth_dev"

# Name of the local sink in this computer
# You can get it by calling : pactl list short sinks
# AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"
AUDIOSINK="alsa_output.0.analog-stereo.monitor"
# User used to execute pulseaudio, an active session must be open to avoid errors
USER="pi"

# Audio Output for raspberry-pi
# 0=auto, 1=headphones, 2=hdmi. 
AUDIO_OUTPUT=1

# If on, this computer is not discovearable when an audio device is connected
# 0=off, 1=on
ENABLE_BT_DISCOVER=1

echo "For output see $LOGFILE"

## This function add the pulseaudio loopback interface from source to sink
## The source is set by the bluetooth mac address using XX_XX_XX_XX_XX_XX format.
## param: XX_XX_XX_XX_XX_XX
## return 0 on success
add_from_mac(){
  if [ -z "$1" ] # zero params
    then
        echo "Mac not found" >> $LOGFILE
    else
        mac=$1 # Mac is parameter-1

        # Setting source name
        bluez_dev=bluez_source.$mac
        echo "bluez source: $mac"  >> $LOGFILE

        # This script is called early, we just wait to be sure that pulseaudio discovered the device
        sleep 1
        # Very that the source is present
        CONFIRM=`sudo -u pi pactl list short | grep $bluez_dev`
        if [ ! -z "$CONFIRM" ]
        then
            echo "Adding the loopback interface:  $bluez_dev"  >> $LOGFILE
            echo "sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0"  >> $LOGFILE

            # This command route audio from bluetooth source to the local sink..
            # it's the main goal of this script
            sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0  >> $LOGFILE
            return $?
        else
            echo "Unable to find a bluetooth device compatible with pulsaudio using the following device: $bluez_dev" >> $LOGFILE
            return -1
        fi
    fi
}

## This function set volume to maximum and choose the right output
## return 0 on success
volume_max(){
    # Set the audio OUTPUT on raspberry pi
    # amixer cset numid=3 <n> 
    # where n is 0=auto, 1=headphones, 2=hdmi. 
    amixer cset numid=3 $AUDIO_OUTPUT  >> $LOGFILE

    # Set volume level to 100 percent
    amixer set Master 100%   >> $LOGFILE
    pacmd set-sink-volume 0 65537   >> $LOGFILE
    return $?
}

## This function will detect the bluetooth mac address from input device and configure it.
## Lots of devices are seen as input devices. But Mac OS X is not detected as input
## return 0 on success
detect_mac_from_input(){
    ERRORCODE=-1

    echo "Detecting mac from input devices" >> $LOGFILE
    for dev in $(find /sys/devices/virtual/input/ -name input*)
    do
        if [ -f "$dev/name" ]
        then
            mac=$(cat "$dev/name" | sed 's/:/_/g')
            add_from_mac $mac

            # Endfor if the command is successfull
            ERRORCODE=$?
            if [ $ERRORCODE -eq 0]; then
                return 0
            fi
        fi
    done
    # Error
    return $ERRORCODE
}
## This function will detect the bt mac address from dev-path and configure it.
## Devpath is set by udev on device link
## return 0 on success
detect_mac_from_devpath(){
    ERRORCODE=-1
    if [ ! -z "$DEVPATH" ]; then
        echo "Detecting mac from DEVPATH"  >> $LOGFILE
        for dev in $(find /sys$DEVPATH -name address)
        do
            mac=$(cat "$dev" | sed 's/:/_/g')
            add_from_mac $mac

            # Endfor if the command is successfull
            ERRORCODE=$?
            if [ $ERRORCODE -eq 0]; then
                return 0
            fi

        done
        return $ERRORCODE;
    else
        echo "DEVPATH not set, wrong bluetooth device? " >> $LOGFILE
        return -2
    fi
    return $ERRORCODE
}


## Detecting if an action is set
if [ -z "$ACTION" ]; then
    echo "The script must be called from udev." >> $LOGFILE
    exit -1;
fi
## Getting the action
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")

# Switch case
case "$ACTION" in
"add")

    # Turn off bluetooth discovery before connecting existing BT device to audio
    if [ $ENABLE_BT_DISCOVER -eq 1]; then
        echo "Stet computer as hidden" >> $LOGFILE
        hciconfig hci0 noscan
    fi

    # Turn volume to max
    volume_max

    # Detect BT Mac Address from input devices
    detect_mac_from_input
    OK=$?

    # Detect BT Mac address from device path on a bluetooth event
    if [ $OK != 0 ]; then
        if [ "$SUBSYSTEM" == "bluetooth" ]; then
            detect_mac_from_devpath
            OK=$?
        fi
    fi

    # Check if the add was successfull, otherwise display all available sources
    if [ $OK != 0 ]; then
        echo "Your bluetooth device is not detected !" >> $LOGFILE
        echo "Available sources are:" >> $LOGFILE
        sudo -u $USER pactl list short sources >> $LOGFILE
    else
        echo "Device successfully added " >> $LOGFILE
    fi
    ;;

"remove")
    # Turn on bluetooth discovery if device disconnects
    if [ $ENABLE_BT_DISCOVER -eq 1]; then
        echo "Set computer as visible" >> $LOGFILE
        sudo hciconfig hci0 piscan
    fi
    echo "Removed" >> $LOGFILE
    ;;

#   
*)
    echo "Unsuported action $action" >> $LOGFILE
    ;;
esac
echo "--" >> $LOGFILE

BITTE BEACHTEN SIE, dass sich Ihr AUDIOSINK möglicherweise von meinem unterscheidet. Überprüfen Sie ihn vor der Verwendung pactl list short sinks

machen Sie das Skript ausführbar, indem Sie diesen Code eingeben

chmod 777 bluetooth 

Schließen Sie das Headset an, um zu testen, ob die Audiobuchse funktioniert, und testen Sie mit

 aplay /usr/share/sounds/alsa/Front_Center.wav

oder Sie können das Standard-Audio-Routing mit einstellen

sudo amixer cset numid = 3 n

wo n sein könnte: 0 = auto 1 = jack 2 = hdmi

3. Koppeln und verbinden Sie das Audio

Gehe zum Terminal und tippe bluetoothctl. Aktivieren Sie zuerst Bluetooth mit power onund agent onlegen Sie dann den Standardagenten fest, den Sie zuvor bearbeitet haben default-agent, und aktivieren Sie dann den Erkennungs- und den Pair-Modus mit discoverable on; pairable on. Sie sollten raspberrypi bluetooth auf Ihrem Telefon oder Laptop sehen und Sie können es auf dem Telefon koppeln, indem Sie darauf klicken und Paar berühren. Auf dem Terminal geben Sie y ein. Zurück zum Terminal, die Sie am Telefon nach Art verbinden , connect xx:xx:xx:xx:xx:xxwo xx:xx:xx:xx:xx:xx Sie Telefon Bluetooth - MAC - Adresse. und vergessen Sie nicht zu vertrauen, trust xx:xx:xx:xx:xx:xx where xx:xx:xx:xx:xx:xxist Ihr Telefon Bluetooth-Mac-Adresse Und voila Sie haben Bluetooth-Verstärker (oder was auch immer der Name ist) mit Himbeere.

4. Fazit

Nachdem ich es ausprobiert und experimentiert hatte, stellte ich fest, dass die Audioqualität niedrig ist und ich es eher nicht benutze, da die Himbeere einfrieren wird, wenn Sie es mit dem Lied verwenden, das zur Himbeere gestreamt wird. Ich empfehle, UPNP-Sprecherprojekt zu verwenden, indem ich gmediarenderer benutze. Das Audio ist hervorragend und es gibt keine Verzögerung und Streuung und es kann verlustfreie Audiodateien (Flac, WAV, DLL) abspielen. Dies ist die detaillierte Anleitung zum Einrichten

Referenz: Tutorial von jobpassion ; Ragusas Drehbuch ; verwandte Arbeiten ;

xdhe
quelle
Ich kann nicht ausführen sudo service pulseaudio restart, ich Failed to restart pulseaudio.service: Unit pulseaudio.service failed to load: No such file or directory.
bekomme
Außerdem benutze ich, bluetoothctlwenn ich es tue connect xx:xx:xx:xx:xx:xx, Failed to connect: org.bluez.Error.Failedentweder mein Telefon oder meinen Laptop
Montag,
Was für ein Betriebssystem verwenden Sie? Das einzige Betriebssystem, das Raspberry Pi 3 onboard Bluetooth unterstützt, ist Raspbian Jessie und Ubuntu Mate> 16.04. Auf dem Ubuntu Mate ist Bluetooth a2dp bereits vorhanden, daher können Sie es im Bluetooth-Manager überprüfen.
31.
Wenn Sie bereits ein Online-Tutorial ausprobiert und Probleme behoben haben, ist es meines Erachtens am besten, die Konfiguration der Pakete neu zu installieren und zu löschen. Ich habe mit den Bluetooth-Paketen rumgespielt, indem ich das Paket 'rpi-bluetooth' manuell installiert habe, und Bluetooth funktioniert nicht. Also habe ich Raspbian Image reflash und es funktioniert einwandfrei obwohl der Ton IMO nicht angenehm ist.
31.
Ich verwende einen frisch installierten Raspbian Jessie und folge Schritt für Schritt Ihren Anweisungen. Möglicherweise fehlt ein Schritt, der von einem frisch installierten Betriebssystem ausgeht. Ich könnte es mit Ubuntu Mate versuchen
Uhr
16

Hier ist eine alternative Lösung, die sich nicht auf PulseAudio stützt: https://github.com/lukasjapan/bt-speaker

Installiere auf raspbian als root mit:

curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash

Es wird ein Bluetooth-Lautsprecher-Daemon gestartet, der automatisch einen einzelnen Client für A2DP / AVRCP akzeptiert und den Audio-Stream direkt an ALSA weiterleitet.

Lukas
quelle
Sicherheitshinweis: Ich habe das Skript selbst geschrieben, damit ich Ihnen versichern kann, dass es sicher ist. Bitte überprüfen Sie den Inhalt selbst
Lukas
nett! Ich werde versuchen, dies in den nächsten Tagen zu testen
am
1
Ich habe versucht, Ihre Lösung, und es hat funktioniert, aber der Ton blieb jede Sekunde. warum passiert das?
wolfram77
Höchstwahrscheinlich das WiFi-Problem: github.com/lukasjapan/bt-speaker/issues/4
Lukas
3

Ich habe prägnante Anweisungen für den Raspberry Pi 3 in meinem Blog geschrieben . Die meisten Online-Anweisungen gelten für ältere Versionen von Debian / Xbian. Hier sind die Anweisungen, die ich getestet habe und mit Xbian an Raspberry Pi 3 arbeite.

  1. Beginnen Sie mit der Installation / Aktualisierung aller Pakete

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install pulseaudio-module-bluetooth bluez-tools
    
  2. Benutzer zu Gruppen hinzufügen. Dies ist sehr wichtig. Wenn Sie eine andere Distribution verwenden, ersetzen Sie 'xbian' durch Ihren Benutzernamen.

    sudo gpasswd -a xbian pulse
    sudo gpasswd -a xbian lp
    sudo gpasswd -a pulse lp
    sudo gpasswd -a xbian audio
    sudo gpasswd -a pulse audio
    
  3. Richten Sie die Geräteklasse PulseAudio und Bluetooth ein

    sudo sh -c "echo 'extra-arguments = --exit-idle-time=-1 --log-target=syslog' >> /etc/pulse/client.conf"
    sudo hciconfig hci0 up
    sudo hciconfig hci0 class 0x200420
    sudo reboot
    

Die Bluetooth-Dienst- / Geräteklasse 0x200420 bedeutet, dass das Gerät für Car Audio eingerichtet ist. Klicken Sie auf diesen Link , um weitere Optionen für die Bluetooth-Klasse zu erkunden.

  1. Um mit einem Gerät zu koppeln, müssen wir das Tool "bluetoothctl" verwenden.

    sudo bluetoothctl
    
  2. Setzen Sie den Agenten auf KeyboardOnly und legen Sie ihn als Standard fest. Dies muss nur einmal durchgeführt werden. Führen Sie in bluetoothctl die folgenden Befehle aus:

    agent KeyboardOnly
    default-agent
    
  3. Schalten Sie Bluetooth auf Ihrem Telefon / Tablet ein und vergewissern Sie sich, dass es erkennbar ist. Führen Sie die folgenden Befehle in bluetoothctl aus:

    scan on
    pair xx:xx:xx:...
    trust xx:xx:xx:...
    exit
    

    xx: xx: xx: .. ist die MAC-Adresse Ihres Mobilteils / Geräts. Warten Sie nach dem Ausführen von "Scan on" eine Minute, bis das Gerät zusammen mit der MAC-Adresse angezeigt wird. Nachdem Sie 'pair xx: xx: xx: ..' ausgeführt haben, überprüfen Sie Ihr Gerät und akzeptieren Sie die eingehende Verbindung. Machen Sie dasselbe auf dem Terminal, indem Sie yes eingeben.

  4. Stellen Sie nun über Ihr Mobilteil eine Verbindung zum Raspberry Pi her und es sollte sich als Audiogerät verbinden. Alle Audiodaten, die über das Gerät wiedergegeben werden, sollten nun je nach Konfiguration Ihres Pis über den HDMI- oder Analogausgang des Raspberry Pi ausgegeben werden.

  5. Wenn die Verbindung fehlschlägt, versuchen Sie es erneut. Manchmal sind zwei Versuche erforderlich.

Abdul Mueid
quelle
Vielen Dank, dass Sie sich die Zeit genommen haben, uns zu antworten. Nur-Link-Antworten werden nicht empfohlen, da nicht gesagt werden kann, was sich am anderen Ende befindet. Wenn sich der verknüpfte Artikel ändert oder verschwindet, gilt dies auch für diese Antwort. Können Sie die wichtigen Punkte zusammenfassen?
Goobering
@goobering: Beitrag aktualisiert. Ich bin mit der Formatierung auf Stack-Sites nicht allzu vertraut, aber ich habe es nach besten Kräften gemacht. Vielen Dank, dass Sie sich die Zeit genommen haben, meine Antwort zu überprüfen. Einen
schönen
1
Was haben Sie getan, um das abgehackte Audio zu reparieren?
NoBugs
Es ist super abgehackt. Müssen wir den Pi übertakten?
b-ak
1
Die Anweisungen von Abdul funktionieren einwandfrei, jedoch ist die Audioausgabe über den BT-Lautsprecher sehr ruckelig. Dies ist in keinem Fall eine akzeptable Audioqualität. PI native Audio über Pulseaudio ist sehr beschissen. Zeit für eine weitaus bessere Lösung als Bluetooth.
Don Allen
0

Haben Sie die notorisch schlechte Qualität des RPi-3,5-mm-Audioausgangs in Betracht gezogen, bevor Sie diesen Weg antreten?

Soundausgabe des Raspberry Pi

Aus diesem Grund finden Sie möglicherweise kein aktuelles Lernprogramm.

Um fair zu sein, könnte der andere Grund sein, dass ein anständiges Lautsprecherpaar nicht weniger teuer ist als ein anständiger Bluetooth-Lautsprecher. Ich würde diesen Weg nicht gehen, es sei denn, Sie beabsichtigen, auch in eine USB-Soundkarte zu investieren (nicht teuer, aber Ihr Gesamtpreis beginnt jetzt zu steigen). Oder möchten Sie den HDMI-Ausgang nutzen? Es ist wirklich sehr gut.

Wie wäre es mit diesem? Alle Komponenten sollten sofort verfügbar sein.

http://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/

Dies war mein erstes RPi-Projekt. Ich habe nicht sehr gründlich nachgesehen, aber ich glaube, dass die MPD-Komponente zum Streamen von Bluetooth zum RPi verwendet werden kann. Ich überlasse es Ihnen, diese Nachforschungen anzustellen.

http://www.bobrathbone.com/raspberrypi_radio.htm

KDM
quelle
Ich stimme mit Ihnen auf der Tatsache , dass es besser bereit Lösungen gibt, und nicht so teuer, aber ich will das Teil eines größeren Projekts sein
gtatr
Ich spekuliere nur über die Gründe für die älteren Anweisungen. Weitere Hinweise zu möglichen Lösungen finden Sie jedoch. Schauen Sie sich den MPD-Daemon an. Ich kann mich irren, aber ich denke, es kann Bt streamen. Könnte etwas mehr Details gebrauchen. Wenn Sie die 3,5-mm-Audiobuchse verwenden, funktioniert sie wahrscheinlich mit 75% einwandfrei, Sie müssen sich jedoch für die Lautstärkeregelung auf einen externen Verstärker verlassen.
KDM
Übrigens habe ich dieses Tutorial ausprobiert und fast jedes andere Tutorial online, aber ohne Erfolg
gtatr