硬件条件: Pi 1B+ 512Mb + ORICO BTA-401蓝牙适配器 + 魅动蓝牙音箱
该文案采用 Bluez + Pulseaudio 方案, 即 Bluez 负责蓝牙设备间的连接, Pulseaudio 负责音频输出的通道
1)先 lsusb 看看是否识别蓝牙适配器,不是太旧的Linux都能识别.
2)安装以下组件
apt-get install libdbus-1-dev libdbus-c++-dev libudev-dev libical-dev libtinfo-dev systemd autoconf libtool automake make #编译环境 apt-get install dbus glib2.0 bluez blueman alsa-utils bluetooth bluez-utils bluez-compat bluez-alsa pulseaudio pulseaudio-module-bluetooth #安装bluez pulseaudio apt-get install pavucontrol xauth #如果使用图形界面请安装
如果bluez安装报错,先按下面编译安装:
wget https://mirrors.edge.kernel.org/pub/linux/bluetooth/bluez-5.9.tar.gz tar xvf bluez-5.49.tar.gz cd bluez-5.49 ./configure make sudo make install sudo reboot
3) 加载蓝牙设备以及查询设备名称
aplay -l #查看现时声音的输入输出设备
root@raspberrypi:~# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0
插上USB蓝牙适配器后
lsusb #看到红字部分表示系统已经识别蓝牙适配器
root@raspberrypi:~# lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
在root下pulseaudio无法运行的, 通过以下命令把root加入到pulseaudio的群组就可以了 adduser root pulse-access pacmd
会进入蓝牙管理控制台”>>>”命令行状态, 退出控制台只需 exit 即可.
list-cards — 查看音频输出的各通道, 例如: 原机上alsa声卡/USB 声卡等等信息
list-modules — 查看加载了那些模块
其他看 help 吧!
这里使用另外一个命令来连接音箱以及启动时自动连接
pactl list sinks
会输出以下这类信息:
Sink #1 State: RUNNING Name: bluez_sink.A0_E9_DB_23_17_BB Description: Meidong Driver: module-bluetooth-device.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 24 Mute: no Volume: 0: 93% 1: 93% 0: -1.80 dB 1: -1.80 dB balance 0.00 Base Volume: 100% 0.00 dB Monitor Source: bluez_sink.A0_E9_DB_23_17_BB.monitor Latency: 50984 usec, configured 45317 usec Flags: HARDWARE DECIBEL_VOLUME LATENCY Properties: bluetooth.protocol = "a2dp" device.description = "Meidong" device.string = "A0:E9:DB:23:17:BB" device.api = "bluez" device.class = "sound" device.bus = "bluetooth" device.form_factor = "headset" bluez.path = "/org/bluez/2451/hci0/dev_A0_E9_DB_23_17_BB" bluez.class = "0x240404" bluez.name = "Meidong" device.icon_name = "audio-headset-bluetooth" device.intended_roles = "phone" Formats: pcm 有以上信息即代表蓝牙音箱已经被系统识别并连接成功!
4) 每次启动自动连接蓝牙音箱
在 /etc/rc.local 里加入以下命令行
sudo /usr/bin/bluez-test-audio connect a0:e9:db:23:17:bb
5) 最后处理播放器MPD
您应该会在桌面上的主raspbian菜单中看到管理脉冲音频设置的选项。
因此,这将设置基本的pulseaudio到蓝牙管道,如果您安装了pavucontrol,它将适用于大多数桌面应用程序。我不熟悉MPlayer,但MPD确实是通过控制台工作的。首先我安装了MPC和MPD:
sudo apt-get install mpd mpc
然后我配置MPD输出到脉冲:
sudo nano /etc/mpd.conf
您想要注释掉ALSA输出:
# An example of an ALSA output:
#
#audio_output {
# type "alsa"
# name "My ALSA Device"
# device "hw:0,0" # optional
# mixer_type "hardware" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
#}
然后启用pulseaudio输出:
audio_output {
type "pulse"
name "My Pulse Output"
server "127.0.0.1" # optional
sink "bluez_sink.A0_E9_DB_23_17_BB" # optional
}
如果没有指定接收器和服务器不能正常工作。 最后编辑pulseaudio以允许此连接:
sudo nano /etc/pulse/default.pa
添加以下行(它没有参数,默认情况下注释掉)
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
现在重新启动,通过Bluez连接到蓝牙音箱,MPD将输出到蓝牙音箱。您可以在MPD上查找详细信息,MPC是一个命令行客户端,无需额外配置即可正常运行。
排错:
1) 错误: Failed to get d-bus connection no connection to service manager.
解决: 升级系统吧, wheezy太老了, 使用init 启动; 要使用 Jessie或以上版本才支持 systemd , 可以参考”升级文档“把系统升级.
2) 错误: [warn] PulseAudio configured for per-user sessions … (warning).
解决: 修改 /etc/default/pulseaudio
改成以下:
PULSEAUDIO_SYSTEM_START=1
3) 如果安装 blueman 报错
apt-get remove blueman
apr-get autoremove
apt-get purge
apt-get update
apt-get upgrade
apt-get install blueman
以下是另外的信息记录, 无需理会
3)编辑 nano /etc/bluetooth/main.conf , 找到以下两行并修改为以下:
Name = Raspberrypi
Class = 0x20041C
defaults.ctl.card 0 defaults.pcm.card 0 把两个“0”改为“1”,重启后即使用USB声卡作为默认声音输出。