Silverlight4调用本地音频设备并将音频文件上传到服务器
2012-12-26 20:24
519 查看
•前言
今天遇到一个技术上的难题,如何通过web端调用本地音频设备并将音频文件上传到服务器?在网上搜集了很多资料,最终整理出来了一个版本,但还是无法满足目前的需求,借着这个机会,将源码贴出来给大家分享,希望能得到高手的指点,解决自己的困惑。好了,废话不多说,进入正题。(部分代码源自其他网友,因为无法追溯出处,在本文中未署名原创作者信息,如有侵权,请告知)
•思路
目前调用本地音频设备常用的方式有三种:
1)在web项目中引用DirectX.dll。但是本人愚钝,结合网上的知识,没有得到想要的结果,所以pass;
2)在网上搜集Flash插件。好嘛,在网上搜集的一些Demo大多数都是一些极其简单的,并不能满足需求。缺点:只能将音频文件保存到本地;无法获取保存后的文件路径;样式太丑;很多东西无法自定义,如录音时间、保存格式等等,所以pass;
3)通过Silverlight调用本地音频设备。这是目前自己觉得最好的解决方案。
下面我将介绍如何通过Silverlight4调用本地音频设备并将音频文件上传到服务器。
•正文
项目整体目录结构
View Code
程序缺点:
首先是必须通过Isolated Storage对象在客户端拓展独立存储空间(当然大小可以根据实际需要自定义),因为我还没有找到一个更好的办法将WAV文件存储到本地,或者说满足SavePcmToWav方法的第二个参数;其次,最终得到的WAV文件大小实在不敢恭维,本人做了一个测试,30秒的录音最终可以得到一个35M左右的WAV文件,提醒,是WAV文件,然后还要上传到服务器,这些都是相当恐怖的。同样的,Win7再带的录音功能35秒的录音得到的WMA文件,提醒,是WMA文件,却不到1M大小。最后,在SL程序中,不能应用非SL运行库生成的其他DLL,导致无法借助外部程序压缩WAV文件或者优化本程序。
程序待优化部分:
1.有木有其他解决方案,即不用Silverlight同样可以完成类似功能;
2.能不能不需要先将WAV文件保存到独立存储空间(既保存到本地),然后将该文件Stream通过WebService传到服务器,或者直接将内存流在Web直接转换成音频文件;
3.在转换内存流的步骤中,可不可以将MemoryStream保存为如MP3,WMA或者其他格式的音频文件,来压缩音频文件大小。
4.求一个更好的文件上传方法。
源码下载
今天遇到一个技术上的难题,如何通过web端调用本地音频设备并将音频文件上传到服务器?在网上搜集了很多资料,最终整理出来了一个版本,但还是无法满足目前的需求,借着这个机会,将源码贴出来给大家分享,希望能得到高手的指点,解决自己的困惑。好了,废话不多说,进入正题。(部分代码源自其他网友,因为无法追溯出处,在本文中未署名原创作者信息,如有侵权,请告知)
•思路
目前调用本地音频设备常用的方式有三种:
1)在web项目中引用DirectX.dll。但是本人愚钝,结合网上的知识,没有得到想要的结果,所以pass;
2)在网上搜集Flash插件。好嘛,在网上搜集的一些Demo大多数都是一些极其简单的,并不能满足需求。缺点:只能将音频文件保存到本地;无法获取保存后的文件路径;样式太丑;很多东西无法自定义,如录音时间、保存格式等等,所以pass;
3)通过Silverlight调用本地音频设备。这是目前自己觉得最好的解决方案。
下面我将介绍如何通过Silverlight4调用本地音频设备并将音频文件上传到服务器。
•正文
项目整体目录结构
View Code
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime executionTimeout="648000" maxRequestLength="100000000" ></httpRuntime> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
程序缺点:
首先是必须通过Isolated Storage对象在客户端拓展独立存储空间(当然大小可以根据实际需要自定义),因为我还没有找到一个更好的办法将WAV文件存储到本地,或者说满足SavePcmToWav方法的第二个参数;其次,最终得到的WAV文件大小实在不敢恭维,本人做了一个测试,30秒的录音最终可以得到一个35M左右的WAV文件,提醒,是WAV文件,然后还要上传到服务器,这些都是相当恐怖的。同样的,Win7再带的录音功能35秒的录音得到的WMA文件,提醒,是WMA文件,却不到1M大小。最后,在SL程序中,不能应用非SL运行库生成的其他DLL,导致无法借助外部程序压缩WAV文件或者优化本程序。
程序待优化部分:
1.有木有其他解决方案,即不用Silverlight同样可以完成类似功能;
2.能不能不需要先将WAV文件保存到独立存储空间(既保存到本地),然后将该文件Stream通过WebService传到服务器,或者直接将内存流在Web直接转换成音频文件;
3.在转换内存流的步骤中,可不可以将MemoryStream保存为如MP3,WMA或者其他格式的音频文件,来压缩音频文件大小。
4.求一个更好的文件上传方法。
源码下载
相关文章推荐
- Silverlight4调用本地音频设备并将音频文件上传到服务器
- C# winform 文件浏览选择上传至本地服务器HttpWebClient+调用本地文件夹
- 将本地音频文件上传到微信公众号服务器获得文件media_id
- java调用svnkit工具类上传本地文件到svn服务器
- scp 命令服务器与本地文件的上传与下载
- ftp上传文件,本地安装了,服务器上也需要在也安装一个ftp
- Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器
- 服务器学习之mac终端与远程服务器上传下载文件到本地
- 在本地我们调试运行AJAX.NET程序完全没有问题,但是一旦上传到服务器就会出现很多Web.config文件异常
- 如何控制上传附件的大小?在没有上传到服务器上就能判断出来 - 用Applet(签名) + JavaScript在提交前先判断本地文件的大小。
- 音频录制上传服务器,调用系统相机
- Linux系统安装rz/sz实现本地和服务器文件上传下载
- 使用ncftp将本地文件上传到服务器
- 本地文件上传服务器
- tar.gz本地文件上传到服务器无法解压.
- javascript+C#本地大文件上传到服务器方法(WebUploader)
- (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
- C# 把本地文件上传到服务器上,和从服务器上下载文件
- 从本地上传文件到服务器
- J2ME文件系统运用(五) 从本地上传文件至服务器(支持同时上传多个文件)