Vb.net2008 Direct编程(二)

来源:互联网 发布:手机淘宝直通车怎么弄 编辑:程序博客网 时间:2024/05/18 20:50

Direcrsound教程

学习嘛,从最简单的开始,本节课我将告诉大家如何使用direct播放音乐。

首先我介绍一下directsound

它是 directx中的一个组件,软件开发者可将数据通过多个音频流直接写入任何 directx兼容声卡里。它支持多种采样频率,且能随意增加以软件为基础的声音特效。同时, directsound本身就是一个声音合成引擎,它用系统内存容纳不同的音频流。

     了解了directsound,我们开始学习directsound的编程,本次我们编写的程序是一个播放wav文件的程序,废话不多说,打开vs2008,新建一个vb的窗体应用程序,在窗体上放置一个textbox和一个buttontext改为“播放”)。

双击窗体进入“查看代码”窗体。哦对了,千万别忘了引用directsound项选择:

项目添加引用→“浏览”C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0目录下的相关链接库,因为本次使用DirectSound,所以将Microsoft.DirectX.dll(此项可以省略掉)和Microsoft.DirectX.DirectSound.dll导入进来,当然你也可以从“.net”这个项目里直接找到。前提:你的电脑里安装了direct……。

首先在class前Imports(关于imports的意思,请见:http://dict.baidu.com/s?wd=import):

Imports Microsoft.DirectX此项可以省略掉

Imports Microsoft.DirectX.DirectSounddirectx的sound类

这样我们便把direct 的命名空间引用进来了,在后面的程序中,我们便可以对其进行操作了。

首先我们声明一个音频设备的全局变量Dev,并直接实例化,类型为device(设备类型):

dim Dev as new device (因为direct直接操作硬件,所以dev在此做一个中介)

别告诉我你不知道全局变量在那里声明……,算了照顾新手,说一下吧public class 窗体名下面:

接着,我们要调用directsound类了,在buttonclick项里写入:

    PrivateSub Button1_Click(ByVal senderAs System.Object, ByVal eAs System.EventArgs) Handles Button1.Click

        dev.SetCooperativeLevel(Me, CooperativeLevel.Normal)为dev绑定一个窗体,指dev这个音频设备为“me”这个窗体服务。设置CooperativeLevel是因为windows是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置 CooperativeLevel.调用Device的SetCooperativeLevel方法:其中,第一个参数是一个Control,第二个参数 是个枚举类型.

        Dim sbAs New SecondaryBuffer(TextBox1.Text, dev)程序播放声音,是由程序从硬盘读取加载到缓冲区,然后播放出来的,所以在此我们声明一个缓冲区,并直接实例化。SecondaryBuffer的方法:

SecondaryBuffer(路径,使用设备)

        sb.Play(0, BufferPlayFlags.Looping)好了,声音已经加载到缓冲区了,我们应该播放了吧,用SecondaryBuffer这个类型的play方法,来进行播放,说一下play的方法:play(优先级(优先级越高使用的硬件资源越多),播放类型)播放类型包括default(默认)looping(循环)等等,剩下的自己体会吧。

        Button1.Enabled = False播放开始将button的enbled设为false,防止你点了很多次,播放重复,当然你也可以去掉,然后点很多次,特别过瘾,小心点多了电脑卡了哦!

End Subend button.click我习惯加上这句话,让我看到sub是知道这是什么控件的什么事件,在编写大程序时更加清楚明白,当然个人习惯,每个人都不同。

注释比较多哈,我重新发一遍源码,最好不要复制上,照着抄上也比复制上好,加深印象呵!:

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Imports Microsoft.DirectX.DirectSound

PublicClass Form1

    Dim devAs New Device

    PrivateSub Button1_Click(ByVal senderAs System.Object, ByVal eAs System.EventArgs) Handles Button1.Click

        dev.SetCooperativeLevel(Me, CooperativeLevel.Normal)

        Dim sbAs New SecondaryBuffer(TextBox1.Text, dev)

        sb.Play(0, BufferPlayFlags.Looping)

        Button1.Enabled = False

    EndSub

End Class

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

很简单是吧,再简单也不能轻视打好基础才能学更加深奥的!

测试一下吧,输入wav文件的路径,点击“播放”,咦?怎么出错啦,先别着急看看错误,loaderlock错误,如果你运行生成好的程序你会发现,生成的程序竟然没有错误,如果你想在测试中也不查出错误怎么办。来,跟着我做:找到菜单上的“调试”→“异常”→“managed debugging assistants”→“loaderlock”找到了么?把它改为未选中就可以啦,如果你的程序没有出错,那就不用搞了。

好了这一节到此结束,88.错误和疑问以及建议回复中见~

 

原创粉丝点击