1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <fstream>
#include "wave.h"
using namespace std;
static int FileSize(ifstream & f);
CWaveStream::CWaveStream(const char * lpFileName)
{
ifstream f(lpFileName, ios::binary);
if (f.is_open())
{
int fsize = FileSize(f);
lpBuffer = new char [fsize];
if (lpBuffer != NULL)
f.read(lpBuffer, fsize);
f.close();
}
else
lpBuffer = NULL;
}
const WAVEFILEHDR * CWaveStream::FileHeader()
{
return (WAVEFILEHDR *)lpBuffer;
}
const WAVEFMT * CWaveStream::Format()
{
return (WAVEFMT *)(lpBuffer + sizeof(WAVEFILEHDR));
}
const WAVEDATAHDR * CWaveStream::DataHeader()
{
return (WAVEDATAHDR *)(lpBuffer + sizeof(WAVEFILEHDR) + sizeof(WAVEFMT));
}
const unsigned char * CWaveStream::Data()
{
return (unsigned char *)(lpBuffer + sizeof(WAVEFILEHDR) + sizeof(WAVEFMT) + sizeof(WAVEDATAHDR));
}
CWaveStream::~CWaveStream()
{
if (lpBuffer != NULL)
delete [] lpBuffer;
}
int FileSize(ifstream & f)
{
ifstream::pos_type cur_pos = f.tellg();
f.seekg(0, ios_base::beg);
ifstream::pos_type beg_pos = f.tellg();
f.seekg(0, ios_base::end);
ifstream::pos_type end_pos = f.tellg();
f.seekg(cur_pos, ios_base::beg);
return int(end_pos - beg_pos);
} |