学习笔记,VB.NET使用DirectSound9 (1) 简单播放

作者分享VB.NET结合DirectX9、DirectSound播放声音的内容。提到学习方法、准备工作,给出播放声音的基本步骤和代码示例,还介绍了DS关联窗体时的播放现象、缓冲区声音丢失问题及解决选项,指出DirectSound能实现特效、3D音效等功能。

关键字: DirectX9 DirectSound VB.NET  作者:董含君

网上看的源代码都是C++的,最好的打算也是C#的,去baidu搜索,发现想找的人不少.于是想起了在优快云还有一个blog.希望能够跟大家分享.3-17就要考试了,估计要写的话也要很久以后才能继续研究了.

关于VB6的爱好者.大家还是尽快放弃VB6吧,我从97年开始用,现在终于也到了.Net了,中间的痛苦可想而知.尤其是服务器编程,.NET会方便很多.客户端随着XP的推广跟windows update的升级,也快了.到时候别没有准备.

我的学习方法

看SDK的文档,了解诸多概念,然后看SDK C#的教程(已经习惯了)

准备工作

VS2003(有2002的,但是不用那个版本)

DXSDK 9.0C 2004 Dec(记住,是for VS2k3的,曾经有过VS2k2的,而且很多地方不通用)

Win2k(这个久不用说了吧)

大体步骤

1 首先要添加引用.否则直接imports没办法找到 Microsoft.Directx....

2 引用完了,为了方便再imports Microsoft.DirectX.directsound

为了播放一个简单的声音文件进行如下操作

创建一个设备,关联到这个窗体
创建一个缓冲,指定来源(这里用文件)
播放...


    Dim ad As Device '创建设备
    Dim Buf As SecondaryBuffer '创建缓冲
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ad = New Device  '实力化设备对象
        ad.SetCooperativeLevel(Me.Handle, CooperativeLevel.Normal) '关联
        Buf = New SecondaryBuffer("G:/MEDIA/WAV/ff9start.wav", ad) '实力化缓冲区
        Buf.Play(0, BufferPlayFlags.Looping) '播放,同时指定开始位置跟方式
    End Sub

这是一个最基本最简单的例子,目的是了解步骤

有趣的现象,由于DS关联的是窗体,当窗体失去焦点的时候,他会停止播放

一旦重新获得焦点会继续播放

很方便吧

但是DS用的是缓冲区的,在切换的时候,会丢失声音,少了那么一点

SDK也提到过,但是我没有认真看(1 感觉问题不大(除非录音) 2 英文的,懒~)

实际上没有必要解决丢失问题,因为对buf描述的时候就有这个选项

普通的(就是默认的,我用的这种)
Sticky 看原文吧:Buffers with /"sticky/" focus will continue to play if the user switches to another application not using DirectSound.  However, if the user switches to another DirectSound application, all normal-focus and sticky-focus buffers in the previous application are muted.";

全局的:Buffers with global focus will continue to play if the user switches focus to another application, even if the new application uses DirectSound. The one exception is if you switch focus to a DirectSound application that uses the DSSCL_WRITEPRIMARY cooperative level. In this case, the global-focus buffers from other applications will not be audible.";


再就是  默认  硬件加速 软件加速  (用默认就好,有硬件就用硬件,否则模拟)

一下是原文
            if (MixHardware)
            {
                sText = sText + "/n/nWith the hardware mixing flag, the new buffer will be forced to use hardware mixing. If the device does not support hardware mixing or if the required hardware resources are not available, the call to the DirectSound.CreateSoundBuffer method will fail.";
            }
            else if (MixSoftware)
            {
                sText = sText + "/n/nWith the software mixing flag, the new buffer will use software mixing, even if hardware resources are available.";
            }
            else
            {
                // Default mixing
                sText = sText + "/n/nWith default mixing, the new buffer will use hardware mixing if available, otherwise software mixing will be used.";
            }

由于内容很简单,没有翻译的必要(主要是因为懒,自己能看懂稍微记录一下就算了)

实际上DirectSound能作的工作很多

包括特效,3D音效跟混音以及声音抓取(录音?)

今天比较晚了,还有音量控制没有研究.是一个BufferDescription

描述缓冲区要使用的功能

设置上之后才能用buf.pan=... 来修改,我是这么理解的,下次再尝试,感觉不是很难.

VB.NET是一种面向对象的编程语言,它是微软公司开发的一种基于.NET框架的编程语言。下面是一些VB.NET学习笔记的内容: 1. 基本语法:VB.NET的语法与其他编程语言类似,包括变量声明、条件语句、循环语句等。学习者需要掌握基本的语法规则和关键字。 2. 数据类型:VB.NET支持多种数据类型,包括整型、浮点型、字符型、布尔型等。学习者需要了解各种数据类型的特点和使用方法。 3. 控制结构:学习者需要掌握条件语句(如if语句、switch语句)和循环语句(如for循环、while循环)等控制结构,以实现程序的流程控制。 4. 函数和过程:VB.NET支持函数和过程的定义和调用。学习者需要了解函数和过程的区别,以及如何传递参数和返回值。 5. 面向对象编程:VB.NET是一种面向对象的编程语言,学习者需要了解类、对象、继承、多态等面向对象的概念和使用方法。 6. 异常处理:学习者需要了解如何使用try-catch语句来捕获和处理异常,以提高程序的健壮性。 7. 文件操作:学习者需要了解如何读写文件、创建和管理文件夹等文件操作的基本知识。 8. 数据库编程:VB.NET可以与数据库进行交互,学习者需要了解如何连接数据库、执行SQL语句、读写数据库等数据库编程的基本知识。 9. GUI编程:VB.NET提供了丰富的GUI组件和控件,学习者需要了解如何设计窗体、添加控件、处理事件等GUI编程的基本知识。 10. 调试和测试:学习者需要了解如何使用调试工具来调试程序,以及如何编写和运行单元测试来验证程序的正确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值