欢迎来到天天文库
浏览记录
ID:41033456
大小:1.72 MB
页数:67页
时间:2019-08-14
《Windows游戏编程 第五章》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、•211•第5章声音的播放第5章声音的播放当一个应用程序加入音效后,它将变得很亲切。因为,它会“说话”了。虽然在大多数情况下它的“说话”是非常的呆滞,但是这已经足够提示用户的操作有没有被接受。例如,当按下一个窗口的按钮时,可以让程序发一个指定的声音,表示该按钮被按下。应用程序加入音效后可以变得很美妙。如果给游戏加入音效,其娱乐性会更上一层楼。有的人喜欢玩一款游戏的原因是它那动听的音乐。所以,这一章也是很重要的一章。5.1应该了解的一些知识本小节将介绍与数字声音相关的基本知识。内容不多,但有足于理解后面将讲到的DirectSound编程。声音
2、是通过振动产生和传播的。这些都必须有媒介才能实现。所以,计算机要发声必须要有振动的东西,这东西就是平时经常见到的音箱。音箱可以把连续的已经转化为电流的声音信号送到喇叭振动发声。可以把这些连续的信号称为模拟信号。计算机处理的是不连续的信号,即数字信号。显然,要把计算机里的数字信号送到音箱发声,必须经过“将数字信号转换为模拟信号”这一步,即经过数模转换器(DAC)。当要把话筒上的模拟信号送到计算机保存或播放时,必须经过“将模拟信号转换为数字信号”这一步,即经过模数转换器(ADC)。能实现这些功能的设备就是声卡。声卡可以把来自话筒、光盘等的模拟声
3、音信号加以转换,送到计算机、录音机和扬声器等设备。所以,声卡是整个计算机发声系统的核心。数字声音信号只能代表模拟信号的一部分,因为它是不连续的。所以,应该有一些因素表示数字声音信号代表模拟信号的程度。这些因素有三个:采样率、样本位数和声道数。采样率:一定时间段里的模拟信号。如果以波形来表现,则一定时间段里的模拟信号是一些连续的线。而数字信号是由一些分散的点表示。为了从模拟信号里采取数字信号,必须按时间顺序将模拟信号分为一段一段的,每一段采取其中的一个值表示该段。采样率就是将一秒钟的声音模拟信号分成多少份来表示。这个过程由模数转换器(ADC)
4、来完成。采样率的单位是赫兹(Hz)。44.1kHz的采样率表示一秒钟的声音由44100个样本数据表示。显然采样率越高,音质越好。样本位数:表示能表达的样本数据的多样程度。8位的样本位数能表达256个值。16位的能表达65536个值。显然样本位数越多,音质越细腻。声道数:声音通道的数目。单声道不能实现声音的立体定位功能。•211•第5章声音的播放5.2波形声音文件(WAVE)本章主要介绍波形声音文件的播放。这些文件的扩展名都是.wav。其文件结构如下:表5-1WAV文件结构字节数内容说明4RIFF标志4文件的长度4WAVE标志4fmt标志4P
5、CMWAVEFORMAT结构的大小16PCMWAVEFORMAT结构4data4声音数据的大小——声音数据这里涉及到PCMWAVEFORMAT数据结构,其具体定义如下:typedefstructpcmwaveformat_tag{WAVEFORMATwf;WORDwBitsPerSample;}PCMWAVEFORMAT;WAVEFORMAT结构的定义如下:typedefstructwaveformat_tag{WORDwFormatTag;WORDnChannels;DWORDnSamplesPerSec;DWORDnAvgBytesPe
6、rSec;WORDnBlockAlign;}WAVEFORMAT;♦wFormatTag:表示格式类型,可以是WAVE_FORMAT_PCM、WAVE_FORMAT_ADPCM等。♦nChannels:表示声道数。♦nSamplesPerSec:表示采样率。♦nAvgBytesPerSec:平均每秒传输的数据量。其值=采样率*数据块大小。结合文件的声音数据的大小,可以估算出该波形文件能播放多长时间。♦nBlockAlign:数据块的大小。其值=样本位数/8*声道数。•211•第5章声音的播放♦wBitsPerSample:表示样本位数。根据
7、WAV文件的结构,可以用判断文件是否有WAVE标志的方法判断文件是否是波形文件。5.3DirectSound的建立利用DirectSound可以播放前面提到的波形音频。DirectSound是DirectX系列之一。其可以快速的实现波形文件的播放功能。这很适合于游戏的开发。当调用一播放波形声音功能后,游戏需要马上听到声音。例如,当怪物死时,应该立即听到它发出的声音。DirectSound能够在调用播放功能后立即让声卡发声。所以,将DirectSound加入游戏的开发是很有意义的。5.3.1DirectSound的初始化正常情况下,初始化Di
8、rectSound环境只需要两步。第一步是创建DirectSound对象,第二步是设置DirectSound的协作等级。可以调用DirectSoundCreate8方法创建Dir
此文档下载收益归作者所有