加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Vb.net2008 Direct编程(二)

发布时间:2020-12-16 22:25:59 所属栏目:大数据 来源:网络整理
导读:Direcrsound 教程 学习嘛,从最简单的开始,本节课我将告诉大家如何使用 direct 播放音乐。 首先我介绍一下 directsound : 它是 directx 中的一个组件,软件开发者可将数据通过多个音频流直接写入任何 directx 兼容声卡里。它支持多种采样频率,且能随意增

Direcrsound教程

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

首先我介绍一下directsound

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

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

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

项目添加引用→“浏览”C:WINDOWSMicrosoft.NETDirectX for Managed Code1.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.错误和疑问以及建议回复中见~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读