本章介绍如何使用机器人内置的麦克风与扬声器进行音频录制、回放与系统音量控制。内容从环境准备出发,先给出命令行快速操作,再提供三个完整的 Python 可运行示例(系统音量控制、麦克风录音、音频播放),帮助开发者快速搭建音频应用。
环境说明:目前仅应用计算单元支持音频使用,开发音频相关应用需要在该单元上进行。
1.1 环境准备
1.1.1 连接应用计算单元
请先远程连接到应用计算单元:
Bash |
1.1.2 安装系统依赖
以下操作需要先通过机器人可视化应用连接网络。
PLAIN |
可选:国内用户可以通过修改 apt 源为国内镜像以提升安装速度。
Bash |
1.1.3 创建虚拟环境并安装 Python 依赖
假设脚本都在 /home/ubuntu/audio_example(按你实际路径改):
PLAIN |
会生成目录 .venv/。激活虚拟环境并安装依赖:
Bash |
1.2 命令行快速操作
机器人内置麦克风和扬声器可以通过 Linux 命令行工具快速使用,无需编写代码即可完成录音、回放与音量调节。
1.2.1 录制音频
Bash |
1.2.2 回放录制的音频
Bash |
1.2.3 控制系统音量
PLAIN |
1.3 使用 Python 开发音频应用
在命令行快速验证之后,如果需要将音频能力集成到自己的应用中,可以使用下面的 Python 示例。包含三个独立脚本:系统音量控制、麦克风录音、音频播放,均可直接复制运行。
1.3.1 系统音量控制
通过 pactl 命令封装,支持查询和设置系统主音量(0-100)。
文件名:system_volume_example.py
实现说明:脚本封装两个核心函数,通过调用系统 pactl 命令完成音量控制(完整源码见随附的 system_volume_example.py 示例文件)。
| 函数 | 功能 | 实现要点 |
|---|---|---|
get_system_volume() | 获取当前默认音量百分比 | 执行 pactl get-sink-volume 查询默认输出设备,从输出文本中提取第一个百分比值并返回整数 |
set_system_volume(volume) | 设置系统主音量(0-100) | 执行 pactl set-sink-volume,将指定百分比写入默认输出设备 |
命令行参数(基于 argparse):
| 参数 | 说明 |
|---|---|
volume(可选位置参数) | 目标音量,0-100 的整数;不传且未指定 -g 时,默认打印当前音量 |
-g / --get | 仅获取当前系统主音量 |
底层命令(脚本内部实际调用的系统命令,可直接在终端使用):
Bash |
命令行运行:
Bash |
1.3.2 麦克风录音(PyAudio 异步采集)
基于 PyAudio 实现异步麦克风录音,录制结束自动生成 WAV 音频文件。示例包含完整的 Recorder 类,支持异步回调采集、队列缓存、浮点归一化、声道提取和 WAV 文件保存。
核心配置参数:
| 配置项 | 默认值 | 说明 |
|---|---|---|
recorder_device_index | None | 麦克风设备编号,None 使用系统默认 |
recorder_audio_rate | 16000 | 采样率 16000 Hz(语音识别常用) |
recorder_chunk_size | 1024 | 单次采集帧数 |
recorder_channels | 1 | 硬件总声道数 |
recorder_pickup_channels | [0] | 选取的声道索引列表 |
Recorder 类主要方法:
| 方法 | 说明 |
|---|---|
stream_callback | 音频缓冲区满时自动触发的后台回调(独立子线程),进行 int16→float32 转换和声道提取 |
get() | 主线程调用,从队列获取一帧音频浮点数据(最多等待 0.5 秒) |
clear_queue() | 清空队列所有历史缓存音频 |
stop_recording() | 停止音频采集流 |
close() | 释放所有音频硬件资源 |
WAV 文件保存: 录音完成后,通过 save_wav() 函数将浮点音频数组还原为 16 位整型并写入 WAV 文件(16 位音频固定占 2 字节)。
文件名:record_example.py
Python |
命令行运行:
Bash |
执行上述脚本,将开始 10 秒的音频录制,并保存一份 my_record.wav 文件在执行目录下。
1.3.3 播放指定音频
基于 pygame.mixer 实现本地音频文件播放,支持加载、播放、暂停、恢复、音量调节、停止等交互控制。
文件名:play_example.py
Python |
命令行运行:
Bash |
1.4 小结
本章覆盖了机器人音频开发的完整链路:
- 环境准备:SSH 连接、系统依赖安装、虚拟环境与 Python 包安装;
- 命令行快速操作:
arecord录音、aplay回放、pactl音量控制,无需写代码即可验证硬件; - Python 完整示例:三个独立可运行的脚本——系统音量控制、PyAudio 异步麦克风录音、pygame 音频播放,可直接集成到上层应用中。
如需了解更多 ROS2 接口示例(运动控制、LED 控制等),可参考 GitHub 示例代码目录。
