"L. Spiro Engine"
|
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__