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