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

ASP.NET
.Net中使用com组件后发生System.ArithmeticException异常的解决办法
SQL Server.net 和 OLE DB.net连接数据库的比较
后台更新DataTable行内容的方法
敏捷软件开发(原则,模式与实践)笔记1
确保文本框输入值为数值的代码
XML和数据库之间相互的映射
让你的.NET程序兼容不同版本的Dll文件。
.NET 的数据访问应用程序块(Data Access Application Block)
用控件仅一条指令实现界面换肤和多语言版本(YFSkins)
Microsoft User Interface Process Application Block 研究(3)
分享:处理Excel方法小结
基于ASP.NET实现全球化
.net 里面 protected private 的变量也可以访问(新发现)。
关于C#中{0}和{1}的问题初次在此发贴,问题对你易对我难,求救了
使用C#代码实现增加用户帐号
全世界都在关注-微软重大产品发布
教你做Rational Rose(UML Design)
OLE DB取得数据库的架构信息
VB 从零开始编外挂(三)
XPath序列之四

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 147 ::
收藏到网摘: 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===============