专题10游戏音乐与音效.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
读数据到缓冲区: //锁定缓冲区 BYTE *pSoundPtr1 = NULL; BYTE *pSoundPtr2 = NULL; DWORD dwSoundSize1, dwSoundSize2; if(FAILED(m_pDirectSoundBuf8-Lock(0,pWaveHeader- DataSize,(void**)pSoundPtr1, dwSoundSize1, (void**)pSoundPtr2, dwSoundSize2, 0))) return false; //读数据到缓冲区(文件指针已指向data块后面的声音数据) fread(pSoundPtr1,dwSoundSize1, 1, fp); if(pSoundPtr2!=NULL) fread(pSoundPtr2, dwSoundSize2, 1, fp); //对缓冲区进行解锁 m_pDirectSoundBuf8-Unlock(pSoundPtr1, dwSoundSize1,pSoundPtr2,dwSoundSize2); 声音的播放与控制 当声音数据加载到次缓冲区后,就可以调用IDirectSoundBuffer8接口提供的Play函数,将声音播放出来。 Play函数实际是将次缓冲区的声音数据送到混声器中,与其他正在播放的声音一起混合,最后输出到主缓冲区自动播放。 HRESULT Play( DWORD dwReserved1, //保留未用,必须为0 DWORD dwPriority, //优先权,一般为0 DWORD dwFlags //播放方式 ); 一般设置前两个参数的值为0,最后一个参数取true或false来播放缓冲区的声音,true为循环播放。 声音的播放位置,可以通过IDirectSoundBuffer8接口的SetCurrentPosition函数来设置: HRESULT SetCurrentPosition( DWORD dwNewPosition //偏移位置(距缓冲区的开始处) ); //设置声音的播放位置 m_pDirectSoundBuf8-SetCurrentPosition(0); //播放一次 if(FAILED(m_pDirectSoundBuf8-Play( 0,0,bLoop?true:false))) return false; 停止播放: if(FAILED(m_pDirectSoundBuf8-Stop())) return false; 音量控制: if(FAILED(m_pDirectSoundBuf8-SetVolume(lVolume))) return false; 3D音效的实现 3D音效与2D音效最大的区别就在于3D音效加入了空间感,这在3D游戏中是很常见的。比如,如果敌人从玩家的左边靠近,则脚步声会从左边逐渐靠近玩家,声音也会越来越大。 原理:根据发声者和倾听者的位置、声音速度和发音锥区域等信息,计算倾听者的音强,以决定播放的声音大小。本质上是根据3D的空间因素,确定倾听者听到声音的大小。 实现过程: 建立发声者 建立倾听者 播放与控制 建立发声者 发声者用一个IDirectSound3DBuffer8接口对象来表示。先创建一个添加了DSBCAPS_CTRL3D标志的次缓冲区,然后调用QueryInterface取得一个IDirectSound3DBuffer8接口对象,从而创建了一个3D音效缓冲区,之后就可以进一步设置发声者的声音锥区域和最大最小距离。 建立倾听者 倾听者对象用一个IDirectSound3DListener8接口对象来表示。这个对象需要使用设置了DSBCAPS_CTRL3D标志的主缓冲区,调用QueryInterface函数进行创建,之后就要设置倾听者的位置和方向。 播放与控制 IDirectSound3DBuffer8接口并没有提供播放声音的Play函数,因此,发声者的3D音效缓冲区只是用来设置发声属性,而发声者声音的播放,仍然需要使用原来的次缓冲区的Play函数来实现。 常见问题 使用DirectSound时需要包含头文件: #include mmsystem.h #include dsound.h 另外,还需要添加以下库文件: winmm.lib dsound.lib dxguid.lib 学以致用 在3D环境中放一些模型,当鼠标放在不同的模型上时能放出不同的

文档评论(0)

金华 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档