Files
cudaSDR/Source/src/DataEngine/soundout.h
T
2015-04-04 16:53:58 -04:00

77 lines
2.1 KiB
C++

//////////////////////////////////////////////////////////////////////
// soundout.h: interface for the CSoundOut class.
//
// History:
// 2010-09-15 Initial creation MSW
// 2011-03-27 Initial release
/////////////////////////////////////////////////////////////////////
#ifndef SOUNDOUT_H
#define SOUNDOUT_H
#include <QObject>
#include <QThread>
#include <QList>
#include <QMutex>
#include <QAudioOutput>
#include "fractresampler.h"
#include <alsa/asoundlib.h>
#include <alsa/mixer.h>
#define OUTQSIZE 16384 //max samples (keep power of 2 for ptr wrap around)
#define SOUND_WRITEBUFSIZE 8192
class CSoundOut : public QThread
{
Q_OBJECT
public:
explicit CSoundOut(QObject *parent = 0);
virtual ~CSoundOut();
//Exposed functions
bool Start(int OutDevIndx, bool StereoOut, double UsrDataRate, bool BlockingMode); //starts soundcard output
void Stop(); //stops soundcard output
void PutOutQueue(int numsamples, TYPEREAL* pData );
void PutOutQueue(int numsamples, TYPECPX* pData );
void ChangeUserDataRate(double UsrDataRate);
void SetVolume(qint32 vol);
int GetRateError(){return (int)m_PpmError;}
protected:
void run(); //implements worker thread loop
int m_BlockTime;
private:
void GetOutQueue(int numsamples, TYPEMONO16* pData );
void GetOutQueue(int numsamples, TYPESTEREO16* pData );
void CalcError();
QList<QAudioDeviceInfo> m_OutDevices;
QAudioDeviceInfo m_OutDeviceInfo;
QAudioFormat m_OutAudioFormat;
QAudioOutput* m_pAudioOutput;
QIODevice* m_pOutput; // ptr to internal soundout IODevice
QObject* m_pParent;
QMutex m_Mutex;
CFractResampler m_OutResampler;
TYPEMONO16 m_OutQueueMono[OUTQSIZE];
TYPESTEREO16 m_OutQueueStereo[OUTQSIZE];
bool m_BlockingMode;
bool m_ThreadQuit;
bool m_Startup;
bool m_StereoOut;
bool m_UpdateToggle;
quint32 m_OutQHead;
quint32 m_OutQTail;
char m_pData[SOUND_WRITEBUFSIZE];
int m_RateUpdateCount;
int m_OutQLevel;
int m_PpmError;
double m_Gain;
double m_UserDataRate;
double m_OutRatio;
double m_RateCorrection;
double m_AveOutQLevel;
};
#endif // SOUNDOUT_H