×

DirectX与VB.NET编程(二)DirectSound初体验

Kalet Kalet 发表于2009-03-20 12:00:14 浏览194 评论0

抢沙发发表评论

本人首先从最容易入手的DirectSound开始。

===============华丽的分割线=============== DirectX与VB.NET编程(二)DirectSound初体验

DirectSound简介:DirectSound提供了实现声音的播放、混音、录音及3D音效的方法。值得一提的是DirectSound中的DirectSound3D(DS3D)组件。其实微软公司已经为我们封装好了一个近乎完美的类:DS3D,通过使用DS3D,不仅可以实现普通的声音播放,而且可以设置听者于声源的物理位置和物理速度,甚至用户还可以设置声音的衰减因子和多普勒效应因子,根据这些参数,DS3D可以智能地转化为3D立体音效,你会发现声音是从四面八方传过来的,甚至你还可以设置声音的回声等特效。而这一切用户根本勿须具体了解其中具体的物理原理。

===============华丽的分割线===============

这次是做一个播放声音的程序,当程序运行的时候会自动播放指定的声音。

学习要点:
·导入Managed DirectX的动态链接库和引用名称空间;
·声明一个设备并将其与窗口绑定;
·声明并初始化声音缓冲区;
·利用声音缓冲区播放声音;
·DirectSound只能播放WAV声音文件。

===============华丽的分割线===============

启动Microsoft Visual Studio.NET 2003,新建一个Visual Basic项目,模板为Windows应用程序。

===============华丽的分割线===============

使用DirectX编程,首先必须将Managed DirectX的动态链接库引用到应用程序中,这样才能够将其imports出来,不然imports的话是看不到DirectX名称空间的。选择“项目”-“添加引用”,然后浏览C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0目录下的相关链接库,因为本次使用DirectSound,所以将Microsoft.DirectX.dll和Microsoft.DirectX.DirectSound.dll导入进来。

===============华丽的分割线===============

进入代码编辑窗口,添加引用名称空间的语句
Imports Microsoft.DirectX
Imports Microsoft.DirectX.DirectSound
这样就把DirectX和DirectSound名称空间引用进来了。

===============华丽的分割线===============

然后必须声明一个设备,因为DirectX是应用程序直接与硬件打交道,所以必须使用一个设备为中间连接,设备声明语句如下:
Dim Dev As Device
因为该设备会在多个函数中使用,所以需要声明为类全局变量,即声明语句应放在
Public Class Form1
       Inherits System.Windows.Forms.Form
后面。

===============华丽的分割线===============

下面开始初始化设备,在Form_Load函数中写如下语句:
Dev = New Device
Dev.SetCooperativeLevel(Me, CooperativeLevel.Normal)
第一句用于将设备Dev实例化,第二句则代表该设备捆绑的窗口,以代表该设备为该窗口服务,优先级别为普通。
以上的设备声明与初始化是任何一个DirectX程序必备的,以后不再详细说明。

===============华丽的分割线===============

程序播放声音,首先是从硬盘加载到内存的缓冲区中,然后在缓冲区中播放,因此,我们需要声明一个缓冲区,范围为类全局变量。
Dim SB As SecondaryBuffer
然后在设备初始化后面实例化该缓冲,同时向其构造函数传参:
SB = New SecondaryBuffer("D:\魔兽争霸2\DRIVERS\DIGTEST.WAV", Dev)
第一个参数是文件的路径,第二个参数是使用的设备。
DirectX与VB.NET编程(二)DirectSound初体验
===============华丽的分割线===============

现在已经完成初始化了,可以使用缓冲开始播放声音了,在上面语句的后面加入:
SB.Play(0, BufferPlayFlags.Looping)
第一个参数是播放的优先级别,优先级越高,使用的硬件资源也越多,该值的范围从0到0xFFFFFF之间,第二个则是播放模式,这里选择的是循环播放。

===============华丽的分割线===============

本程序的所有代码如下:
Imports Microsoft.DirectX
Imports Microsoft.DirectX.DirectSound
Public Class Form1
       Inherits System.Windows.Forms.Form
       Dim Dev As Device       '声明设备
       Dim SB As SecondaryBuffer         '声明缓冲区
#Region " Windows 窗体设计器生成的代码 "
       Public Sub New()
           MyBase.New()
           '该调用是 Windows 窗体设计器所必需的。
           InitializeComponent()
           '在 InitializeComponent() 调用之后添加任何初始化
       End Sub
       '窗体重写 dispose 以清理组件列表。
       Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
           If disposing Then
               If Not (components Is Nothing) Then
                   components.Dispose()
               End If
           End If
           MyBase.Dispose(disposing)
       End Sub
       'Windows 窗体设计器所必需的
       Private components As System.ComponentModel.IContainer
       '注意: 以下过程是 Windows 窗体设计器所必需的
       '可以使用 Windows 窗体设计器修改此过程。
       '不要使用代码编辑器修改它。
       <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
           '
           'Form1
           '
           Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
           Me.ClientSize = New System.Drawing.Size(292, 266)
           Me.Name = "Form1"
           Me.Text = "Form1"
       End Sub
#End Region
       Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           Dev = New Device      '实例化设备
           Dev.SetCooperativeLevel(Me, CooperativeLevel.Normal)       '绑定设备到窗口
           SB = New SecondaryBuffer("D:\魔兽争霸2\DRIVERS\DIGTEST.WAV", Dev)       '实例初始化缓冲区
           SB.Play(0, BufferPlayFlags.Looping)        '播放声音
       End Sub
End Class
DirectX与VB.NET编程(二)DirectSound初体验
可以运行看下啦~~~~~第一个DirectX程序~~下一课是做一个简单的播放器!!


群贤毕至

访客