Raspberry Pi声音方案(配合蓝牙音响)
Linux声音方案
方案概览
ALSA(高级Linux声音体系)是为声卡提供驱动的Linux内核组件,以替代原先的OSS(开放声音系统).这两个是系统发出声音最低层的软件系统,可以视为(或者就是)驱动.
而PulseAudio和ESD是两个声音服务器,简单说,软件要发声就先发消息给声音服务器,然后声音服务器经过处理(主要是多条音频流的混音),然后发给驱动控制声音设备发出声音.
PulseAudio(以前叫Polypaudio)是一个跨平台的,可通过网络工作的声音服务,其一般使用于Linux和FreeBSD操作系统。它可以用来作为一种简易改进的开放声音后台(ESD)替换。PulseAudio是自由软件,基于GNU Lesser General Public License2.1.协议。
PulseAudio是用于POSIX和WIN32系统的声音服务器,声音服务器基本上就是您的声音应用的代理者。当您的音频数据通过您的程序和硬件时,它允许您对音频数据进行高级操作。比如说,把音频传送到别的机器上,改变原始音频的格式或者通道数,以及把几种音频混合在一起。通过声音服务器,这些都可以很容易得到实现。简单来说,PulseAudio负责您系统上的混音和音频回放。它不是声音驱动,事实上,它在ALSA的上层运行。除了PulseAudio提供的那些很cool的音效,它也可以代替ALSA的虚拟混音设备(Dmix插件,也叫dmix)。因此,PulseAudio允许多个程序共同使用您的声卡。
选用pulseaudio+alsa的好处和坏处,好处就是解决混音和声卡独占问题,缺点就是有些软件(极其个别)还不支持
常用软件和命令
pulseaudio ---声音服务器
pac[md|tl|at] ---声音服务器管理
hci[tool|config|attach] ---设备管理(蓝牙)
bluetoothctl ---蓝牙控制台
网易云配合蓝牙音响
方案概览
网易云》pulseaudio》bluetooth》蓝牙音响
具体步骤
- 蓝牙音响连接
#启动声音服务器
pulseaudio -k
pulseaudio --start
#蓝牙连接
sudo bluetoothctl
[bluetoothctl] power on
[bluetoothctl] scan on
[bluetoothctl] pair [B8:D5:0B:8D:10:C2]
[bluetoothctl] trust [B8:D5:0B:8D:10:C2]
[bluetoothctl] connect [B8:D5:0B:8D:10:C2]
[bluetoothctl] scan off
- 声音服务器管理
#列出card
pacmd list-cards
#列出sink
pacmd list-sinks
#过滤列出的内容
pacmd list-sinks | grep -e 'name:' -e 'index'
#设置默认sink
pacmd set-default-sink bluez_sink.B8_D5_0B_8D_10_C2.headset_head_unit
#设置card profile 为 sink(只能作为输出)
pacmd set-card-profile bluez_card.B8_D5_0B_8D_10_C2 a2dp_sink
修改 /etc/bluetooth/audio.conf 配置如下
[Generall]
Enable=Source,Sink,Media,Socket
参考资料:
- A2DP协议 http://blog.sina.com.cn/s/blog_69b5d2a50101elk9.html
- Linux音频架构和测试 http://www.360doc.com/content/15/0921/17/97538_500543275.shtml
- 声音硬件与驱动工作原理 https://blog.csdn.net/g1036583997/article/details/54629612
- 常见问题排查 https://wiki.archlinux.org/index.php?title=Bluetooth_headset_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=cur&oldid=396723&diff=cur&oldid=396723 "https://wiki.archlinux.org/index.php?title=Bluetooth_headset_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=cur&oldid=396723")
- ArchLinux文档 https://wiki.archlinux.org/index.php/Bluetooth_headset_(简体中文) "https://wiki.archlinux.org/index.php/Bluetooth_headset_(简体中文)")