File: wavefilereader.h

package info (click to toggle)
cutesdr 1.20-4
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 2,848 kB
  • sloc: cpp: 18,902; makefile: 21; sh: 5
file content (75 lines) | stat: -rw-r--r-- 2,059 bytes parent folder | download | duplicates (2)
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