当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > VB.NET 实现DirectSound9 (10) 均衡器

ASP.NET
asp.net 产生随机颜色实现代码
asp.ent(C#)中判断空字符串的3种方法以及性能分析
asp.net 基于forms验证的目录角色权限的实现
ASP.NET 统计图表控件小结
asp.net 动态引用样式表代码
asp.net 获取IP的相关资料
真正的获取客户端真实IP地址及利弊分析
asp.net(c#)文件下载实现代码
asp.net 不用GridView自带删除功能,删除一行数据
asp.net forms身份验证,避免重复造轮子
asp.net 站点URLRewrite使用小记
asp.net Gridview行绑定事件新体会
asp.net MVC实现简单的上传功能
asp.net web.config加密解密方法
aspx实现的 jquery ui 的 flexgrid demo
ASP.NET Internet安全Forms身份验证方法
asp.net使用for循环实现Datalist的分列显示功能
jQuery AJax调用asp.net webservers的实现代码
ASP.NET 页面刷新和定时跳转代码整理
asp.net GridView控件鼠标移动某行改变背景颜色(方法一)

ASP.NET 中的 VB.NET 实现DirectSound9 (10) 均衡器


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 127 ::
收藏到网摘: n/a


关键字: VB.NET DirectSound9 播放器 均衡器 作者:董含君
转载请注明来自:http://blog.csdn.net/a11s
发现最近发帖有点上瘾,这个估计真的是最后一篇关于DirectSound的文章了.用VB做播放器--估计又是我填补国内空白了.呵呵开玩笑.用MediaPlayer做播放器的不要看不起我哦...现在来写一下均衡器.必要知识是示波器,如果没有示波器的知识来做均衡器估计比较困难.这个是连接
http://blog.csdn.net/a11s/archive/2005/03/07/313672.aspx
依旧是拿WinAmp来分析
中间的那个就是均衡器(这个图没有截好,而且这个Blog居然不能删除上传的图像,我晕)

上面的1k 3k 6k ...都是可以调整的.
根据上一篇文章的说明,就是修改播放的buffer
1 primaryBuffer 这里面是DirectSound的最终播放缓冲,通常说来,你不需要修改他的内容,包括SDK的例子也没有涉及到PrimaryBuffer的操作.包括写入,锁定,播放 三个部分.更加详细的资料只能参照C++的资料的,全部都是英文的.不要指望我来翻译,我怕挨骂.
2 针对当时示波器的方案,应用到均衡器.就是将某一段的音量进行调整.这个"段"可以映射到riff的数据块,也就是播放前就修改了Primary的数据,然后lock ,最后play
3 最重要的还是这个"范围"的定义.由于我对声学了解几乎为0.但是相信winAmp这么划分时有道理的.你仔细看均衡器的上面有一条曲线.他的放大并不是大起大落,而是平滑的,这样你的EQ函数跟示波器的绘制函数一样,应该是连续的效果才会比较好

4 多种声音的加载.
这个在示波器没有多说,主要是为了拿到均衡器这边来.
既然知道均衡器最终的实质是修改PrimaryBuffer,那么你应该很容易就联想到怎么加载mp3 或者 wma了
最"经典"的办法,自己读mp3文件,然后转化成响应的riff,写PrimaryBuffer,最后Play
流行的办法,利用现有的插件,COM对象.没有发现么,DIrectShow支持的文件格式基本上就包含了MediaPlayer的文件格式,很多播放器都是这样.基本上都是为windows media player做插件.RealOne也有自己的Update 站点升级插件,WinAmp的插件也很多.他们的功能就是将目标文件专成riff然后给源程序播放.
5 播放器的播放环节
5.1 初始化
5.2 打开文件
5.3 找合适的插件读取文件内容,变成riff
5.4 找合适的插件进行示波
5.5 找合适的插件进行EQ调整
5.6 找合适的插件进行输出(这里我们用DirectSound)
5.7 播放进行时,处理各种时间以及做好节目列表
5.8 ....
可见,里面插件担当了非常重要的技术,而且不是一个人能够做的来的.
视频操作更是如此.
但是都是利用了一个同一的标准,然后大家具体实现其中的内容.
6 说了这么多,是不是对插件感兴趣?这个你可以直接用.但是需要到winamp的官方查看他的示例代码.当年豪杰曾经也出过演示程序,C++的.然后既然知道了接口,你就应该能够制作出这样的程序来适应他的插件.
相关技术主要还是经典的dll的动态加载问题,C# 以及 vb.net J# 都办不到.建议还是看C++或者Delphi吧.虽说安装插件的VB6也能做到.....估计这块已经没有什么可以再值得研究的了,或者说也不是一个人能够做到的了.仅仅了解一下就可以了.如果真的认真做,需要耗费的时间跟精力是难以估量的.或者你去做个forlinux的也许还能有前途,这个就不是我要讨论的问题了=============End===============