NAudio 使用心得

一直作得比较多的是Web,客户端一直接触的比较少,如今由于组内有历史产品是用Winform写的,在开发过程当中遇到些坑介绍下。
想看NAudio使用介绍的同窗能够直接跳到方案二html

应用背景和需求:

Winform中嵌套了webbrowser用来显示聊天信息,Winform用计时器主动拉服务器新消息后直接生成html添加到webbrowser。html5

如今从服务器获取的消息类型中增长了语音类型。语音类型消息为json格式,包含语音文件url地址、语音长度、智能翻译信息。web

实现思路:

方案一、直接在webbrowser中生成html5 audio标签,使用浏览器的播放功能

方案二、在webbrowser中生成连接,使用window.external.XXXXX调用Winform程序内的组件播放语音

方案一尝试过程

webbrowser的内核默认使用的是最低版本的IE,也就是IE六、7,众所周知对html5是妥妥不支持的。chrome

好在原来接触过第三方插件html5media.js,在低版本IE的状况下,能够将audio标签替换成object标签,并使用内置的Flowplayer Flash插件进行播放,通过测试,低版本IE果真是支持的。json

部署方法:直接在webbrowser头部增长对html5media.js的引用,注意:内网环境须要本身下载插件部署到本身的服务器上,不能直接使用官网CDN的地址。安装方法就是无脑拷贝整个文件夹过去就好了,不要遗漏了内置的flowplayer.swf等组件。浏览器

在IE中先测试运行,直接报沙箱错误,没法访问flowplayer.swf,搜索了一下,把本地测试文件部署了IIS测试站点,访问正常了,找了一个MP3文件能够完美播放。服务器

因为公司的语音文件格式是aac的,因此我拿实际语音文件测试,发现flowplayer不能支持aac文件。。。。。。。。。。好吧,你赢了。测试

兼容插件看来用不了了,要不直接把webbrowser内核替换成Chrome内核呢?url

网上有不少现成的插件,尝试了Gecko和Cef,Gecko的码完以后发现仍然不支持audio标签,内核的确是chrome,Cef看其它网友说对audio标签也不支持,我就果断放弃了。插件

方案一走不通。

方案二尝试过程

.NET搜索Winform播放语音,第一个插件就是NAudio。目前版本到1.8,GitHub开源

能够直接nuget安装,包安装管理命令行输入install-package NAudio便可安装。因为个人项目代码是Framework2.0,Nuget提示我项目Framework过低。

无奈最近一个支持Framework2.0的版本是1.6,因而install-package NAudio -version 1.6,NAudio是一个至关干净的插件,除了他本身的NAudio.dll没有加入任何其它依赖的dll文件,根据源码看,主要应该都是调用的system32下的dll。

OK,试验一下播放MP3文件,没问题。

试验一下播放AAC文件,不行。。。查询官网,须要Media Foundation Transforms,只有Win7以上支持,并且只有NAudio 1.7以上支持

无奈,想到了一个hack方法,经过另外一个安装了Media Foundation组件winserver 2012服务器IIS站点做为中转,使用NAudio将语音转换为wav格式后,发送给客户端使用。

试了下,果真能够了!试着部署到测试服务器,运行报错

须要安装组件media foundation,安装后还报错

想到多是测试服务器到语音url连接不通,尝试换了一个url,在服务器上直接访问经过后,再尝试运行报另一个错

应该是因为server2012不支持url读取语音文件致使,使用webclient先下载下来后再从本地读取,而后删除文件

测试成功!

参考文档

https://www.codeproject.com/articles/501521/how-to-convert-between-most-audio-formats-in-net

http://stackoverflow.com/a/18333982/7706556

Media Foundation Transforms

相关文章
相关标签/搜索