控制声音需要首先引入两个头文件,依次为:
#include "vpAudioListener.h"
#include "vpAudioSoundSpatial.h"
聆听类继承图如图6.16.1所示,它使观察者可以倾听场景中正在播放的声音。声音类继承图如图6.16.2所示,它负责声音的播放管理,依据观察者与声源之间的相对位置和速度,它负责调节声音的音量和音调。
图6.16.1 聆听类继承图
图6.16.2 声音类继承图
需要特别注意,在Vega Prime应用程序中播放声音,需要对声卡进行特殊的驱动,可以到网络上找到OpenAL,其安装界面如图6.16.3所示。
图6.16.3 OpenAL 安装界面
对于声音的控制,首先需要准备好声音文件。在应用中,把"C:/Program Files/MultiGen- Paradigm/resources/data"目录下的"audio/wav"目录复制到应用程序的data 目录下,将使用其中的"chopper.wav"文件。这样,就准备好了要播放的声音文件。
在接下来的程序设计中,须先对声音模块进行初始化,其代码如下:
vpModule::initializeModule("vpAudio");
接着,利用路径搜索对象添加声音文件的路径:
CTS_pSearchPath_mySearchPath->append(CTS_RunPath+"//data//audio//wav");
然后,需要定义vpAudioListener 对象和vpAudioSoundSpatial 对象。为了便于在程序的其他地方控制声音的播放,定义了一个静态成员变量来控制声音的播放,其代码如下:(www.daowen.com)
static vpAudioSoundSpatial* pAudioSoundSpatial_mySound1;
vpAudioSoundSpatial* PublicMember::pAudioSoundSpatial_mySound1=NULL;
这样,在建立对象时,代码有一些不同,分别为:
vpAudioListener* pAudioListener_myAudioListener=new vpAudioListener();
pAudioSoundSpatial_mySound1=new vpAudioSoundSpatial();
其中pAudioListener_myAudioListener 比较简单,不需要特殊考虑。而pAudioSoundSpatial_ mySound1 相对复杂,以下关键代码需要注意:
pAudioSoundSpatial_mySound1->setFileName("chopper.wav");
pAudioSoundSpatial_mySound1->setEnable(false);
第1句代码设置具体的声音文件;第2句设置是否播放声音。建立两个对象的具体代码如图6.16.4所示。
图6.16.4 建立vpAudioListener 对象和vpAudioSoundSpatial 对象
建立vpAudioListener 对象和vpAudioSoundSpatial 对象完成后,需要特殊的配置才能完成声音的控制,关键代码如下:
pObserver_myObserver->addAttachment(pAudioListener_myAudioListener);
pObject_Hummer->addChild(pAudioSoundSpatial_mySound1);
第1句添加声音的倾听者到观察者上,第2句添加声音播放为汽车的“孩子”,这样就完成了声音播放的特殊配置。具体控制声音的播放与否完全取决于应用需要,可以自由实现。在开发中,利用键盘控制声音的播放。在汽车前进时,声音播放;而在汽车后退时,停止播放声音。作为键盘函数的部分功能,具体代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。