/* Copyright (c) 2002-2012 Croteam Ltd. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SE_INCL_WAVE_H #define SE_INCL_WAVE_H #ifdef PRAGMA_ONCE #pragma once #endif /* * PCM Wave Input */ class PCMWaveInput { private: // Wave data WAVEFORMATEX pwi_wfeWave; WAVEFORMATEX pwi_wfeDesired; ULONG pwi_ulRiffLength, pwi_ulDataLength; BOOL pwi_bInfoLoaded, pwi_bDataLoaded; // Status SWORD *pwi_pswMemory; // Memory /* Conversion */ DOUBLE pwi_dRatio; // get and store data inline ULONG GetData_t( CTStream *pCstrInput); inline void StoreData( ULONG ulData); void CopyData_t( CTStream *pCstrInput); void ShrinkData_t( CTStream *pCstrInput); public: // Check wave format static void CheckWaveFormat_t( WAVEFORMATEX SwfeCheck, const char *pcErrorString); /* Constructor */ inline PCMWaveInput(void) { pwi_bInfoLoaded = FALSE; pwi_bDataLoaded = FALSE; }; /* Load Wave info */ WAVEFORMATEX LoadInfo_t( CTStream *pCstrInput); /* Load and convert Wave data */ void LoadData_t( CTStream *pCstrInput, SWORD *pswMemory, WAVEFORMATEX &SwfeDesired); /* Length in bytes / blocks / seconds */ ULONG GetByteLength(void); ULONG GetDataLength(void); ULONG GetDataLength( WAVEFORMATEX SwfeDesired); DOUBLE GetSecondsLength(void); /* Buffer length in bytes */ ULONG DetermineBufferSize(void); ULONG DetermineBufferSize( WAVEFORMATEX SwfeDesired); }; #endif /* include-once check. */