news 2026/9/11 2:50:00

让 Linux 开发板开口说话:从零到语音播报的完整实践(待完善)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
让 Linux 开发板开口说话:从零到语音播报的完整实践(待完善)

1. 缘起:为什么想让开发板开口说话

这篇文章将记录我让 Linux 开发板张口说话的全过程。此片文章是从宿舍桌面助手:从立项到完成的全过程学习记录-CSDN博客引申而来的,专门单开一篇用于记录测试语音播报功能从零开始的实践。

本文会从硬件准备、系统配置、语音合成方案选型,到最终跑通语音播报的完整链路,一步步还原我的实践过程,希望能给同样想折腾的朋友一些参考。

2. 硬件与系统准备

在开始之前,先交代一下我使用的硬件环境:

  • 开发板:正点原子I.MX6UL-MINI。
  • 出厂系统:基于Yocto项目构建的Freescale i.MX Release Distro 4.1.15-2.1.0

    这是一个为嵌入式设备高度定制的精简系统,因此没有apt包管理器,也未预装gcc等开发工具。

  • 内核版本Linux 4.1.15-g3dc0a4b

  • 架构armv7l

  • 外设:USB声卡一个,小音箱一个
  • 软件:MobaXterm操控终端(用其他串口助手也可以,只要能发命令就行),Ubuntu

3. 第一步:确认音频设备可用

让开发板开口说话的第一步,不是写代码,而是先确认音频输出通路是通的。我通过系统命令检查声卡状态,确认 USB 声卡是否被正确识别。

如图用声卡连接好小音箱和开发板

连接好串口,电源,用MobaXterm打开终端(可参考我的嵌入式 Linux 以太网学习笔记:从驱动到应用-CSDN博客)

上电,等待系统初始化完成

在终端中运行以下命令

cat /proc/asound/cards

得到如图结果

这代表识别到了一个设备,序号是0,也可能是1,2,3等

如果能看到声卡设备输出,说明声卡驱动已经正常加载。接着用一条简单的命令测试喇叭是否出声。

测试前可以先运行命令alsamixer,查看音量,得到下图,可以按F6选择声卡设备再用方向键调节音量大小,改好后按ESC即可退出

执行代码以测试音频设备,运行后会听到“前,左,前,右”的英文,且得到下图结果

speaker-test -t wav -c 2 -r 48000 -D plughw:0,0 -l 1

听到提示音,说明音频通路没问题,可以进入下一步。

4. 第二步:选择语音合成方案

音频通路打通后,接下来要解决的是「说什么」和「怎么说」的问题。我对比了几种常见的语音合成方案:

方案优点缺点适用场景
espeak-ng体积小、离线可用、CPU 占用低音质机械感强,中文效果一般资源受限的嵌入式设备
pico2wave离线、音质比 espeak 自然中文支持有限,依赖特定库需要离线播报的简单场景
云端 TTS(如百度、讯飞)音质自然、支持多种音色需要联网、有延迟和费用网络条件好的应用

考虑到开发板资源有限,且我希望完全离线运行,最终选择了espeak-ng作为主力方案。它足够轻量,在 I.MX6UL 这种主频不高的芯片上也能流畅运行。

首先在本机win系统上下好espeak的压缩包,也可直接在Ubuntu上下,我这Ubuntu不好访问GitHub就从win上下载了,地址是https://github.com/espeak-ng/espeak-ng/archive/refs/tags/1.51.1.tar.gz,也可留言私发,随后从win上传输给Ubuntu,我这直接从任务管理器里拖过去了,不管什么方法只要Ubuntu上能识别到即可

运行以下代码解压并进入解压后目录

cd ~/espeak-build tar -xzf espeak-ng-1.51.1.tar.gz cd espeak-ng-1.51.1

5. 第三步:交叉编译与移植

先准备必要的编译工具,

sudo apt update sudo apt install -y autoconf automake libtool pkg-config \ gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf

