我正在寻找一种使用Raspbian Jessie将Raspberry Pi 3配置为蓝牙扬声器的方法。我所说的蓝牙扬声器是指使用A2DP通过蓝牙接收音频流,并通过音频插孔,HDMI端口或USB音频适配器,通过连接到Raspberry Pi的扬声器播放音频。
不同的教程可以在线获得,但是已经过时了,大多数教程不再可用。
我正在寻找一种使用Raspbian Jessie将Raspberry Pi 3配置为蓝牙扬声器的方法。我所说的蓝牙扬声器是指使用A2DP通过蓝牙接收音频流,并通过音频插孔,HDMI端口或USB音频适配器,通过连接到Raspberry Pi的扬声器播放音频。
不同的教程可以在线获得,但是已经过时了,大多数教程不再可用。
Answers:
过了一会儿我一直在这个项目上(以帮助我的朋友毕业做论文),发现在线项目做得很好(尽管处理音频的pi远远落后于pi,并且压降使其冻结是唯一的方法)要使其重启,请拔下电源线)。
这是我一直在努力的步骤,并且适用于raspberry pi 3。
该项目取决于pulseaudio,因此请键入以下内容进行抓取并安装:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
我宁愿先更新树莓的固件,然后再安装它们,因为我的rpi-bluetooth
软件包有问题,所以我这样做:
sudo rpi-update
并使其安装并前进到下一步。
首先将pi用户名添加到组pulseaudio中,
sudo usermod -a -G lp pi
使用文本编辑器在/etc/bluetooth/audio.conf下创建新配置,并添加以下行
[General]:
Enable=Source,Sink,Media,Socket
/etc/bluetooth/main.conf
使用您喜欢的文本编辑器编辑文件(我正在使用nano)。
设置蓝牙类别,将以下行修改为:
Class = 0x00041C
0x000041C
表示rpi蓝牙支持A2DP协议。
更改/etc/pulse/daemon.conf
添加/修改(不要忘记在添加代码之前彻底检查代码),然后更改
resample-method = trivial
您可以使用任何喜欢的方法,我个人可以speex-float-3
作为参考,您可以看到此链接
使用以下命令启动pulseaudio服务:
pulseaudio -D
我们将使用ragusa87脚本自动将蓝牙源转换为音频接收器。首先,请通过编辑文件将新配置添加到udev init.d /etc/udev/rules.d/99-input.rules
并将其添加到文件中
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
使用mkdir 将文件夹添加udev
到/usr/lib
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
并将其添加到文件蓝牙中(信用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
请注意,您的AUDIOSINK可能与我的不同,请在使用前进行检查
pactl list short sinks
通过输入此代码使脚本可执行
chmod 777 bluetooth
插入耳机以测试音频插孔是否正常工作并进行测试
aplay /usr/share/sounds/alsa/Front_Center.wav
或者您可以通过设置默认音频路由
须藤搅拌机cset numid = 3 n
其中n可能是:0 =自动1 =插孔2 = HDMI
转到终端并输入bluetoothctl
。首先使用激活蓝牙,power on
然后使用agent on
设置您之前一直在编辑的默认代理,default-agent
然后使用设置可发现模式和配对模式discoverable on; pairable on
。您应该在手机或笔记本电脑上看到raspberrypi蓝牙,然后单击并触摸配对即可在手机上将其配对。在终端上,键入y。返回终端,通过键入以下内容连接到电话,connect xx:xx:xx:xx:xx:xx
其中xx:xx:xx:xx:xx:x
x是您的电话蓝牙mac地址。并且不要忘记信任trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
您的电话是您的手机的蓝牙mac地址,瞧,您有使用树莓派的蓝牙放大器(或其他名称)。
经过尝试后,我发现音频质量很差,我宁愿不使用它,因为如果您将树莓派与歌曲流传输到树莓派一起使用,它将被冻结。我建议通过使用gmediarenderer使用UPNP扬声器项目。音频很棒,没有延迟和分散的声音,并且可以播放无损音频文件(flac,wav,dll)。这是详细的设置方法
参考: jobpassion的教程; rag的剧本 ; 相关工作 ;
sudo service pulseaudio restart
,得到了Failed to restart pulseaudio.service: Unit pulseaudio.service failed to load: No such file or directory.
bluetoothctl
当我connect xx:xx:xx:xx:xx:xx
开始Failed to connect: org.bluez.Error.Failed
使用手机或笔记本电脑时
这是一种不依赖PulseAudio的替代解决方案:https : //github.com/lukasjapan/bt-speaker
以根用户身份在raspbian上安装:
curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash
它将启动蓝牙扬声器守护程序,该守护程序自动接受A2DP / AVRCP的单个客户端,并将音频流直接传输到ALSA。
我在博客上为Raspberry Pi 3编写了简洁的说明。在线上的大多数说明适用于Debian / Xbian的旧版本。这是我已经测试过的说明,并且正在使用Xbian在Raspberry Pi 3上工作。
首先安装/更新所有软件包
sudo apt-get update sudo apt-get upgrade sudo apt-get install pulseaudio-module-bluetooth bluez-tools
将用户添加到组。这个非常重要。如果使用其他发行版,请用您的用户名替换“ xbian”。
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
设置PulseAudio和蓝牙设备类别
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
蓝牙服务/设备类别0x200420表示设备已设置为车载音频。请参阅此链接以探索更多的蓝牙类选项。
要与设备配对,我们将需要使用“ bluetoothctl”工具。
sudo bluetoothctl
将代理设置为KeyboardOnly并将其设置为默认值。这仅需要执行一次。在bluetoothctl中,运行以下命令:
agent KeyboardOnly default-agent
打开手机/平板电脑上的蓝牙,并确保可发现。在bluetoothctl中运行以下命令:
scan on pair xx:xx:xx:... trust xx:xx:xx:... exit
xx:xx:xx:..是您的手机/设备的MAC地址。运行“扫描”后,请等待一分钟,以便您的设备及其MAC地址显示出来。运行“ pair xx:xx:xx:..”后,检查您的设备并接受传入的连接。通过在终端上输入是,执行相同的操作。
现在,从手机连接到Raspberry Pi,它应该作为音频设备连接。现在,应根据Pi的配置,使用Raspberry Pi的HDMI或Analog out输出通过设备播放的所有音频。
如果连接失败,请重试,有时需要2次尝试。
在沿着那条路线出发之前,您是否考虑过RPi 3.5mm音频插孔输出的质量差的问题?
这可能就是为什么您找不到最新的教程。
公平地说,另一个原因可能是,像样的扬声器对并不比像样的蓝牙扬声器贵。我不会走这条路,除非您打算同时购买USB声卡(虽然价格不贵,但您的总价现在开始上涨)。或者,也许您打算使用HDMI输出?真的很好
这个怎么样?所有组件都应随时可用。
http://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/
这是我的第一个RPi项目。我的外观还不太好,但是我相信MPD组件可用于将蓝牙流传输到RPi。我让你去做研究。