产品概述

单片机说话 初学单片机,单片机“说话”的具体实现(一)制作数据文件

小编 2024-11-23 产品概述 23 0

初学单片机,单片机“说话”的具体实现(一)制作数据文件

昨天我们谈到了用单片机播放语音的一种原理,今天继续分析实现的方法。

听说单片机会说话,说来听听趣图

昨天文末总结了一句话:“按照记录数据的速度还原记录的数据”,那么这里面包含两个参数:时间和数据。

时间:指的是采样率 。一般有很多种,我们这里为了方便,采用8000Hz。就是说每秒均匀输出8000次数据,表现在波形上就是阶梯型的。单位台阶的宽度就是125微妙。这个将由定时器来设定。

数据:指的是声音的幅度(电平值) 。标准的输出是模拟量的电平值,我们选择8位的。

假如数据文件里有3个数据值分别是“0,128,255”,那么当单片机系统板输出信号电平的最大值是5V时,对应的信号电平值是:“0v,2.5v ,5v”。(5v / 256 * 128 = 2.5v)

第一个问题,如何得到数据文件?

在各种音频格式文件中,wav格式文件是最容易读取的,我们需要先得到声音的wav文件。

声音的内容可以是一段音乐,也可以是一段语音。

可以利用“语音生成软件”制作一段语音文件,也可以直接采用录制好的或者已有的音频文件。

首先利用音频编辑软件(例如GoldWave)对其进行格式转换,把格式转换成“wave PCM,8位,mono(单声道)”格式。

由于单片机的容量相对于语音文件显得不够宽裕,就需要剪辑出一段文件来,把多余舍弃。例如前面我们采用的STC15W408AS单片机的程序空间是8K,那么留给程序一些空间,剩下的作为语音文件的空间。

转换方法很简单,用GoldWave打开文件,然后点“File”、“Save As”,弹出的对话框最下面选择格式,如下图:

语音文件格式转换截图

上面转换后的语音文件占用了6K多字节,却只有“春天说”三个字。

接着用UltraEdit软件打开刚才的数据:

文件分析截图

上图中可以看出我们首先在地址0x0023h以后找到“data”(64 61 74 61),然后把后面的4位中的有效值“0x1900”作为数据的长度(length),(注意:在文件里显示的多字节数是低位在前,高位在后。)紧接着的“80 80 80”这些都是8位的数据代码。有些音乐文件在“data”之前有一些附加信息,因此“data”的位置不是固定的。我们可以删除前面不用的内容,也可以保留备用。

到这里数据文件就准备好了。关于第二个问题:“如何输出模拟量电平?”我们下次再分析。

今天我们聊了实现单片机“说话”的准备工作——制作数据文件,后面我们再继续聊如何用单片机输出语音,感谢您的阅读,如果感兴趣,欢迎关注头条号/春天说,也欢参与评论交流,下次见。。。

初学单片机,听见说话不见人,设计电路存语音

语音芯片大家都不陌生,最早的像门铃,生日快乐歌等等,虽然它的设计原理我们不清楚,但是我们能够自己设计自己的语音内容。

昨天我们介绍了如何把一段语音文件转换成单片机编程用的头文件,今天我们就用它来设计一个简单的语言播放小板,也就是“单片机说人话”。我们可以用它来做很多事情,而且成本非常低廉。

谁在说话?——正文配图

前面我们制作“电子琴”的时候做了一个小板,今天我们把它稍微改一下,用来播放语音。

改动三个地方:

把原来的三极管基极断开;

对地加一只0.1uF的电容,接到原来连接三极管的电阻上;

在电容两端接上插座,或者直接引线出来,接耳机,或者小功放输入端。

如下图所示:

“电子琴”电路改装图

电路改好后,需要编写程序。

前面我们说过,wav文件记录的两个重要内容,一是采样率,我们选的8000Hz;二是电平值,我们已经制作成表格文件;

那么下来,我们主要是按照一定的时间还原这些电平。

最方便的方式无疑是PWM方式输出波形。由于时间有限,关于PWM的原理今天我们不去讨论,况且相关资料也是非常多。今天我们直接给大家介绍程序的编写。

