我所说的蓝牙扬声器的意思是使用它通过A2DP通过蓝牙接收音频流并通过连接到Raspberry的扬声器播放它通过音频插孔,HDMI端口或USB音频适配器连接Pi。
在线上提供了不同的教程,但这些教程已经过时了,大多数教程不再起作用。
#1 楼
过了一会儿我一直在这个项目上(以帮助我的朋友做毕业论文),发现在线项目做得很好(尽管处理音频的pi远远落后于pi,并且压降使其冻结是唯一的方法)要使其重新启动,请拔下电源线。)这是我一直在努力的步骤,并且可以在raspberry pi 3上使用。
1。下载所需的软件包
此项目取决于pulseaudio,因此请键入以下内容进行抓取并安装:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
我宁愿先更新raspberry的固件在安装它们之前,因为我对
rpi-bluetooth
软件包有问题,所以我要这样做:sudo rpi-update
使其安装并前进到下一步。
2 。编辑配置并应用
首先将pi用户名添加到pulseaudio组中,并在/ etc / bluetooth / audio下创建新配置。
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脚本自动执行蓝牙音频接收器。首先,请通过编辑文件
/etc/udev/rules.d/99-input.rules
将新配置添加到udev init.d中,并将其添加到文件中。通过使用mkdir <将文件夹
udev
添加到/usr/lib
br /> SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
并将其添加到文件蓝牙中(信用ragusa87)
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
请注意您的AUDIOSINK可能与我的不同,请在使用
pactl list short sinks
之前进行检查。通过输入以下代码使脚本可执行。
#!/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 "" ] # zero params
then
echo "Mac not found" >> $LOGFILE
else
mac= # 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
插入耳机以测试音频插孔是否正常工作并进行测试
chmod 777 bluetooth
,或者可以使用
<设置音频的默认路由sudo混合器cset numid = 3 n
其中n可以是:0 =自动1 =插孔2 = hdmi
3。将音频
配对并连接到端子,然后输入
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地址,瞧,您可以通过使用树莓派获得蓝牙放大器(或其他名称)。4。结论
经过尝试后,我发现音频质量很差,我宁愿不使用它,因为如果将树莓派中的歌曲流过树莓派,它将被冻结。我建议通过使用gmediarenderer使用UPNP扬声器项目。音频很棒,没有延迟和分散的声音,并且可以播放无损音频文件(flac,wav,dll)。这是详细的设置方法
参考:
jobpassion的教程;
ragusa的脚本;
相关工作;
评论
我无法执行sudo服务pulseaudio重新启动,我无法重新启动pulseaudio.service:单元pulseaudio.service无法加载:没有这样的文件或目录。
–gtatr
16年5月30日在21:21
此外,当我连接xx:xx:xx:xx:xx:xx:xx时,使用bluetoothctl时我无法连接:org.bluez.Error.Failed using my phone or laptop
–gtatr
16年5月30日在21:30
您正在使用什么操作系统?唯一支持raspberry pi 3板载蓝牙的操作系统是raspbian Jessie和Ubuntu Mate> 16.04。在Ubuntu Mate上已经存在蓝牙a2dp,因此您可能已在Bluetooth Manager上对其进行了检查。
–xdhe
16年5月31日在4:56
如果您已经尝试过任何在线教程并搞砸了,我认为最好重新安装并清除软件包的配置。我已经通过手动安装“ rpi-bluetooth”软件包来弄乱了蓝牙软件包,但蓝牙无法正常工作。因此,我重新刷新了Raspbian图像,尽管IMO声音不佳,但效果很好。
–xdhe
16年5月31日在5:08
我使用的是全新安装的Raspbian Jessie,而且我会逐步按照您的说明进行操作,也许新安装的OS缺少步骤。我可以试试Ubuntu Mate
–gtatr
16年5月31日在10:18
#2 楼
这是一个不依赖PulseAudio的替代解决方案:https://github.com/lukasjapan/bt-speaker
以root身份在raspbian上安装:
<
curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash
它将启动蓝牙扬声器守护程序,该守护程序自动接受A2DP / AVRCP的单个客户端,并将音频流直接传输到ALSA。
评论
安全提示:我自己编写了脚本,所以可以保证它是安全的,但请您亲自验证内容
–卢卡斯
17 Mar 15 '17 at 0:56
真好!我将在未来几天尝试测试
–gtatr
17年3月16日在19:45
我正在尝试您的解决方案,但效果很好,但音频隔秒停住了。为什么会这样呢?
–wolfram77
17年11月15日在18:05
最有可能是Wifi问题:github.com/lukasjapan/bt-speaker/issues/4
–卢卡斯
17年11月25日在6:05
迄今为止最好的解决方案。简单而直接。唯一的“问题”是轻微的延迟(大约500毫秒),这使观看动作不愉快。
–托马斯·克里斯托夫(Thomas Christof)
19/12/7在21:50
#3 楼
我在我的博客上为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和Bluetooth设备类
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:..”后,检查您的设备并接受传入的连接。通过在终端上键入yes,在终端上执行相同的操作。
现在从您的手机连接到Raspberry Pi,它应该作为音频设备连接。现在,应根据树莓派的配置,使用Raspberry Pi的HDMI或Analog out输出通过设备播放的所有音频。
如果连接失败,请重试,有时需要2次尝试。
评论
感谢您抽出宝贵的时间回答。不鼓励仅链接的答案,因为不知道另一端是什么-如果链接的文章更改或消失,则此答案也一样。你能总结一下重点吗?
– goobering
16年6月22日在9:59
@goobering:发布已更新。我对Stack网站上的格式不太熟悉,但是我已尽其所能。感谢您抽出宝贵的时间来查看我的答案。祝你有美好的一天
–阿卜杜勒·穆埃(Abdul Mueid)
16年6月22日在11:33
您如何解决断断续续的音频?
– NoBugs
17年2月6日在4:05
超级动荡。我们必须超频pi吗?
–b-ak
17年2月11日在16:01
阿卜杜勒(Abdul)的指令工作正常,但是通过BT扬声器输出的音频非常不稳定。在任何情况下,这都是不可接受的音频质量。通过Pulseaudio提供的PI本机音频非常糟糕。是时候寻求比蓝牙更好的解决方案了。
–唐·艾伦
17年5月26日在17:11
#4 楼
在沿那条路线出发之前,您是否考虑过RPi 3.5mm音频插孔输出质量差的问题?Raspberry Pi的声音输出
这可能就是为什么您找不到最新的教程。
公平地说,另一个原因可能是,像样的扬声器对并不比像样的蓝牙扬声器贵。我不会走这条路,除非您打算同时购买USB声卡(虽然价格不贵,但您的总价现在开始上涨)。或者,也许您打算使用HDMI输出?真的很好。
这个怎么样?所有组件都应随时可用。
http://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/
这是我的第一个RPi项目。我的外观还不太好,但是我相信MPD组件可用于将蓝牙流传输到RPi。我让你去做那个研究。
http://www.bobrathbone.com/raspberrypi_radio.htm
评论
我同意您的看法,即那里有更好的现成解决方案,而且价格并不昂贵,但是我希望这可以成为更大项目的一部分
–gtatr
16年5月22日在10:58
我只是推测老年人指示的原因。但是,有关其他解决方案,请参阅其他说明。查看MPD守护程序。我可能会误会,但我认为它可以串流Bt。可以使用更多细节。如果您要使用3.5毫米音频插孔,则在75%的音量下可能会正常工作,但是您需要依靠外部放大器进行音量控制。
– KDM
16年5月22日在13:04
顺便说一句,我尝试了该教程,以及几乎所有其他在线教程,但都没有成功
–gtatr
16年5月22日在17:21
评论
不清楚“作为蓝牙扬声器”是什么意思编辑。希望现在已经明确
我很清楚,我有兴趣阅读任何真实的答案。
投票解决方案是我最终选择的类似路线。但是,我有一个github存储库,它将在全新安装的raspbian Jessie Lite上为您进行设置(不确定如果没有对具有像素的Jessie进行少许配置的工作),只需按照以下安装说明进行操作:github.com/bareinhard/ 。我发现现有解决方案的主要问题是默认情况下它们使用pulseaudio5。这将编译pa6并摆脱了pa5遇到的许多播放问题。