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

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

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

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

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

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

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

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

第一步:准备WAV声音文件

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

image.png

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

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

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

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

image.png

第三步:设计播放界面

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

第四步:播放代码编写

(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 voidbutton1_Click(object sender, EventArgs e)

  {    

       WavPlay.Play(listBox1.Text,true);

      tm.Enabled = true;

      progressBar1.Value = 0;

      button1.Enabled = false;

       button2.Enabled = true;

 }

  private voidbutton2_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_ViewModemode = 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

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
人工智能 监控 物联网
深度探索人工智能与物联网的融合:构建未来智能生态系统###
在当今这个数据驱动的时代,人工智能(AI)与物联网(IoT)的深度融合正引领着一场前所未有的技术革命。本文旨在深入剖析这一融合背后的技术原理、探讨其在不同领域的应用实例及面临的挑战与机遇,为读者描绘一幅关于未来智能生态系统的宏伟蓝图。通过技术创新的视角,我们不仅揭示了AI与IoT结合的强大潜力,也展望了它们如何共同塑造一个更加高效、可持续且互联的世界。 ###
|
1月前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
97 7
|
1月前
|
传感器 存储 运维
智能物联网:LoRaWAN技术在低功耗广域网中的应用
【10月更文挑战第26天】本文详细介绍了LoRaWAN技术的基本原理、应用场景及实际应用示例。LoRaWAN是一种低功耗、长距离的网络层协议,适用于智能城市、农业、工业监控等领域。文章通过示例代码展示了如何使用LoRaWAN传输温湿度数据,并强调了其在物联网中的重要性和广阔前景。
100 6
|
1月前
|
传感器 数据采集 监控
数据采集器和物联网网关的区别
数据采集器主要用于从各种数据源收集数据。这些数据源可以是传感器(如温度传感器、压力传感器等)、仪表(如电表、水表等)或者其他具有数据输出功能的设备。物联网网关是连接感知层(包含各种传感器和数据采集设备)和网络层(如互联网、局域网等)的关键设备。
64 4
|
1月前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
69 4
|
1月前
|
传感器 监控 物联网
智能物联网:LoRaWAN技术在低功耗广域网中的应用
【10月更文挑战第27天】LoRaWAN技术是低功耗广域网(LPWAN)的重要代表,以其远距离通信、低功耗和低成本部署等优势,广泛应用于智能城市、农业监测和环境监测等领域。本文介绍LoRaWAN的工作原理及其实际应用,并提供示例代码展示如何使用LoRaWAN进行数据传输。
63 2
|
1月前
|
数据采集 传感器 监控
与传统的物联网相比,IIoT 智能化有何特点
IIoT(工业互联网)相较于传统物联网,其智能化特点主要体现在:更强大的数据处理能力、更精准的实时监控与预测分析、更高的安全性和可靠性,以及更深度的行业应用集成,推动了智能制造和工业4.0的发展。
|
29天前
|
存储 边缘计算 物联网
揭秘边缘计算:物联网时代的分布式智能
揭秘边缘计算:物联网时代的分布式智能
45 0
|
1月前
|
物联网 智能硬件
物联网技术:连接智能生活的桥梁
物联网技术:连接智能生活的桥梁
|
1月前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第27天】随着物联网技术的快速发展,智能设备已广泛应用于生活和工业领域。然而,物联网设备的安全问题日益凸显,主要威胁包括中间人攻击、DDoS攻击和恶意软件植入。本文探讨了物联网设备的安全防护策略和最佳实践,包括设备认证和加密、定期更新、网络隔离以及安全标准的制定与实施,旨在确保设备安全和数据保护。
70 0

相关产品

  • 物联网平台