He estado en este proyecto después de un tiempo (para ayudar a mi amigo a hacer su trabajo para graduarse) y encuentro que el proyecto en línea funciona bien (aunque el procesamiento pi del audio está bastante rezagado y la caída de voltaje hace que se congele como la única forma hacer que se reinicie es desconectar el cable de alimentación).
Este es el paso en el que he estado trabajando y funciona en raspberry pi 3.
1. Descargue el paquete requerido
Este proyecto depende de pulseaudio, así que tómalo e instálalo escribiendo:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
prefiero actualizar el firmware de la frambuesa antes de instalarlos porque tengo un problema con el rpi-bluetooth
paquete, así que hago:
sudo rpi-update
y haga que se instale y avance al siguiente paso.
2. Edite la configuración y la aplicó
Primero agregue el nombre de usuario pi al grupo pulseaudio con
sudo usermod -a -G lp pi
cree una nueva configuración en /etc/bluetooth/audio.conf usando el editor de texto y agregue la siguiente línea
[General]:
Enable=Source,Sink,Media,Socket
edite el archivo /etc/bluetooth/main.conf
usando su editor de texto preferido (estoy usando nano).
Configure la clase Bluetooth, modifique la siguiente línea para:
Class = 0x00041C
0x000041C
significa que el bluetooth rpi admite el protocolo A2DP.
cambie /etc/pulse/daemon.conf
agregar / modificar (no olvide verificar el código a fondo antes de agregarlos), y cambie
resample-method = trivial
puede usar cualquier método que desee, personalmente lo uso speex-float-3
como referencia, puede ver este enlace
iniciar el servicio pulseaudio con:
pulseaudio -D
vamos a usar el script ragusa87 para automatizar la fuente de bluetooth para hundir el audio. Primero, agregue una nueva configuración a udev init.d editando el archivo /etc/udev/rules.d/99-input.rules
y agréguelo al archivo
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
agregar carpeta udev
a /usr/lib
mediante mkdir
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
y agregue esto al archivo bluetooth (créditos 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
TENGA EN CUENTA que su AUDIOSINK puede ser diferente al mío, verifíquelo antes de usar pactl list short sinks
hacer que el script sea ejecutable ingresando este código
chmod 777 bluetooth
conecte los auriculares para probar si el conector de audio funciona y pruebe con
aplay /usr/share/sounds/alsa/Front_Center.wav
o puede configurar el enrutamiento de audio predeterminado con
sudo amixer cset numid = 3 n
donde n podría ser: 0 = auto 1 = jack 2 = hdmi
3. Empareja y conecta el audio
ir a la terminal y escribir bluetoothctl
. Primero active bluetooth con power on
y luego agent on
, configure el agente predeterminado con el que ha estado editando anteriormente default-agent
, y luego configure el modo reconocible y el modo de emparejamiento con discoverable on; pairable on
. Debería ver bluetooth raspberrypi en su teléfono o computadora portátil y puede emparejarlo en el teléfono haciendo clic en él y tocando emparejar. En la terminal escribes y. De vuelta al terminal, te conectas al teléfono por tipo connect xx:xx:xx:xx:xx:xx
donde xx:xx:xx:xx:xx:x
x es la dirección mac de tu teléfono bluetooth. y no te olvides de confiar en trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
la dirección mac de tu teléfono bluetooth. Y listo, tienes un amplificador bluetooth (o como se llame) usando frambuesa.
4. Conclusión
después de probar y experimentar, descubrí que la calidad de audio es baja y prefiero no usarla, ya que la frambuesa se congelará si la usa con la canción que se transmite a la frambuesa. Aconsejo usar el proyecto de altavoz UPNP usando gmediarenderer. El audio es excelente y no hay sonido de retraso y dispersión y puede reproducir archivos de audio sin pérdidas (flac, wav, dll). Este es el detallado cómo configurarlo
referencia:
tutorial de jobpassion ;
guión de ragusa ;
trabajo relacionado ;