2002年在首钢实施焦炉四大机车自动化项目的时候,为了使系统更加友好,便增加了语音提示功能。不过控制设备是PLC,所以语音模块是通过IO进行控制的。接触WAV解码,是在2009年,为TI DM355平台移植.NET Micro Framework系统,同事进行驱动移植,我封装上层C#接口,不过那时候技术有限,封装的接口只能同步播放。

当前市场上的语音模块一般分两种,一种是可录音的模块,录上音,触发一下,就可以播放。另外一种就是烧录WAV文件(或其它自定义格式的语音数据)。前者往往很难做到分段录音分段播放,而后一种,由于是部署文件,所以相对容易的分段控制。控制方式一种是IO方式,另一种就是串口发命令控制。

最近和一个朋友合作开发一个医疗上的上肢康复设备,需要用到语音提示功能。最初想到的也是采用语音模块控制,便花了一百多元购买了两个语音模块进行研究,语音模块虽然有些小贵,但是价格和音质还可以,既可以用IO控制,也可以通过RS485发指令控制。不过朋友感觉外接一个模块的方式不大好,建议加一个解码芯片或PWM驱动控制。

因此便开始研究语音控制技术,由于.NET Micro Framework已经支持了DA输出功能,而STM32芯片时钟中断功能也比较强大,所以就尝试做WAV解码。没有想到实际做出的效果竟然非常好,特别是用外接音箱播放的时候,几乎可以媲美一些播放器的音质。

系统直接支持语音播放,可以非常方便实现各种功能,比如做一个报时功能,由于可能在任一个时间要求报时,所以不可能像整点报时一样,做20多个语音文件到时播放即可。更好的做法就是把各个语音分成单元,到时候用程序控制拟合播放。不仅仅是报时,如电子秤称重报数、计算器语音报时、智能家居控制中的智能提示,都需要语音。并且由文件系统支持,100多兆字节的存储空间,可以存放很多语音文件。不像一些语音模块,存储空间都是比较有限的,比如我采购的那款价格相对较高的语音模块,存储空间才8M。

下面我以一个WAV播放器为实例,介绍WAV播放类库的使用。

第一步:准备WAV声音文件

我们可以借助一些声音转换工具,把常见的MP3格式的文件转换为WAV格式的文件。比如GoldWave软件,声音文件最好重新采样,建议速率为16000Hz(最好不要大于44100Hz),如下图所示:

保存的格式,建议为:PCM unsigned 8bit,mono。16位、双声道播放(需要两路DA),WavPlay函数也是支持的,不过感觉没有必要,一是文件会增大几倍,但是音质改善并不大。

第二步:把WAV声音文件下载到文件系统

如果WAV文件不大,把WAV文件作为资源文件(WAV文件添加资源的时候,要修改扩展名,以二进制资源的方式加入)也是可以的,WavPlay函数可直接播放字节数组数据。但是对一些比较大的WAV文件,如一首歌曲,一般就得3M Byte左右的大小了,是不能添加到资源中去的。

我们还是用在博文《Html5:Canvas+WebSocket实现远程实时通信》中介绍的YFFileViewer工具,参见下图。

第三步:设计播放界面

我们采用YFSoft.WinForm库进行界面编写(WinForm相关博文,请参见《WinForm for .NET MF 功能一览》)。界面设计,我们还是先用桌面版的程序进行设计,设计好后,把代码加入.NET Micro Framework工程。

第四步:播放代码编写

(1)       枚举文件系统根目录下所有的WAV文件

string[] files = Directory.GetFiles("\\ROOT");   foreach (string file in files)   {        if (file.Substring(file.Length - 3, 3).ToLower() == "wav")        {             listBox1.Items.Add(file);         }   }

(2)       播放和停止播放

 private void button1_Click(object sender, EventArgs e)    {             WavPlay.Play(listBox1.Text,true);         tm.Enabled = true;         progressBar1.Value = 0;         button1.Enabled = false;         button2.Enabled = true;   }    private void button2_Click(object sender, EventArgs e)    {         WavPlay.Stop();         tm.Enabled = false;         button1.Enabled = true;         button2.Enabled = false;   }

 WavPlay库下载:http://www.sky-walker.com.cn/MFRelease/library/v42/YFSoft.WavPlay.rar

示例源码下载http://www.sky-walker.com.cn/MFRelease/Sample/YFWavPlay.rar

程序运行后界面如下:

注:DA输出可以接音箱,也可以接耳机,不过直接驱动扬声器,则声音有些小,需要加一个功放模块(可以单击这里,购买功放+喇叭套件)。

目前紫藤207平台已经支持屏幕横竖屏切换了,系统启动的时候,先检查是不是竖屏,如果不是,则自动切换(YFAccessFlash工具也可以配置横竖屏模式),相关代码如下:

//检查LCD是否竖屏显示模式

YFStream.Utility.LCD_ViewMode mode = YFStream.Utility.Instance.GetLcdMode();  if (mode != YFStream.Utility.LCD_ViewMode.Portrait)  {          YFStream.Utility.Instance.SetLcdMode(YFStream.Utility.LCD_ViewMode.Portrait);          //重启系统
         Microsoft.SPOT.Hardware.PowerState.RebootDevice(false);          Thread.Sleep(Timeout.Infinite);  }

