Je suis sur ce projet après un certain temps (pour aider mon ami à préparer son mémoire) et je trouve que le projet en ligne se passe bien (bien que le traitement audio de l’audio soit assez en retard sur celui-ci, la chute de tension le bloque comme seul moyen) pour le faire redémarrer, c'est débrancher le câble d'alimentation).
C’est l’étape sur laquelle j’ai travaillé et cela fonctionne sur framboise pi 3.
1. Téléchargez le package requis
Ce projet dépend de pulseaudio alors saisissez-le et installez-le en tapant:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
Je préfère mettre à jour le firmware de Raspberry avant de les installer car j'ai un problème avec le rpi-bluetooth
paquet, donc je le fais:
sudo rpi-update
et le faire installer et passer à l'étape suivante.
2. Modifier la configuration et l'appliquer
Ajoutez d’abord le nom d’utilisateur pi au groupe pulseaudio avec
sudo usermod -a -G lp pi
créez une nouvelle configuration sous /etc/bluetooth/audio.conf à l'aide de l'éditeur de texte et ajoutez la ligne suivante
[General]:
Enable=Source,Sink,Media,Socket
modifier le fichier en /etc/bluetooth/main.conf
utilisant votre éditeur de texte préféré (j'utilise nano).
Définir la classe Bluetooth, Modifiez la ligne suivante en:
Class = 0x00041C
0x000041C
signifie que le protocole A2DP de rpi bluetooth est supporté.
changer /etc/pulse/daemon.conf
ajouter / modifier (n'oubliez pas de vérifier le code soigneusement avant de les ajouter), et changer
resample-method = trivial
vous pouvez utiliser n'importe quelle méthode, j'utilise personnellement speex-float-3
pour référence, vous pouvez voir ce lien
démarrez le service pulseaudio avec:
pulseaudio -D
nous allons utiliser le script ragusa87 pour automatiser la source Bluetooth vers le récepteur audio. Commencez par ajouter une nouvelle configuration à udev init.d en modifiant le fichier, /etc/udev/rules.d/99-input.rules
puis ajoutez-le au fichier.
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
ajouter un dossier udev
à l' /usr/lib
aide de mkdir
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
et ajoutez ceci au fichier bluetooth (crédits 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
VEUILLEZ NOTER que votre AUDIOSINK peut être différent du mien, vérifiez-le avant d'utiliser pactl list short sinks
rendre le script exécutable en entrant ce code
chmod 777 bluetooth
branchez le casque pour vérifier si la prise audio fonctionne et testez-le avec
aplay /usr/share/sounds/alsa/Front_Center.wav
ou vous pouvez définir le routage audio par défaut avec
sudo amixer cset numid = 3 n
où n pourrait être: 0 = auto 1 = prise 2 = hdmi
3. Associez et connectez l'audio
allez au terminal et tapez bluetoothctl
. Activez d'abord Bluetooth avec power on
, puis agent on
définissez l'agent par défaut que vous avez déjà modifié default-agent
, puis activez le mode détectable et le mode de couplage discoverable on; pairable on
. Vous devez voir Bluetooth Bluetooth framboise sur votre téléphone ou votre ordinateur portable. Vous pouvez le coupler au téléphone en cliquant dessus, puis en appuyant sur paire. Sur le terminal, vous tapez y. De retour au terminal, vous vous connectez au téléphone par type, connect xx:xx:xx:xx:xx:xx
où xx:xx:xx:xx:xx:x
x est l'adresse mac Bluetooth de votre téléphone. et n'oubliez pas de faire confiance à trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
votre téléphone adresse bluetooth mac mac Et voila vous avez un amplificateur bluetooth (ou quel que soit son nom) en utilisant framboise.
4. Conclusion
Après avoir essayé et expérimenté, j'ai découvert que la qualité audio était basse et que je ne l'utilisais pas, car le frambois serait gelé si vous l'utilisiez avec la chanson en streaming sur le frambois. Je conseille d'utiliser le projet de haut-parleur UPNP en utilisant gmediarenderer. L'audio est superbe et il n'y a pas de retard et de dispersion du son et il peut lire des fichiers audio sans perte (flac, wav, dll). C'est le détail comment le configurer
référence:
tutoriel de jobpassion ;
le script de ragusa ;
travaux connexes ;