"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSSoundLib/Src/Wave/LSSWaveLoader.h

00001 
00017 #ifndef __LSS_WAVELOADER_H__
00018 #define __LSS_WAVELOADER_H__
00019 
00020 #include "../LSSSoundLib.h"
00021 #include "Allocator/LSTLAllocator.h"
00022 #include "HighLevel/LSFFileMap.h"
00023 #include "HighLevel/LSFFilesEx.h"
00024 
00025 namespace lss {
00026 
00032         class CWaveLoader {
00033         public :
00034                 // == Enumerations.
00038                 enum LSE_WAVE_EXTENSIBLE {
00039                         LSE_WE_PCM                                                                                      = 1,
00040                         LSE_WE_EXTENSIBLE                                                                       = 0xFFFE,
00041                         LSE_WE_EXTPERIMENTAL                                                            = 0xFFFF,
00042                 };
00043 
00044                 // == Types.
00048                 typedef struct LSE_WAVE_FILE_INFO {
00052                         LSUINTPTR                                                                                       uiptrOffsetToWaveData;
00053 
00057                         LSUINT32                                                                                        ui32WaveLength;
00058 
00062                         LSUINT32                                                                                        ui32Freq;
00063 
00067                         LSUINT32                                                                                        ui32Bits;
00068 
00072                         LSUINT32                                                                                        ui32Channels;
00073 
00077                         LSE_WAVE_EXTENSIBLE                                                                     weCompression;
00078 
00082                         LSUINT32                                                                                        ui32ChannelMask;
00083                 } * LPLSE_WAVE_FILE_INFO, * const LPCLSE_WAVE_FILE_INFO;
00084 
00085 
00086                 // == Functions.
00095                 static LSBOOL LSE_CALL                                                                  GetWaveInfo( const LSUINT8 * _pui8File, LSUINT32 _ui32FileLen,
00096                         LSE_WAVE_FILE_INFO &_wfiInfo );
00097 
00105                 static LSBOOL LSE_CALL                                                                  GetWaveInfo( const CFileMap &_fmMap,
00106                         LSE_WAVE_FILE_INFO &_wfiInfo );
00107 
00123                 static LSBOOL LSE_CALL                                                                  LoadWavFile( const LSCHAR * _pcFile,
00124                         LSUINT8 * &_pui8Data, LSUINT32 &_ui32Length,
00125                         LSUINT32 &_ui32Freq, LSUINT32 &_ui32Bits, LSUINT32 &_ui32Channels, CAllocator * _paAllocator );
00126 
00141                 static LSBOOL LSE_CALL                                                                  LoadWavFile( const LSUINT8 * _pui8File, LSUINT32 _ui32FileLen,
00142                         LSUINT8 * &_pui8Data, LSUINT32 &_ui32Length,
00143                         LSUINT32 &_ui32Freq, LSUINT32 &_ui32Bits, LSUINT32 &_ui32Channels, CAllocator * _paAllocator );
00144 
00145 
00146         protected :
00147                 // == Enumerations.
00152                 enum LSS_WAVE_SPEAKERS {
00153                         LSS_SPEAKER_FRONT_LEFT                                                          = (1 << 0),
00154                         LSS_SPEAKER_FRONT_RIGHT                                                         = (1 << 1),
00155                         LSS_SPEAKER_FRONT_CENTER                                                        = (1 << 2),
00156                         LSS_SPEAKER_LOW_FREQUENCY                                                       = (1 << 3),
00157                         LSS_SPEAKER_BACK_LEFT                                                           = (1 << 4),
00158                         LSS_SPEAKER_BACK_RIGHT                                                          = (1 << 5),
00159                         LSS_SPEAKER_FRONT_LEFT_OF_CENTER                                        = (1 << 6),
00160                         LSS_SPEAKER_FRONT_RIGHT_OF_CENTER                                       = (1 << 7),
00161                         LSS_SPEAKER_BACK_CENTER                                                         = (1 << 8),
00162                         LSS_SPEAKER_SIDE_LEFT                                                           = (1 << 9),
00163                         LSS_SPEAKER_SIDE_RIGHT                                                          = (1 << 10),
00164                         LSS_SPEAKER_TOP_CENTER                                                          = (1 << 11),
00165                         LSS_SPEAKER_TOP_FRONT_LEFT                                                      = (1 << 12),
00166                         LSS_SPEAKER_TOP_FRONT_CENTER                                            = (1 << 13),
00167                         LSS_SPEAKER_TOP_FRONT_RIGHT                                                     = (1 << 14),
00168                         LSS_SPEAKER_TOP_BACK_LEFT                                                       = (1 << 15),
00169                         LSS_SPEAKER_TOP_BACK_CENTER                                                     = (1 << 16),
00170                         LSS_SPEAKER_TOP_BACK_RIGHT                                                      = (1 << 17),
00171                         LSS_SPEAKER_ANY                                                                         = 0x80000000,
00172                 };
00173 
00174 
00175                 // == Types.
00176 
00177 #pragma pack( push, 1 )
00178 
00181                 typedef struct LSE_WAVE_FILE_HEADER {
00185                         LSUINT8                                                                                         ui8Header[4];
00186 
00190                         LSUINT32                                                                                        ui32Size;
00191                         
00195                         LSUINT8                                                                                         ui8Wave[4];
00196                 } * LPLSE_WAVE_FILE_HEADER, * const LPCLSE_WAVE_FILE_HEADER;
00197 
00201                 typedef struct LSE_WAVE_FILE_CHUNK_HEADER {
00205                         LSUINT8                                                                                         ui8Name[4];
00206                         
00210                         LSUINT32                                                                                        ui32Size;
00211                         
00215                         LSUINT8                                                                                         ui8Data[1];
00216                 } * LPLSE_WAVE_FILE_CHUNK_HEADER, * const LPCLSE_WAVE_FILE_CHUNK_HEADER;
00217 
00221                 typedef struct LSE_WAVE_FILE_FMT_DATA {
00225                         LSUINT16                                                                                        ui16Compression;
00226                         
00230                         LSUINT16                                                                                        ui16Channels;
00231                         
00235                         LSUINT32                                                                                        ui32Frequency;
00236                         
00240                         LSUINT32                                                                                        ui32BytesPerSecond;
00241                         
00245                         LSUINT16                                                                                        ui16Align;
00246                         
00250                         LSUINT16                                                                                        ui16BitsPerSample;
00251 
00255                         union {
00256                                 LSUINT16                                                                                ui16ValidBitsPerSample;
00257                                 LSUINT16                                                                                ui16SamplesPerBlock;
00258                                 LSUINT16                                                                                ui16Reserved;
00259                         }                                                                                                       uSamples;
00260                         LSUINT16                                                                                        ui16Pad;
00261                         
00265                         LSUINT32                                                                                        ui32ChannelMask;
00266                 } * LPLSE_WAVE_FILE_FMT_DATA, * const LPCLSE_WAVE_FILE_FMT_DATA;
00267 #pragma pack( pop )
00268 
00269 
00270                 // == Functions.
00280                 static const LPLSE_WAVE_FILE_CHUNK_HEADER LSE_CALL              FindChunk( const LSCHAR * _pcName, const LSUINT8 * _pui8Data, LSUINT32 _ui32Len );
00281 
00290                 static const LSUINT64 LSE_CALL                                                  FindChunk( const LSCHAR * _pcName, const CFileMap &_fmMap );
00291 
00300                 static CSoundLib::LSS_CHANNELS LSE_CALL                                 FindSoundLibraryFormat( LSUINT32 _ui32Channels, LSUINT32 _ui32Bits );
00301 
00312                 static LSBOOL LSE_CALL                                                                  GetWaveInfo( const LSE_WAVE_FILE_HEADER &_wfhHeader,
00313                         const LSE_WAVE_FILE_FMT_DATA &_wffdFmt,
00314                         const LSE_WAVE_FILE_CHUNK_HEADER &_wfchData,
00315                         LSUINT64 _ui64FileLen,
00316                         LSE_WAVE_FILE_INFO &_wfiInfo );
00317         };
00318 
00319 }       // namespace lss
00320 
00321 #endif  // __LSS_WAVELOADER_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator