llaudioengine_openal.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:3k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file audioengine_openal.cpp
  3.  * @brief implementation of audio engine using OpenAL
  4.  * support as a OpenAL 3D implementation
  5.  *
  6.  *
  7.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2002-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #ifndef LL_AUDIOENGINE_OPENAL_H
  35. #define LL_AUDIOENGINE_OPENAL_H
  36. #include "llaudioengine.h"
  37. #include "lllistener_openal.h"
  38. #include "llwindgen.h"
  39. class LLAudioEngine_OpenAL : public LLAudioEngine
  40. {
  41. public:
  42. LLAudioEngine_OpenAL();
  43. virtual ~LLAudioEngine_OpenAL();
  44. virtual bool init(const S32 num_channels, void *user_data);
  45.          virtual std::string getDriverName(bool verbose);
  46. virtual void allocateListener();
  47. virtual void shutdown();
  48. void setInternalGain(F32 gain);
  49. LLAudioBuffer* createBuffer();
  50. LLAudioChannel* createChannel();
  51. /*virtual*/ void initWind();
  52. /*virtual*/ void cleanupWind();
  53. /*virtual*/ void updateWind(LLVector3 direction, F32 camera_altitude);
  54. private:
  55. void * windDSP(void *newbuffer, int length);
  56.         typedef S16 WIND_SAMPLE_T;
  57.          LLWindGen<WIND_SAMPLE_T> *mWindGen;
  58.          S16 *mWindBuf;
  59.          U32 mWindBufFreq;
  60.          U32 mWindBufSamples;
  61.          U32 mWindBufBytes;
  62.          ALuint mWindSource;
  63.         int mNumEmptyWindALBuffers;
  64.          static const int MAX_NUM_WIND_BUFFERS = 80;
  65.          static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec
  66. };
  67. class LLAudioChannelOpenAL : public LLAudioChannel
  68. {
  69. public:
  70. LLAudioChannelOpenAL();
  71. virtual ~LLAudioChannelOpenAL();
  72. protected:
  73. /*virtual*/ void play();
  74. /*virtual*/ void playSynced(LLAudioChannel *channelp);
  75. /*virtual*/ void cleanup();
  76. /*virtual*/ bool isPlaying();
  77. /*virtual*/ bool updateBuffer();
  78. /*virtual*/ void update3DPosition();
  79. /*virtual*/ void updateLoop();
  80. ALuint mALSource;
  81.         ALint mLastSamplePos;
  82. };
  83. class LLAudioBufferOpenAL : public LLAudioBuffer{
  84. public:
  85. LLAudioBufferOpenAL();
  86. virtual ~LLAudioBufferOpenAL();
  87. bool loadWAV(const std::string& filename);
  88. U32 getLength();
  89. friend class LLAudioChannelOpenAL;
  90. protected:
  91. void cleanup();
  92. ALuint getBuffer() {return mALBuffer;}
  93. ALuint mALBuffer;
  94. };
  95. #endif