本篇指导性文章旨在介绍借助英特尔® Edison 开发板获取和播放声音的不同方法。
在此我们仅介绍环回方法,因为这类方法的交互性更强 ,而且能够令 Edison 开发板的表现无异于一台互联设备。
如果用户希望回放声音文件,必须使用通过蓝牙连接的 基于外部 A2DP 的播放器。
本文将介绍三种方法:
- 从 USB 耳机并通过该耳机环回音频
- 通过 USB 声音设备环回 A2DP 流
- 将 A2DP 流环回至 A2DP 远程设备
要求
硬件:
- 带有基于 Arduino 的扩展版的英特尔 Edison 开发板
- USB 音频设备(最好是 USB 耳机)
- A2DP 设备,用于将音频发送至开发板(比如智能手机)
- A2DP 设备,用于播放开发板的音频(比如蓝牙扬声器)
软件:
或者 2015 年之后生产的映像。
从 USB 耳机并通过该耳机环回音频
分步指南
1. 将 SW1(主 USB 和迷你 USD 端口之间)移动至离迷你 USB 端口最近的位置,以激活 USB 托管模式。 使用这种模式时需要用到外部电源。
2. 插入 USB 耳机。
3. 检查设备是否安装正确:
root@edison:~# cat /proc/asound/pcm 00-00: Loopback PCM : Loopback PCM : playback 8 : capture 8 00-01: Loopback PCM : Loopback PCM : playback 8 : capture 8 01-00: USB Audio : USB Audio : playback 1 : capture 1
在本示例中,插入 USB 耳机后,您将看到多台由该 USB 设备连接的回放和捕捉设备。
root@edison:~# pactl list | grep Name | grep usb Name: alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo Name: alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo.monitor Name: alsa_input.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-mono Name: alsa_card.usb-JABRA_Jabra_BIZ_620_USB-00-USB
4. 将 USB 捕捉设备环回至 USB 回放设备。
借助 pulseAudio 模块 "module-loopback"可实现环回音频流。
该环回模块需要根据您的设备名称进行加载和配置:
pactl load-module module-loopback source=<name of your source device> sink=<name of sink device>
例如:
root@edison:~# pactl load-module module-loopback source=alsa_input.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-mono sink=alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo
5. 对准麦克风说话,检查耳机端的声音。
通过 USB 声音设备环回 A2DP 流
分步指南
1. 将 SW1(主 USB 和迷你 USD 端口之间)移动至离迷你 USB 端口最近的位置,以激活 USB 托管模式。 使用这种模式时需要用到外部电源。
2. 插入 USB 耳机。
3. 检查设备是否安装正确:
root@edison:~# cat /proc/asound/pcm 00-00: Loopback PCM : Loopback PCM : playback 8 : capture 8 00-01: Loopback PCM : Loopback PCM : playback 8 : capture 8 01-00: USB Audio : USB Audio : playback 1 : capture 1
在本示例中,插入 USB 耳机后,您将看到多台由该 USB 设备连接的回放和捕捉设备。
root@edison:~# pactl list | grep Name | grep usb Name: alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo Name: alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo.monitor
4. 连接您的 A2DP 播放设备(比如智能手机),并通过解锁本地 BT 设备检查该设备是否 以源设备列于 pulseaudio 之中:
root@edison:~# rfkill unblock 2
现在,发现/信任/配对/连接您的远程 A2DP 设备,其 mac 地址为 BTADDR:
root@edison:~# bluetoothctl [bluetooth]# scan on [bluetooth]# trust BTADDR [bluetooth]# pair BTADDR [bluetooth]# connect BTADDR [bluetooth]# scan off [bluetooth]# exit
检查脉冲音频是否识别您的 A2DP 设备,并获取设备的源名称(从 "bluez_source"开始):
root@edison:~# pactl list sources | grep bluez_source Name: bluez_source.88_C9_D0_51_C6_AE
注意:BT edison 名称默认为 "BlueZ 5.24",因此,该名称可能出现在您的播 放器设备中。 请查看信息,进行名称修改。
5. 将 A2DP 源设备环回至 USB 回放设备
root@edison:~# pactl load-module module-loopback source=bluez_source.88_C9_D0_51_C6_AE sink=alsa_output.usb-JABRA_Jabra_BIZ_620_USB-00-USB.analog-stereo
6. 在远程设备上播放声音,并检查耳机端的音频
将 A2DP 流环回至 A2DP 远程设备
分步指南
1. 连接 A2DP 播放器设备(比如智能手机)和 BT 扬声器,并查看 pulseaudio 中是否包 含这些设备:
root@edison:~# rfkill unblock 2
现在,发现/信任/配对/连接您的远程 A2DP 设备,其 mac 地址为 BTADDR:
root@edison:~# bluetoothctl [bluetooth]# scan on [bluetooth]# trust BTADDR [bluetooth]# pair BTADDR [bluetooth]# connect BTADDR [bluetooth]# scan off [bluetooth]# exit
检查脉冲音频是否识别您的 A2DP 设备,然后获取两台设备的源和接收名称。
root@edison:~# pactl list | grep bluez Name: bluez_source.88_C9_D0_51_C6_AE Name: bluez_sink.00_1D_DF_89_12_8E
注意:BT edison 名称默认为 "BlueZ 5.24",因此,该名称可能出现在您的播 放器设备中。 请查看信息,进行名称修改。
2. 将 A2DP 源设备(智能手机)环回至 A2DP 接收设备(BT 扬声器)
root@edison:~# pactl load-module module-loopback source=bluez_source.88_C9_D0_51_C6_AE sink=bluez_sink.00_1D_DF_89_12_8E
3. 在远程设备上播放声音,并检查 BT 扬声器的音频。
您可以在 /etc/bluetooth/main.conf中修改蓝牙控制器的名称。
取消 “Name” 属性的注释,并在 [general] 部分设置名称:
[general] ... # %d - substituted for adapter id # Defaults to 'BlueZ' Name = Edison
然后重新启动蓝牙服务,并检查控制器名称:
root@edison:~# systemctl restart bluetooth root@edison:~# bluetoothctl
[NEW] Controller 98:4F:EE:02:00:6A Edison [default]
故障排除
- 经常检查蓝牙是否受阻。 大多数时候连接受阻,必须疏通以重新开始连接。
- 如果适用,请参阅常见问题解答和支持页面,以及论坛发帖。