1#ifndef APE_WAVINPUTSOURCE_H 2#define APE_WAVINPUTSOURCE_H 3 4#include "All.h" 5#include "IO.h" 6#include "NoWindows.h" 7#include "SmartPtr.h" 8 9/************************************************************************************* 10CInputSource - base input format class (allows multiple format support) 11*************************************************************************************/ 12class CInputSource 13{ 14public: 15 16 // construction / destruction 17 CInputSource(CIO * pIO, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL) { } 18 CInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL) { } 19 virtual ~CInputSource() { } 20 21 // get data 22 virtual int GetData(unsigned char * pBuffer, int nBlocks, int * pBlocksRetrieved) = 0; 23 24 // get header / terminating data 25 virtual int GetHeaderData(unsigned char * pBuffer) = 0; 26 virtual int GetTerminatingData(unsigned char * pBuffer) = 0; 27}; 28 29/************************************************************************************* 30CWAVInputSource - wraps working with WAV files (could be extended to any format) 31*************************************************************************************/ 32class CWAVInputSource : public CInputSource 33{ 34public: 35 36 // construction / destruction 37 CWAVInputSource(CIO * pIO, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL); 38 CWAVInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL); 39 ~CWAVInputSource(); 40 41 // get data 42 int GetData(unsigned char * pBuffer, int nBlocks, int * pBlocksRetrieved); 43 44 // get header / terminating data 45 int GetHeaderData(unsigned char * pBuffer); 46 int GetTerminatingData(unsigned char * pBuffer); 47 48private: 49 50 int AnalyzeSource(); 51 52 CSmartPtr<CIO> m_spIO; 53 54 WAVEFORMATEX m_wfeSource; 55 int m_nHeaderBytes; 56 int m_nDataBytes; 57 int m_nTerminatingBytes; 58 int m_nFileBytes; 59 BOOL m_bIsValid; 60}; 61 62/************************************************************************************* 63Input souce creation 64*************************************************************************************/ 65extern "C" { // SHINTA: export 66 DLLEXPORT CInputSource* __stdcall CreateInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL); 67} 68 69#endif // #ifndef APE_WAVINPUTSOURCE_H 70