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

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

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


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