历史上的今天
今天是:2026年01月04日(星期日)
2023年01月04日 | 单片机语音播报怎么做?语音模块原理及程序编写思路
2023-01-04 来源:zhihu
我最欢就是做带语音播报的产品,写程序的过程太枯燥了。
有些产品一开发就是几个月,整个过程都跟冷冰冰的LED、蜂鸣器、按键、LCD屏打交道难免有些寂寞。
加上语音就不同了,录制好一个好听的妹子声音,不但可以提升整个产品的逼格,自己也满满的成就感。
今天就来聊聊带语音的产品怎么做。
实际产品中,用单片机播放语音方案有很多种,唯一没有开发板那种,因为成本各方面都不满足产品需求。
另外就是加一个语音芯片,如果利润高的产品会优先使用这种,一个几块钱还能接受。
还有就做软解码的,就是把语音文件解码成喇叭能够识别的PWM和DAC数据,这种技术难度最大,对工程师编程水平是一个考验。
虽然难度大,但是成本低,不需要额外增加语音芯片,老板的最爱,反正工程师掉点头发对公司又没影响。
软解码大概在6,7年前做电子狗的时候玩过一次,大概原理就是把语音文件合并成bin文件,烧录到外置的flash里面,做好每条语音的地址映射。
用单片机读取Flash的数据并解码,然后转换成PWM或者DAC经过功放输出到喇叭。
这种一般要有个写上位机的配合,以前市面上没有在把语音文件合并成bin文件的工具,现在好像有了。
时间相隔太久,很多细节记不清楚了,后续如果还能找到资料再跟大家分享。
今天无际单片机编程给大家讲后面我做过的一种方法:用语音芯片。
这是语音芯片的一些介绍:

我们需要关注的就是,这个芯片对语音长度的支持分别有55s、25s、85s,如果产品语音少还是挺合适的。
这种芯片如果语音少的直接用芯片内部的Flash,如果语音多了就需要外挂一个Flash来存储语音数据。
一般每个产品的语音都是不一样的,那怎么把我们想要的语音通过这个语音芯片播放出来呢?
想实现这个功能要经过以下几个步骤:
1. 通过软件把语音文案转成mp3格式语音文件,类似的软件有很多,比如说科大讯飞。
2. 把语音文件提供给芯片方,让他们帮你定制。
3. 拿到样品后就是焊接到自己板子上,然后根据芯片规格书写控制时序程序,每条语音都对应了一个地址,只要把地址数据写入芯片,芯片就会自动播放指定语音。

整个过程是不是非常简单?
除了播放语音功能以外,还有一些附加功能,比如说静音,音量调节、循环播放等等。

下面来看下芯片的引脚定义

一般使用3根线来跟单片机通讯。

PA0/SDA:数据线
PA1/SCL:时钟线
PA2:忙碌线,当有语音播报的时候,该引脚为低电平。
芯片的控制时序如下:

不难发现,数据开始之前SCL需要先产生5ms的低电平同步头,然后数据在SCL线的上升沿被读取,一共读取8位,也就是1个字节。
如果你不会写这个时序也没关系,芯片原厂都有提供例程。
史海拾趣
|
一、输入阻抗 输入阻抗是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。 输入阻抗跟一个普通的电抗元件没什么两样 ...… 查看全部问答> |
|
在移植完uboot1.1.6后,除了网络功能其它都没问题了 可是现在ping不通,也就不能使用tftp 板子上是DM9000AEP芯片,网友说是uboot自带驱动与AEP并不兼容 请问一下如何修改驱动以使DM9000AEP 芯片正常工作? 谢谢,祝好!… 查看全部问答> |
|
各位大哥: 最近在做i2c的设备驱动程序。在网上找了些资料。针对自己的设备写了一个驱动程序。但编译不过去。 提示variable \'ds2746_driver\' has initializer but incomplete type. unknow field \'o ...… 查看全部问答> |
|
市场调研公司公布2006年全球半导体供应商排名,ST稳坐第五 在iSuppli研究的250家半导体公司中,有190家或76%在2006年实现成长。其中,128家的销售额实现了两位数的增长。在五大半导体供应商中,除了英特尔以外,2006年都超过了半导体市场的平均增长率,至少增长了11%。… 查看全部问答> |
|
DS18B20_writeonechar(0x33); for(b=0;b<8;b++) { a= DS18B20_readonechar(); } &nb ...… 查看全部问答> |
|
ULN2003A中COM端为啥可以悬空?可以接高电平吗?接高电平时可以接多大的电压?COM端与各输出端之间的反向二极管起什么作用?当COM端悬空时,该二极管还能发挥作用吗?… 查看全部问答> |




