"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSSoundLib/Src/LSSSoundLib.h

00001 
00017 #ifndef __LSS_SOUNDLIB_H__
00018 #define __LSS_SOUNDLIB_H__
00019 
00020 // Include the memory library.
00021 #include "LSAMemLib.h"
00022 using namespace ::lsa;
00023 
00024 // Include the file library.
00025 #include "LSFFileLib.h"
00026 using namespace ::lsf;
00027 
00028 // Include the thread library.
00029 #include "LSHThreadLib.h"
00030 using namespace ::lsh;
00031 
00032 // Include the math library.
00033 #include "LSMMathLib.h"
00034 using namespace ::lsm;
00035 
00036 // Include the standard library.
00037 #include "LSSTDStandardLib.h"
00038 using namespace ::lsstd;
00039 
00040 // Include the LSTL.
00041 #include "LSTLib.h"
00042 using namespace ::lstl;
00043 
00044 
00045 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00046 // OPTIONS
00047 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00048 // Do we use OpenAL for this sound implementation?
00049 #define LSS_USEOPENAL
00050 
00051 #ifdef LSS_USEOPENAL
00052 #if defined( LSE_IPHONE ) || defined( LSE_MAC )
00053 #include <OpenAL/al.h>
00054 #include <OpenAL/alc.h>
00055 #else
00056 #include "al.h"
00057 #include "alc.h"
00058 #endif  // #ifdef LSE_IPHONE
00059 #endif  // #ifdef LSS_USEOPENAL
00060 
00061 
00062 namespace lss {
00063 
00064         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00065         // TYPES
00066         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00067         // Define the precision used in our library.
00068 #ifdef LSS_USEOPENAL
00069         typedef ALfloat                                                 LSSREAL;
00070 #else   // #ifdef LSS_USEOPENAL
00071         typedef LSSFLOAT                                                LSSREAL;
00072 #endif  // #ifdef LSS_USEOPENAL
00073 
00079         class CSoundLib {
00080         public :
00081                 // == Enumerations.
00085                 enum LSS_CHANNELS {
00086                         LSS_C_MONO8,
00087                         LSS_C_MONO16,
00088                         LSS_C_MONO_FLOAT32,
00089                         LSS_C_STEREO8,
00090                         LSS_C_STEREO16,
00091                         LSS_C_STEREO_FLOAT32,
00092                         LSS_C_MONO_IMA4,
00093                         LSS_C_STEREO_IMA4,
00094                         LSS_C_QUAD8_LOKI,
00095                         LSS_C_QUAD16_LOKI,
00096                         LSS_C_QUAD8,
00097                         LSS_C_QUAD16,
00098                         LSS_C_QUAD32,
00099                         LSS_C_51CHN8,
00100                         LSS_C_51CHN16,
00101                         LSS_C_51CHN32,
00102                         LSS_C_61CHN8,
00103                         LSS_C_61CHN16,
00104                         LSS_C_61CHN32,
00105                         LSS_C_71CHN8,
00106                         LSS_C_71CHN16,
00107                         LSS_C_71CHN32,
00108                         LSS_C_REAR8,
00109                         LSS_C_REAR16,
00110                         LSS_C_REAR32,
00111                         LSS_C_TOTAL
00112                 };
00113 
00114 
00115                 // == Functions.
00119                 static LSVOID LSE_CALL                  InitSoundLibrary();
00120 
00124                 static LSVOID LSE_CALL                  PostInitSoundLibrary();
00125 
00129                 static LSVOID LSE_CALL                  ShutDownSoundLibrary();
00130 
00136                 static LSUINT32 LSE_CALL                        GetTotalDevices();
00137 
00145                 static LSUINT32 LSE_CALL                        GetLongestDeviceName();
00146 
00160                 static LSBOOL LSE_CALL                  GetDeviceNameByIndex( LSUINT32 _ui32Index,
00161                         LSCHAR * _pcNameReturn, LSUINT32 _ui32MaxLen );
00162 
00169                 static LSBOOL LSE_CALL                  ChannelArrangementSupported( LSS_CHANNELS _cArrangement );
00170 
00177                 static LSUINT32 LSE_CALL                        GetOsChannelEnum( LSS_CHANNELS _cArrangement );
00178 
00185                 static LSUINT32 LSE_CALL                        GetBitsPerChannel( LSS_CHANNELS _cArrangement );
00186 
00193                 static LSUINT32 LSE_CALL                        GetChannels( LSS_CHANNELS _cArrangement );
00194 
00195         protected :
00196                 // == Types.
00197 #ifdef LSS_USEOPENAL
00198 
00201                 typedef struct LSS_CHANNEL_ARRANGEMENT {
00205                         const LSCHAR *                                  pcEnumName;
00206 
00210                         LSUINT32                                                ui32EnumValue;
00211 
00215                         LSUINT32                                                ui32Bits;
00216                         
00220                         LSUINT32                                                ui32Channels;
00221                 } * LPLSS_CHANNEL_ARRANGEMENT, * const LPCLSS_CHANNEL_ARRANGEMENT;
00222 #endif  // #ifdef LSS_USEOPENAL
00223 
00224                 // == Members.
00225 
00226 #ifdef LSS_USEOPENAL
00227                 // Do we have the ability to enumerate devices?
00228                 static LSBOOL                                           m_bEnumDevices;
00229 
00230                 // String of device names.  Each name is terminated with a NULL.  The end of the list is
00231                 //      terminated with 2 NULL's.
00232                 static const ALCchar *                          m_pcDevices;
00233 
00234                 // Total number of devices.
00235                 static LSUINT32                                 m_ui32Devices;
00236 
00237                 // Longest device name (including its terminating NULL).
00238                 static LSUINT32                                 m_ui32MaxDeviceNameLength;
00239 
00240                 // Various enumerated values indicating the number and arrangement of channels.
00241                 static LSS_CHANNEL_ARRANGEMENT          m_caChannels[LSS_C_TOTAL];
00242 
00243 #endif  // #ifdef LSS_USEOPENAL
00244 
00245         };
00246 
00247 }       // namespace lss
00248 
00249 #endif  // __LSS_SOUNDLIB_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator