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 67 68 69 70 71 72 73 74 75
|
/****************************************************************************
****************************************************************************/
#ifndef WAVEFILEREADER_H
#define WAVEFILEREADER_H
#include <QObject>
#include <QFile>
#include <QAudioFormat>
#include "dsp/datatypes.h"
struct sFmtSubChunk
{
quint16 audioFormat;
quint16 numChannels;
quint32 sampleRate;
quint32 byteRate;
quint16 blockAlign;
quint16 bitsPerSample;
quint8 cbSizePad[24];
}__attribute__((gcc_struct,packed));
struct sAuxiSubChunk
{
sSYSTEMTIME StartTime;
sSYSTEMTIME StopTime;
quint32 CenterFreq;
quint32 ADFrequency;
quint32 IFFrequency;
quint32 Bandwidth;
quint32 IQOffset;
quint32 DBOffset;
quint32 MaxVal;
quint32 Unused4;
quint32 Unused5;
quint32 Unused6;
}__attribute__((gcc_struct,packed));
#define MAX_HEADER 128 //max expected size of header
#define MAX_RDDATABLK 8192 //max bytes per data block read
class CWaveFileReader : public QFile
{
Q_OBJECT
public:
CWaveFileReader(QObject *parent = 0);
~CWaveFileReader();
using QFile::open;
bool open(const QString &fileName);
//overloaded read functions
int GetNextDataBlock(tStereo16* pData, int NumSamples); //for complex 16 bit ints
int GetNextDataBlock(qint16* pData, int NumSamples); //for real 16 bit ints
int GetNextDataBlock(TYPECPX* pData, int NumSamples); //for complex 16 bit ints
int GetNextDataBlock(TYPEREAL* pData, int NumSamples); //for real 16 bit ints
qint64 GetCenterFrequency(){return m_CenterFrequency;}
quint32 GetSampleRate(){return m_FmtSubChunk.sampleRate;}
quint32 GetNumberSamples(){return m_NumSamples;}
void ResetToBeginning(void);
QString m_FileInfoStr;
private:
bool readHeader();
bool FindSubChunk(const char*Id, quint32* pStart, quint32* pLength);
quint8 m_HeaderBuffer[MAX_HEADER];
quint8 m_DataBuffer[MAX_RDDATABLK];
quint32 m_NumSamples;
quint32 m_CenterFrequency;
quint32 m_DataStartPosition;
quint32 m_DataLength;
sFmtSubChunk m_FmtSubChunk;
sAuxiSubChunk m_AuxiSubChunk;
};
#endif // WAVEFILEREADER_H
|