前面我们制作的板子采用的是STC15W408AS芯片,因为想利用焊接好的端口(P2.6),不想过多改动,那么先看器件手册关于端口的设置:

器件手册局部截图

运气还好,刚好可以设置为P2.6端口输出,需要用到CPP1_3。

增加0.1uF电容是为了把PWM输出的高频脉冲滤波,平滑波形。为什么不用无源蜂鸣器呢?因为蜂鸣器声音频域太窄,影响音质,我们既然播放语音,就要音质好一些,所以建议用耳机或小功放还原声音。(注:蜂鸣器也可以清楚的辨析语音内容。)

c51源代码:

由于编译好的代码较大(语音表格原因),头条平台不方便下载,所以需要自己建立工程,新建c文件和昨天介绍的头文件。

注意事项:

下载时选择内部时钟为12.288MHz;

h文件也要添加到工程;

制作的音频文件不要大与芯片容量;

制作中单片机的分频设置不正常(当然没有影响到正常使用),如果您采用别的系列试验,欢迎反馈设置情况。

下面是c51程序(如果需要,可以自己添加按键控制):

《单片机说话》c51源程序截图

下面是头文件(制作方法请参考前面文章):

《单片机说话》c51头文件源程序截图

制作完成后,用耳机听音质满意,用功放播放低音较重,下面是小功放播放录音:

补充说明:

如果只是简单试试,可以不断开三极管,用蜂鸣器,但对地电容一定要加;

采样率也可以用6000Hz甚至更低,文件会更小,但高音会降低;

录音是放了两遍,实际只有三个字:“春天说”;

以上就是单片机内置语音的一种实际操作方法。

今天我们介绍了自制单片机语音电路的编程实例,如果您感兴趣,可以添加头条号/春天说,查看前面的系列文章,同时欢迎参与评论留言,交流不同的想法和思路,如果喜欢,也欢迎分享给更多朋友。。。

相关问答

如何用 单片机 判断声音的方向?

试试用四个驻极体话筒朝向四个不同的方向,当然八个话筒更好,话筒把接收到声压信号转换为电信号后再通过运算放大器放大整形后由单片机的ADC按通道进行扫描采样...

怎样编写 单片机 STC11语音控制程序?

使用语音识别模块,编写单片机程序时,可以根据模块提供的协议编写即可。在线语音识别百度AI开放平台、科大讯飞AI开放平台....离线语音识别LD3320、科大讯飞...

上位机怎样实时检测 单片机 所测数据?

这个很简单,花个几十块钱买个蓝牙收发模块就行。单片机有串口就行,接串口蓝牙小电路板,上位机手机进行搜索连接。不过你需要进行二次开发,手机端需要开发蓝牙...

如何学习手机编程?

单片机和嵌入式一般学C语言吧。手机变成一般是android和ios(object-c).系统开发一般都学C++吧,网页网站一般都学java,javaWeb,javaScript,php吧,数据库可以学...

自己怎么制作蜂鸣器?

如果声音质量要求不高,比如市面上那种生日贺卡发出的蜂鸣声,只有音高变化即可的话,用单片机就行了,把乐谱写成数组,写程序按照乐谱输出对应音高频率的方波给...

准备学习C, 想知道HTML, CSS, JS, Ajax, JAVA, C是做什么的?

首先,1、得想好自己想进入那个领域,首先,c语言是许多高级计算机语言的基础,学好c语言能更好的学习其他高级语言,为以后的学习打好基础,应用范围广泛,具备...

计算机c语言如何学习?

做项目,学习的唯一手段是实践,并且对于C语言,你一定首先要放弃国内老谭的教材,不为别的,那书根本就不是标准C,而且是老谭压根不会写C的多少年前写的东西。...

C语言怎么才能学会?

C语言是一种通用的计算机编程语言,广泛用于系统软件与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言...

对讲门铃室内机使用方法是什么?_住范儿家装官网

另一个按钮一般是呼叫管理中心,呼叫管理中心机,管理中心机提机可以通话,或者是报警键,按下去,接警机可以显示你家的楼栋和房号,如果是小区联网的就...

猜你喜欢