Direcrsound教程
学习嘛,从最简单的开始,本节课我将告诉大家如何使用direct播放音乐。
首先我介绍一下directsound:
它是 directx 中的一个组件,软件开发者可将数据通过多个音频流直接写入任何 directx 兼容声卡里。它支持多种采样频率,且能随意增加以软件为基础的声音特效。同时, directsound 本身就是一个声音合成引擎,它用系统内存容纳不同的音频流。
了解了directsound,我们开始学习directsound的编程,本次我们编写的程序是一个播放wav文件的程序,废话不多说,打开vs2008,新建一个vb的窗体应用程序,在窗体上放置一个textBox和一个button(text改为“播放”)。
双击窗体进入“查看代码”窗体。哦对了,千万别忘了引用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.DirectSound’directx的sound类
这样我们便把direct 的命名空间引用进来了,在后面的程序中,我们便可以对其进行操作了。
首先我们声明一个音频设备的全局变量Dev,并直接实例化,类型为device(设备类型):
dim Dev as new device ‘(因为direct直接操作硬件,所以dev在此做一个中介)
别告诉我你不知道全局变量在那里声明……,算了照顾新手,说一下吧public class 窗体名下面:
接着,我们要调用direct的sound类了,在button的click项里写入:
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 Sub’end 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”找到了么?把它改为未选中就可以啦,如果你的程序没有出错,那就不用搞了。
原文链接:https://www.f2er.com/vb/259777.html