Vb.net2008 Direct编程二

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项里写入:

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click

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

Dim sb As 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

Public Class Form1

Dim dev As New Device

Private Sub Button1_Click(ByVal sender As System.Object,CooperativeLevel.normal)

Dim sb As New SecondaryBuffer(TextBox1.Text,dev)

sb.Play(0,BufferPlayFlags.Looping)

Button1.Enabled = False

End Sub

End Class

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

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

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

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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...