实际的运行效果如何,请看相关视频:

播放链接:http://v.youku.com/v_show/id_XNDgwODgyOTky.html

-----------------------------------------------------------------

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF资料:http://www.sky-walker.com.cn/News.asp?Id=25

相关硬件: http://www.sky-walker.com.cn/Products.asp?Id=24

【物联网智能网关-15】WAV播放器(WinForm+WavPlay库实例)相关推荐

  1. 【物联网智能网关-08】TinyGUI和WPF汉字显示技术比较

    TinyGUI是我在2010上半年的时候,基于.NET Micro Framework系统开发的一个轻量级图形库,虽然TinyGUI运行需要的资源少,运行快,但是不支持汉字显示(如需显示汉字还是必须借 ...

  2. 我的HIFI WAV 播放器设计之二电路图数字电路部分

    四.电路图设计细节说明 电路原理图之一微处理器数字电路部分 数字处理部分SCH图纸一,数字部分分成以下几个部分:微处理器部分.时钟电路.SD卡电路.液晶显示屏电路.红外接收及按钮控制部分.供电部分.与 ...

  3. kodi 解码器 android,智能电视最强播放器—KODI常见使用技巧全方位解读

    智能电视最强播放器-KODI常见使用技巧全方位解读 2019-10-10 15:19:22 880点赞 9854收藏 510评论 现在智能电视/盒子应该是各家各户的标配,其实智能电视本身在配置和解码能 ...

  4. 工业4.0时代,您需要的是高性价工业物联网智能网关(超高性价比),PLC远程监控,PLC远程维护,系统数据采集,一个都不能少。

    www.maiside.cn www.maiside.top 如何实现智能制造? 第一步能够完成生产过程的自动化,第二步将生产过程中的数据实时上送到MES.ERP.EAM.大数据分析系统.设备远程运维 ...

  5. 【物联网智能网关-02】获取摄像头数据+显示

    在上一篇文章<通过AD采集获取温湿度>我们介绍了物联网智能网关的AD端口的使用情况,AD接口是.NET Micro Framework标准库函数之一,只要底层BSP支持就可以直接使用.但是 ...

  6. 物联网智能网关应用系统的一般设计方法

    随着互联网的日益普及.信息共享程度的要求不断提高,各种家电设备.仪器仪表以及工业生产中的数据采集与控制设别在逐步走向网络化,以便利用庞大的网络资源,实现分布式远程监控.信息交换与共享.物联网的发展更是 ...

  7. 自定义播放器 winform

    自定义播放器 winform 分两个模块 一个是用于显示视频的 一个用于显示控制按钮的 完成上下结构 引入panel面版 设置显示模式 让一个面板置底 让另一个面板全屏 引入媒体播放控件 设置显示模式 ...

  8. BHIOT-833物联网智能网关

    物联网网关可以实现感知网络与通信网络,以及不同类型感知网络之间的协议转换.既可以实现广域互联.也可以实现局域互联. 简单的来说,有了网关,所谓的 M2M 不再是狭义上机器与机器的对话,而是设备.系统. ...

  9. 【物联网智能网关-01】通过AD采集获取温湿度

    无论是机房管理系统,还是面向农村温室大棚的管理系统,温湿度采集模块是必不可少的.常见的温湿度模块从通信接口上来说,一般有三种,第一种是单总线方式(我以前写了两篇博文来介绍这方面的内容<DHT11 ...

最新文章

  1. 皮一皮:浓浓的父爱...
  2. Apache Tomcat 曝文件包含漏洞:攻击者可利用该漏洞读取webapp目录下的任意文件...
  3. python语法教程-Python语言的核心语法(1)(语法教程)(参考资料)
  4. 建立索引要考虑的因素
  5. LeetCode 500. Keyboard Row
  6. 【MySQL】ERROR 1412 (HY000) Table definition has changed, please retry transaction
  7. 04. 替换空格(C++版本)
  8. 云数据中心呼唤安全可控的运维和检测
  9. 深度XP完美精简版 (适合低配置电脑)——迅雷
  10. gaster字体转换器_gaster语言翻译器
  11. Ardunio开发实例-WS2812B独立寻址LED调色调光
  12. 记小程序uniapp 语音播放
  13. 开源网络情报系统释放数据黄金价值
  14. cns服务搭建+手机ml,百度直连
  15. Dynamics 365Online 如何在手机app端获取当前位置的GPS信息
  16. raw格式(裸数据)格式文件读写
  17. 迅雷 5.8.14.706 收藏版
  18. 搜索计算机无法输入法,Windows10左下角搜索框无法输入字符的两种解决方法
  19. RISC-V双周报1.12-1.26
  20. DSP的GEL文件详解

热门文章

  1. 开源 java CMS - FreeCMS2.6 互动信件
  2. jQuery ajax 传递JSON数组到Spring Controller
  3. Resharper的使用
  4. wds和dhcp分开做需要注意问题
  5. 【转】大端模式与小端模式、网络字节顺序与主机字节顺序 (经典)
  6. Web Office 常见问题解决方法
  7. Oracle日期处理
  8. IntelliJ IDEA导入多个eclipse项目到同一个workspace下
  9. 【转载】linux环境变量PS1的简介
  10. Visual C++ 2010 使用心得 和帮助文档问题