mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6122 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef MODULATOR_HPP__
 | 
						|
#define MODULATOR_HPP__
 | 
						|
 | 
						|
#include <QAudio>
 | 
						|
#include <QPointer>
 | 
						|
 | 
						|
#include "AudioDevice.hpp"
 | 
						|
 | 
						|
class SoundOutput;
 | 
						|
 | 
						|
//
 | 
						|
// Input device that generates PCM audio frames that encode a message
 | 
						|
// and an optional CW ID.
 | 
						|
//
 | 
						|
// Output can be muted while underway, preserving waveform timing when
 | 
						|
// transmission is resumed.
 | 
						|
//
 | 
						|
class Modulator
 | 
						|
  : public AudioDevice
 | 
						|
{
 | 
						|
  Q_OBJECT;
 | 
						|
 | 
						|
public:
 | 
						|
  enum ModulatorState {Synchronizing, Active, Idle};
 | 
						|
 | 
						|
  Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent = nullptr);
 | 
						|
 | 
						|
  void close () override;
 | 
						|
 | 
						|
  bool isTuning () const {return m_tuning;}
 | 
						|
  double frequency () const {return m_frequency;}
 | 
						|
  bool isActive () const {return m_state != Idle;}
 | 
						|
  void setSpread(double s) {m_fSpread=s;}
 | 
						|
  void setPeriod(unsigned p) {m_period=p;}
 | 
						|
 | 
						|
  Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, double frequency,
 | 
						|
                     double toneSpacing, SoundOutput *, Channel = Mono,
 | 
						|
                     bool synchronize = true, bool fastMode = false,
 | 
						|
                     double dBSNR = 99., int TRperiod=60);
 | 
						|
  Q_SLOT void stop (bool quick = false);
 | 
						|
  Q_SLOT void tune (bool newState = true);
 | 
						|
  Q_SLOT void setFrequency (double newFrequency) {m_frequency = newFrequency;}
 | 
						|
  Q_SIGNAL void stateChanged (ModulatorState) const;
 | 
						|
 | 
						|
protected:
 | 
						|
  qint64 readData (char * data, qint64 maxSize);
 | 
						|
  qint64 writeData (char const * /* data */, qint64 /* maxSize */)
 | 
						|
  {
 | 
						|
    return -1;			// we don't consume data
 | 
						|
  }
 | 
						|
 | 
						|
private:
 | 
						|
  qint16 postProcessSample (qint16 sample) const;
 | 
						|
 | 
						|
  QPointer<SoundOutput> m_stream;
 | 
						|
  bool m_quickClose;
 | 
						|
 | 
						|
  unsigned m_symbolsLength;
 | 
						|
 | 
						|
  static double const m_twoPi;
 | 
						|
  static unsigned const m_nspd;	// CW ID WPM factor
 | 
						|
 | 
						|
  double m_phi;
 | 
						|
  double m_dphi;
 | 
						|
  double m_amp;
 | 
						|
  double m_nsps;
 | 
						|
  double volatile m_frequency;
 | 
						|
  double m_frequency0;
 | 
						|
  double m_snr;
 | 
						|
  double m_fac;
 | 
						|
  double m_toneSpacing;
 | 
						|
  double m_fSpread;
 | 
						|
 | 
						|
  qint64 m_silentFrames;
 | 
						|
  qint32 m_itone0;
 | 
						|
  qint32 m_TRperiod;
 | 
						|
  qint16 m_ramp;
 | 
						|
 | 
						|
  unsigned m_frameRate;
 | 
						|
  unsigned m_period;
 | 
						|
  ModulatorState volatile m_state;
 | 
						|
 | 
						|
  bool volatile m_tuning;
 | 
						|
  bool m_addNoise;
 | 
						|
  bool m_bFastMode;
 | 
						|
 | 
						|
  bool m_cwLevel;
 | 
						|
  unsigned m_ic;
 | 
						|
  unsigned m_isym0;
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |