"L. Spiro Engine"
|
00001 00018 #ifndef __LSS_CORESOUNDMANAGER_H__ 00019 #define __LSS_CORESOUNDMANAGER_H__ 00020 00021 #include "../LSSSoundLib.h" 00022 #include "../Ogg/LSSOggStreamingSoundSourceStreamer.h" 00023 #include "../SoundComponents/LSSStaticSoundSource2d.h" 00024 #include "../SoundComponents/LSSStaticSoundSource3d.h" 00025 #include "../SoundComponentsEx/LSSSoundBufferEx.h" 00026 #include "../Wave/LSSWaveStreamingSoundSourceStreamer.h" 00027 #include "LSSSoundManager.h" 00028 //#include "LSESfxData.h" 00029 #include "Search/LSSTDSearch.h" 00030 #include "Vector/LSMVector2.h" 00031 00032 namespace lss { 00033 00042 class CSoundManagerEx : public CSoundManager { 00043 public : 00044 // == Various constructors. 00045 LSE_CALLCTOR CSoundManagerEx(); 00046 virtual LSE_CALLCTOR ~CSoundManagerEx(); 00047 00048 00049 // == Functions. 00057 virtual LSVOID LSE_CALL SetAllocator( CAllocator * _paAllocator ); 00058 00066 LSUINT32 LSE_CALL CreateBuffer( const LSCHAR * _pcFile ); 00067 00074 LSUINT32 LSE_CALL FindBufferByPath( const LSCHAR * _pwcPath ) const; 00075 00084 LSCHAR * LSE_CALL GetBufferPathById( LSUINT32 _ui32Id, LSCHAR * _pcRet ) const; 00085 00103 CStaticSoundSource3d * LSE_CALL Create3dStaticSoundSourceAndLock( const CVector3 &_vPos, 00104 LSREAL _fGain = LSM_ONE, 00105 LSREAL _fMaxDistance = static_cast<LSREAL>(256.0), 00106 const LSCHAR * _pcFile = NULL, 00107 LSUINT32 _ui32Id = 0UL ); 00108 00123 CStaticSoundSource2d * LSE_CALL Create2dStaticSoundSourceAndLock( const CVector2 &_vPos, 00124 LSREAL _fGain = LSM_ONE, 00125 const LSCHAR * _pcFile = NULL ); 00126 00138 /*LSUINT32 LSE_CALL Play3dSound( LSUINT32 _ui32SfxId, 00139 const CVector3 &_vPos, 00140 LSREAL _fGain = LSM_ONE, 00141 LSREAL _fMaxDistance = static_cast<LSREAL>(256.0) );*/ 00142 00153 /*LSUINT32 LSE_CALL Play2dSound( LSUINT32 _ui32SfxId, 00154 const CVector2 &_vPos, 00155 LSREAL _fGain = LSM_ONE );*/ 00156 00164 //LSUINT32 LSE_CALL RegisterSfx( const LSE_SFX_DATA &_sdData ); 00165 00172 //LSBOOL LSE_CALL UnRegisterSfx( LSUINT32 _ui32Id ); 00173 00180 LSBOOL LSE_CALL RegisterWaveForStream( const LSCHAR * _pcFile ); 00181 00188 LSBOOL LSE_CALL RegisterOggForStream( const LSCHAR * _pcFile ); 00189 00196 LSBOOL LSE_CALL RegisterSoundForStream( const LSCHAR * _pcFile ); 00197 00206 CStreamingSoundSource * LSE_CALL Create2dStreamSoundSourceAndLock( const LSCHAR * _pcName, const CVector2 &_vPos, LSREAL _fGain = LSM_ONE ); 00207 00222 LSUINT32 LSE_CALL Play2dStreamEx( const LSCHAR * _pcName, 00223 const CVector2 &_vPos = CVector2( LSM_ZERO, LSM_ZERO ), 00224 LSREAL _fGain = LSM_ONE, 00225 LSUINT32 _ui32Loop = CSoundSource::LSS_LM_INFINITE, 00226 LSBOOL _bOnlyPlayIfNotPlaying = true, 00227 LSBOOL _bClearAllStreamsIfPlayed = true ); 00228 00236 LSUINT32 LSE_CALL SoundIsStreaming( const LSCHAR * _pcName ) const; 00237 00243 LSVOID LSE_CALL ClearAllStreamsExcept( LSUINT32 _ui32Id ); 00244 00248 virtual LSVOID LSE_CALL ResetAllSounds(); 00249 00254 virtual LSVOID LSE_CALL SoftReset(); 00255 00256 protected : 00257 // == Types. 00258 // SFX data. When the user wants to register a sound-effect for easy playing later. 00259 // We extend LSE_SFX_DATA to add an ID that we can use to look up the data. 00260 typedef struct LSE_CORE_SFX_DATA { 00261 // The unique ID of for this data. 00262 LSUINT32 ui32Id; 00263 00264 // The ID of the buffer or 0 if not loaded. 00265 LSUINT32 ui32BufferId; 00266 00267 // The data. 00268 //LSE_SFX_DATA sdData; 00269 } * LPLSE_CORE_SFX_DATA, * LPCLSE_CORE_SFX_DATA; 00270 00271 00272 // == Members. 00273 // The SFX data registered with the system. Sorted by ID. 00274 CVectorPoD<LSE_CORE_SFX_DATA> m_csdSfxData; 00275 00279 static LSUINT32 m_ui32SfxId; 00280 00281 00282 // == Functions. 00297 virtual CSoundBuffer * LSE_CALL NewBuffer( const LSUINT8 * _pui8Data, LSUINT32 _ui32Length, 00298 LSUINT32 _ui32Freq, LSUINT32 _ui32Bits, LSUINT32 _ui32Channels, LSBOOL _bRetain, LSUINTPTR _uiptrUserData ) const; 00299 00305 virtual LSVOID LSE_CALL DeleteBuffer( CSoundBuffer * &_psbBuffer ) const; 00306 00314 virtual CSoundSource * LSE_CALL NewSoundSource( LSS_SOUND_SOURCE _ssType, LSUINT32 _ui32Id ) const; 00315 00321 virtual LSVOID LSE_CALL DeleteSource( CSoundSource * &_pssSource ) const; 00322 00328 virtual LSVOID LSE_CALL DeleteStreamer( IStreamingSoundSourceStreamer * _pssssSteamer ); 00329 00330 // Find SFX data by ID fast. Returns NULL if not found. 00331 //const LSE_CORE_SFX_DATA * LSE_CALL FindSfxData( LSUINT32 _ui32Id ) const; 00332 00334 //static LSINT32 LSE_CCALL SfxCompare( LSVOID * _pvContext, 00335 // const LSUINT32 * _pui32Left, const LSE_CORE_SFX_DATA * _pcsdRight ); 00336 00337 00338 private : 00339 typedef CSoundManager Parent; 00340 00341 00342 // == Functions. 00350 /*LSBOOL LSE_CALL PlayStaticSource( CSoundSource * _pssSource, 00351 const LSE_CORE_SFX_DATA * _pcsdData );*/ 00352 }; 00353 00354 } // namespace lss 00355 00356 #endif // __LSS_CORESOUNDMANAGER_H__