配置交叉编译

./autogen.sh ./configure --host=arm-linux-gnueabihf --prefix=/usr \ --without-mbrola --without-sonic \ --with-pcaudiolib=no

运行make -j4进行编译

打包编译好的文件

# 创建打包目录 mkdir -p ~/espeak-package/usr/bin mkdir -p ~/espeak-package/usr/share # 复制可执行文件和语音数据 cp src/espeak-ng ~/espeak-package/usr/bin/ cp -r espeak-ng-data/ ~/espeak-package/usr/share/ # 压缩打包 cd ~ tar -czf espeak-package.tar.gz espeak-package/

使用网线连接开发板使用SSH连接开发板以查看目录,详见嵌入式 Linux 以太网学习笔记:从驱动到应用-CSDN博客

通过文件管理器将打包好的文件拖到root目录下

在终端中执行代码

# 进入根目录,因为我们的包解压后结构是 usr/bin 和 usr/share,需要放到 / 下 cd / tar -xzf ~/espeak-package.tar.gz

解压后文件在同级目录下需要将espeak-ng放到指定目录下

如果路径与我的文件一样则可直接执行以下代码

# 复制可执行文件到 /usr/bin cp /home/root/espeak-package/usr/bin/espeak-ng /usr/bin/ # 复制语音数据到 /usr/share cp -r /home/root/espeak-package/usr/share/espeak-ng-data /usr/share/ # 添加执行权限 chmod +x /usr/bin/espeak-ng

此时espeak-ng程序会被解压到/usr/bin/,数据文件到/usr/share/espeak-ng-data/

接下来就可以开始测试了,可以执行以下代码

espeak-ng -v zh "你好,开发板" --stdout | aplay -D plughw:0,0

系统烧录完成后,在开发板上验证 espeak-ng 是否可用,测试中文播报效果。

如果喇叭里传出「你好,我是你的开发板」,恭喜,开发板已经成功开口说话了。

6. 第四步:用 Python 封装语音播报

7. 进阶:结合传感器做语音告警

8. 踩坑记录与注意事项

整个过程中我也遇到了一些问题,这里记录下来供大家参考:

9. 总结与后续计划

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 13:42:48

STM32WB5MM-DK手册引脚错标:PE3实为PE4的排查与避坑

前段时间调一块 STM32WB5MM-DK 开发板,碰到一个让我折腾了一下午的怪问题。这块板子是 ST 官方为 STM32WB5MM 模块做的评估套件,双核无线 MCU、BLE、802.15.4 这些功能都齐全,我当时在调一路外设信号,按用户手册把线引到 CN4 扩展…

作者头像 李华
网站建设 2026/9/4 14:50:42

Manus独立运营背后:AI Agent工程化的挑战与应对

“一夜回到创业状态”——如果这句话是一个普通创业者的感言,可能只是情绪;但当它出现在 Manus 这样已经被市场记住的 AI 产品身上,事情就变得值得认真拆解了。Manus 宣布独立运营,很多人第一反应是关心“团队是不是散了”“产品还…

作者头像 李华
网站建设 2026/9/4 8:56:46

WinForm自定义打印设计工具:从可视化设计到动态数据绑定

简介:本资源是一套基于Windows Forms的C#自定义打印设计工具完整实现方案,面向.NET桌面应用开发者,解决报表生成、文档动态排版与二维码嵌入等实际打印需求。资源包含563个文件,主体为42个核心C#源码文件(含PrintDocum…

作者头像 李华
网站建设 2026/9/3 12:26:45

智慧烧结过程调控模型:机理驱动的低碳动态控制

简介:本资源是面向2026年河北省研究生数学建模竞赛A题参赛者的高阶备赛套件,专为突破建模瓶颈、冲刺特等奖的队长与主攻手设计,尤其适合需高质量底层代码支撑的编程新手及追求论文规范性与逻辑深度的精英团队。压缩包共62个文件(5…

作者头像 李华