Windows编程 DirectSound DirectMusic 音效和音乐

版本:VS2015 语言:C++

 

最近项目遭遇变故,公司随意开人,导致原本要出包的项目现在乱七八糟。现在不知道未来会怎么样……

 

我们Windows上2D的编程今天是最后一课了,没有听错,2D完结,接下来就是3D了,书已经准备好了,就等我回去去取,有没有点小兴奋呢?嘛,我现在是还没有接触过3D引擎啦,不过等学完再去看看Unreal岂不也是美哉。

 

今天要讲的是在dx中演奏音乐和音效,没看这个章节前,我一直认为音乐和音效的区别主要是播发时间长短的问题,实际一看,这里面十分的玄妙。

 

有一点先说一下,相比于图形技术的更新换代,音乐技术没有发生过多大的变化,dx3开始一直到dx7的时候,都是使用dx3的接口。直到dx8才把Sound和Music整合成了Audio。

 

那么音乐(Music)和音效(Sound)究竟有什么区别呢?

 

所谓Sound,专业点来说就是数字化的数码声音。比如你买了个麦克风,你干吼几下,然后录音软件把你的声音记录成了一个文件,那个文件就是音效了(很渗人啊)。

 

Music是合成音,直接取缔了录音的阶段,用户直接编入数据,让音频发生库发出数据所代表的音乐。

 

文件格式上来说,Sound代表格式是WAV,而Music是MIDI。

 

了解了这一些就知道为什么要分成DSound和DMusic了。好了下面是一个实际的程序,先我们使用老接口的Sound来播放一个音效。

 

申明一下,这里工程中的基础代码是上一节使用过代码,有需要的玩家可以看一下dxinput的内容。

 

首先需要引入dsound.lib和winmm.lib,但后者是windows部分用于读取媒体文件,所以只需要使用vs自带的lib就OK了。

 

然后引入头文件#include <mmsystem.h> #include "dsound.h"这两个。

 

环境搞定之后,下面是编写一些全局代码,做一些准备工作:

LPDIRECTSOUND lpds;	//dx音效对象
DSBUFFERDESC dsbd;	//音效缓存描述

// WAV文件读入后存放的类
typedef struct pcm_sound_typ
{
	LPDIRECTSOUNDBUFFER dsbuffer;
	int state;
	int rate;
	int size;
	int id;
}pcm_sound, *pcm_sound_ptr;

#define SOUND_NULL 0
#define SOUND_LOADED 1

const int MAX_SOUNDS = 10;	//最多存放音效的数量
pcm_sound sound_fx[MAX_SOUNDS];		//所有的音效

然后我们要实现的效果就是在游戏初始化的时候读取一个文件,并播放,我看了一下就选wind.wav这个风的音效(不知道从哪录的,怪渗人的)。

 

下面是初始化并播放的代码:

// 开始创建音效对象
if (DirectSoundCreate(NULL, &lpds, NULL)!=DS_OK)
{
	popMessage(TEXT("创建音效对象失败"));
	return 0;
}

if (FAILED(lpds->SetCooperativeLevel(main_window_handle, DSSCL_NORMAL)))	//设置普通的协作等级
{
	popMessage(TEXT("ds设置协作对象失败"));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值