幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3803|回复: 2

[讨论]irrlicht和openal,audiere的配合使用

[复制链接]

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2006-10-16 14:51:08 | 显示全部楼层 |阅读模式
又遇到了那个问题,
使用Use Unicode Character Set配置进行编译的时候,
opengal的官方sdk中的framework里面的LoadOAL.cpp的数据类型又报错了。
把char转成wchar就可以正常编译了,但是这样又不能正常link。
原装库文件中的数据还是原来的char类型,显然是需要自己重新去编译openal32.lib
现在的问题是lgpl的东西,可以随便修改原来发布的文件么?
如果不能改动原来的东西,怎么样让它以unicode正常编译?
え~え~お!!!
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2006-10-16 22:19:39 | 显示全部楼层
自己用最笨的办法解决了,[s:5]
不调用uicode的winapi来获取OpenAL32.dll的路径就可以了。
只是这样做就必须用把OpenAL32.dll和生成的exe放在同一个目录下面。
唉,管他的,能用就行了。 [s:1]
え~え~お!!!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2006-10-17 22:24:03 | 显示全部楼层
看了另外一个音频引擎audiere,http://audiere.sourceforge.net/
它的API使用比OpenAL要简单了不少。
新的1.9.4版已经增加了windows下对midi和cd音轨的支持。
现在可以方便的使用wav,aiff,ogg,flac,mp3,mod,s3m,it,xm,midi,cd等众多的格式。
只是还没有直接支持3D声效。

附一个简单的例子
  1. #include <windows.h>
  2. #include <irrlicht.h>
  3. #include <audiere.h>
  4. #pragma comment (lib, "Irrlicht.lib")
  5. #pragma comment (lib, "audiere.lib")  
  6. using namespace irr;
  7. using namespace core;
  8. using namespace scene;
  9. using namespace video;
  10. using namespace io;
  11. using namespace gui;
  12. using namespace audiere;
  13. INT WINAPI WinMain ( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
  14. {
  15.     IrrlichtDevice *Device = createDevice(EDT_OPENGL, dimension2d<s32>(640, 480), 32, false, false, 0);
  16.     IVideoDriver   *Driver = Device->getVideoDriver();
  17.     IGUIEnvironment*env    = Device->getGUIEnvironment();
  18.     ISceneManager  *Scene  = Device->getSceneManager();
  19.    
  20.    //初始化音频
  21.     AudioDevicePtr  audiereDevice;
  22.     OutputStreamPtr  stream;
  23.     audiereDevice = OpenDevice();
  24.     if (!audiereDevice)
  25.      return 1;
  26.     stream = OpenSound(audiereDevice.get(), "demo.ogg", true); //载入ogg文件
  27.     if (!stream)
  28.      return 2;
  29.     stream->setRepeat(true);//并设定为循环播放
  30.     stream->setVolume(1.0f); //50%音量
  31.     stream->play(); //播放
  32.     while(Device->run())
  33.     {
  34.         Driver->beginScene(true, true, SColor(0,64,64,64));
  35.         Scene->drawAll();
  36.         
  37.         env->drawAll();
  38.         
  39.         Driver->endScene();
  40.     }
  41.     Device->drop();
  42.     return 0;
  43. }
复制代码
效果是出来一个空窗口,然后循环播放demo.ogg文件。
因为api设计的简洁明快,用起来也显得相当的简单。不多说了。
え~え~お!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-27 21:25 , Processed in 0.019643 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表