mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 09:01:59 -05:00
581691befb
The code was starting streams linked to closed devices which may be causing issues on the Mac version. I have refactored to ensure that devices are always opened before related audio streams are started. Made .h C++ headers emacs friendly. Removed some code in the MainWindow contructor that read the log file but failed to check if the file exists and didn't do anything with the data anyway. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3977 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
#ifndef DETECTOR_HPP__
|
|
#define DETECTOR_HPP__
|
|
|
|
#include "AudioDevice.hpp"
|
|
|
|
#include <QScopedArrayPointer>
|
|
|
|
//
|
|
// output device that distributes data in predefined chunks via a signal
|
|
//
|
|
// the underlying device for this abstraction is just the buffer that
|
|
// stores samples throughout a receiving period
|
|
//
|
|
class Detector : public AudioDevice
|
|
{
|
|
Q_OBJECT;
|
|
|
|
Q_PROPERTY (bool monitoring READ isMonitoring WRITE setMonitoring);
|
|
|
|
public:
|
|
//
|
|
// if the data buffer were not global storage and fixed size then we
|
|
// might want maximum size passed as constructor arguments
|
|
//
|
|
// we down sample by a factor of 4
|
|
//
|
|
// the framesPerSignal argument is the number after down sampling
|
|
//
|
|
Detector (unsigned frameRate, unsigned periodLengthInSeconds, unsigned framesPerSignal, unsigned downSampleFactor = 4u, QObject * parent = 0);
|
|
|
|
bool isMonitoring () const {return m_monitoring;}
|
|
|
|
Q_SLOT void setMonitoring (bool newState) {m_monitoring = newState; m_bufferPos = 0;}
|
|
Q_SLOT bool reset ();
|
|
|
|
Q_SIGNAL void framesWritten (qint64) const;
|
|
|
|
protected:
|
|
qint64 readData (char * /* data */, qint64 /* maxSize */)
|
|
{
|
|
return -1; // we don't produce data
|
|
}
|
|
|
|
qint64 writeData (char const * data, qint64 maxSize);
|
|
|
|
private:
|
|
void clear (); // discard buffer contents
|
|
unsigned secondInPeriod () const;
|
|
|
|
unsigned m_frameRate;
|
|
unsigned m_period;
|
|
unsigned m_downSampleFactor;
|
|
qint32 m_framesPerSignal; // after any down sampling
|
|
bool volatile m_monitoring;
|
|
bool m_starting;
|
|
QScopedArrayPointer<short> m_buffer; // de-interleaved sample buffer
|
|
// big enough for all the
|
|
// samples for one increment of
|
|
// data (a signals worth) at
|
|
// the input sample rate
|
|
unsigned m_bufferPos;
|
|
};
|
|
|
|
#endif
|