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-bluetooth
Paket 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.conf
mit 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-3
als 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.rules
und 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/lib
indem 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 on
und agent on
legen 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:xx
wo xx:xx:xx:xx:xx:x
x Sie Telefon Bluetooth - MAC - Adresse. und vergessen Sie nicht zu vertrauen, trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
ist 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 ;