蓝牙音箱折腾了两个星期,又有了一些新的体会
(之前的见识比较浅薄,所以重新改写了这个帖子)
先说结论:蓝牙音箱连接操作略显复杂,声音有延迟,所以还是推荐买个有线的
思路:
dueros镜像基于的是raspberryjessie镜像来的,蓝牙的解决方案用的是pulseaudio , pulseaudio不推荐使用root账号,而我们duer必须使用root账号,这就是需要我们操作的地方.我们只需要设置pulseaudio允许root身份连接,然后将duer的声音输出设置为pulseaudio即可
以下所有命令都是以pi身份登录执行,所以命令前面有$符号
基础硬件和软件
树莓派3B
小米蓝牙音箱
dueros镜像
pulseaudio和bluez都是用的系统自带版本
一 连接蓝牙音箱
首先我们连接蓝牙音箱,当我们直接登录进去终端后,如果直接使用bluetoothctl连接蓝牙的时候,会报错Failed to connect: org.bluez.Error.Failed.
所以,先执行以下命令
$sudopulseaudio-D
上面的命令是将pulseaudio启动,如果你事前执行了`pulseaudio --start`命令,那就执行`pulseaudio --kill`先杀死.
原因是`pulseaudio --start`启动的话,不允许root身份连接,而duer都是root身份连接的.而且它会占用声卡资源,所以我们必须先杀死它,再用`sudo pulseaudio -D`启动
接着执行,开始连接蓝牙音箱
$sudoblutoothctl
如果你之前已经连过蓝牙了,直接connect就行不需要再走一次配对的流程.如果是第一次连接,则需要配对:
poweron
agenton
scanon
pair蓝牙音箱mac
trust蓝牙音箱mac
connect蓝牙音箱mac
scanoff
二 测试蓝牙音箱播放音乐
连接蓝牙音箱后,我们使用mplayer来测试音乐播放是否ok,如果未安装mplayer,使用`sudo apt-get install mplayer`即可,随便找个音乐mp3文件播放试试.
正常情况下直接`mplayer qingtian.mp3`可能不成功,那是因为pulseaudio当前对应有多个音频输出设备,我们需要手动指定pulseaudio从蓝牙音箱输出.
$sudopacmdlist-sinks
上述命令是用来输出pulseaudio当前所有可用的输出设备的,找到其中叫bluez_sink.AA_BB_CC_DD_EE_FF,这个就是你的蓝牙音箱,其中AA_BB_CC_DD_EE_FF表示你的蓝牙音箱mac
$sudopacmdset-default-sinksbluez_sink.AA_BB_CC_DD_EE_FF
顺利的话,使用`mplayer qingtian.mp3`就可以出声了(如果声音太大,使用sudo alsamixer调节音量大小).
不顺利的话:
如果`sudo pacmd list-sinks`找不到bluez开头的,那就是之前的流程不通,请检查是否真的是使用`sudo bluetoothctl`连上了蓝牙音箱,如果是蓝牙音箱自动连接上的(有可能是非root身份),就先断开再用`sudo bluetoothctl`连接蓝牙
如果还是不能出声,可以尝试把root加入audio和pulse组,因为我加了这两个组,这个方法待验证
三 修改dueros和pulse配置
走到这一步,你的前两步流程肯定是通的,否则你不用往下看了
我们首先要关掉duer,关掉duer的开机自动启动
#sudosystemctlstopduer
#sudosystemctldisableduer
因为开机自启动的话,蓝牙还没就绪,肯定不行,我们只能手动启动duer.这也是蓝牙音箱的一个坑之一...
接下来,修改duer的配置文件,文件是`/etc/start_duer.sh`,这个文件的作用是: 播放开机音乐,检测网络,最后启动duer的相关服务.我们修改其中aplay行删掉其中的`-Dplughw:2,0`
修改前
aplay-Dplughw:2,0/duer/appresources/startup.wav
修改后
aplay/duer/appresources/startup.wav
其中`-Dplughw:2,0`是用来强制指定输出设备的,那样蓝牙音箱就听不到duer启动声音了.删掉之后,我们让aplay使用默认输出设备即可.
再接着,我们修改duer的默认输出配置,编辑/duer/appresources/app_config.json
我们将audioplayer_playback_device和main_playback_device的值由default改成pulse
ps:是pulse,不是pulseaudio,这个pulse你可以输入`sudo pacmd list-sinks`,列出所有的设备,找到这个叫做pulse的
也就是,指定让duer默认声音走pulseaudio输出
四 可以开始测试了
做完前三步,先重启树莓派
以下所有登录,都是pi账户登录的终端
首先打开两个终端窗口A和B
接着在A输入`sudo pulseaudil -D`
接着在B终端输入`sudo bluetoothctl`并连接蓝牙音箱,别退出bluetoothctl
再接着在A终端输入`sudo pacmd set-default-sinks bluez_sink.AA_BB_CC_DD_EE_FF`,如果不记得bluez后面的东西,可以按tab键自动补全
上面的操作都无报错以后,先在A终端使用`sudo alsamixer`调节音量
在A终端使用`sudo systemctl start duer`启动duer,应该就能听到启动音乐了
说`小度小度`就可以唤醒了
如果没成功,使用`sudo systemctl status duer`观察duer的日志,使用`tail -f /duer/duer_linux.log`查看duer是否正常唤醒和语音识别,有了这两个日志,慢慢debug吧
五 未解决的事
现在虽然连上了蓝牙,但是还有其他问题
无法使用 `大点声 小点声`等语音来调节音量,只能手动通过`sudo alsamixer`调节
偶尔会突然失声,需要重启
人工成本高,以上过程如果想用脚本实现自动启动,额,需要自己写shell脚本,否则只能手动怼了
所以 我买了有线的音箱,上午买的,晚上就拿到了,上京东 666
以上教程如果有错漏的,大家反馈给我哈
如果觉得《Linux不能连接蓝牙音箱 【搁浅St|开发日记】彻底解决dueros连接蓝牙音箱的问题...》对你有帮助,请点赞、收藏,并留下你的观点哦!