OgreOggSound——Ogre的OpenAL声音库的安装

参考网站:OgreOggSound Forum

 

经过比较长时间的探索,终于找到一个还可以用的声音库的封装,摒弃了之前的简陋的OpenAL SoundManager,改用一个封装的更好的库——OgreOggSound,支持ogg格式和wav格式的声音处理。

 

为什么选择OgreOgg可以参考这里,个人觉得Ogg以后前途更好一些。

 

首先,到这里下载OgreOggSound-v1.18.zip,顺便把下面的TestDemo.zip也下载下来,果你按照我之前的文章搭建了Ogre的OpenAL平台的话,基本准备工作已经完成了。当然如果你没有配置Ogre还有OpenAL的平台的话,需要事先配置Ogre,OpenAL只需要安装SDK就可以了。可以参考这里

 

解压OgreOggSound-v1.18.zip并打开OgreOggSoundLib_vc9.sln(我用的是VS2008SP1),编译会报错:

c1xx : fatal error C1083: 无法打开源文件:“WIN32”: No such file or directory

项目 : warning PRJ0018 : 未找到下列环境变量:
$(OPENAL_SDK)
$(BOOST_ROOT)
$(OGRE)

其中c1xx : fatal error C1083: 无法打开源文件:“WIN32”: No such file or directory这个错误在编译一次就没有了,其他的错误还在,然后你有两种选择:

 

1.如果你配置了Ogre的OpenAL平台,那么应该包含的东西都已经配置好了,不需要这些环境变量,在 项目 -> 配置属性 -> C/C++ -> 附加包含目录 改为:

 

./include;

 

项目 -> 配置属性 -> 连接器 -> 附加库目录 改为:

 

./dependencies;

 

注意:你需要同时更改Debug和Release版本的项目配置。

 

2.新建这些环境变量,创建BOOST_ROOT,OPENAL_SDK以及OGRE_HOME环境变量,其中OGRE_HOME应该是之前就有的,BOOST_ROOT指的就是Ogre_SDK文件夹下的boost_1_42目录,OPENAL_SDK指的是安装OpenALSDK的主目录,创建即可。

 

另外你需要把OpenAL 1.1 SDK/libs/EFX-Util_MTDLL下的EFX-Util.lib复制出来到OpenAL 1.1 SDK/libs目录下,此时再分别编译Debug和Release版本。

 

编译时间比较长,此时你可以看看ogreoggsound/include里面的内容,如果之前配置了OpenAL,那么对ogg和vorbis文件夹应该是比较熟悉的,这两个文件夹的东西重复了,不用管,把include目录下的.h文件复制到OpenAL 1.1 SDK/include文件夹下即可。

 

编译完成后,在ogreoggsound/lib文件夹里生成了dll文件和lib文件:

把OgreOggSound_d.lib放到OgreSDK_vc9_v1-7-1/lib/debug目录下。

把OgreOggSound.lib放到OgreSDK_vc9_v1-7-1/lib/release目录下。

把OgreOggSound_d.dll放到OgreSDK_vc9_v1-7-1/bin/debug目录下,并改动同目录下plugins_d.cfg文件,在最后加上:

 

 Plugin=OgreOggSound_d

 

把OgreOggSound.dll放到OgreSDK_vc9_v1-7-1/bin/release目录下,并改动同目录下plugins.cfg文件,在最后加上:

 

 Plugin=OgreOggSound

 

环境配置基本完成,确切的说是把OpenAL的函数封装到一个插件里面,我们在配置文件里对插件进行了注册。

 

好了下面来看TestDemo.zip的东西,解压打开TestDemo_vc9.sln,编译报错:

1>c1xx : fatal error C1083: 无法打开源文件:“../include”: No such file or directory
1>项目 : warning PRJ0018 : 未找到下列环境变量:
1>$(OPENAL_SDK)
1>$(BOOST_ROOT)

 

仍然金按照上面所述的两种方法处理,不过注意第一种方法的 项目 -> 配置属性 -> 连接器 -> 附加库目录 的内容全部删除即可。

 

编译,错误变成了:

 

error C2440: “初始化”: 无法从“const Ogre::RenderSystemList”转换为“Ogre::RenderSystemList *”

 

错误指向Ogre::RenderSystemList *rl = Ogre::Root::getSingleton().getAvailableRenderers();这里注意,由于1.7.1版本的getAvailableRenderers方法返回的是一个Ogre::RenderSystemList的引用而不是指针,所以我们需要把指针改成引用,把指针操作改成点操作,将:

 

 // Setup RenderSystem
 Ogre::RenderSystem *currentRenderSystem;
 Ogre::RenderSystemList *rl = Ogre::Root::getSingleton().getAvailableRenderers();
 std::string str;
 for (Ogre::RenderSystemList::iterator it = rl->begin(); it != rl->end(); ++it) {
  currentRenderSystem = (*it);
  str = currentRenderSystem->getName().c_str();
  //if (str.find("D3D9") != std::string::npos) break; //Change GL to D3D9 for DX9

 }

 

改为:

 

 // Setup RenderSystem
 Ogre::RenderSystem *currentRenderSystem;
 Ogre::RenderSystemList rl = Ogre::Root::getSingleton().getAvailableRenderers();
 std::string str;
 for (Ogre::RenderSystemList::iterator it = rl.begin(); it != rl.end(); ++it) {
  currentRenderSystem = (*it);
  str = currentRenderSystem->getName().c_str();
  if (str.find("D3D9") != std::string::npos) break; //Change GL to D3D9 for DX9
 }

 

注意我们在这里选用了D3D9的渲染器,此时编译即可通过,设置调试工作目录为运行依然会报错,这是因为一来的DLL不同步导致的,在OgreSDK_vc9_v1-7-1/bin/debug目录下找到OgreMain_d.dll、OgreOggSound_d.dll、OIS_d.dll、RenderSystem_Direct3D9_d.dll覆盖复制到TestDemo/Debug目录下,将Plugins.cfg中

 

# Define plugin folder
PluginFolder=./plugins

 

将resources.cfg中的Zip=../media/OgreMesh.zip

替换为

Zip=../media/OgreCore.zip

 

运行即可听到效果,这个例子比较好的一点是提供了Ogre和MFC整合的一种方案,而且可以清晰的看到Ogre的工作流程,将在下一篇文章里详细的讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值