开启辅助访问 切换到窄版

打印 上一主题 下一主题

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

[复制链接]
作者:Iq37di7 
版块:
程序员交流 招聘&找工作 发布时间:2018-6-25 21:22:27
14680
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天我们谈到了用单片机播放语音的一种原理,今天继续分析实现的方法。

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

  • 时间:指的是采样率。一般有很多种,我们这里为了方便,采用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”的位置不是固定的。我们可以删除前面不用的内容,也可以保留备用。
到这里数据文件就准备好了。关于第二个问题:“如何输出模拟量电平?”我们下次再分析。
今天我们聊了实现单片机“说话”的准备工作——制作数据文件,后面我们再继续聊如何用单片机输出语音,感谢您的阅读,如果感兴趣,欢迎关注头条号/春天说,也欢参与评论交流,下次见。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表