mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-17 16:38:20 -05:00
c3d1eb5cee
In an effort to reduce the processing overhead when transmitting I have suspended the audio input stream at source instead of the prior behavior that simply idled skipping received samples. This is in response to high activity levels, especially with JTAlert also running, when decode processing rolls over into the next TX period. Tests show a reduction in CPU loading from ~5% to ~1.5% in the above scenario. Hopefully this will reduce the likelyhood of TX audio glitches when other system activity spikes. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3986 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
51 lines
1.0 KiB
C++
51 lines
1.0 KiB
C++
// -*- Mode: C++ -*-
|
|
#ifndef SOUNDIN_H__
|
|
#define SOUNDIN_H__
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QScopedPointer>
|
|
#include <QAudioInput>
|
|
|
|
#include "AudioDevice.hpp"
|
|
|
|
class QAudioDeviceInfo;
|
|
class QAudioInput;
|
|
|
|
// Gets audio data from sound sample source and passes it to a sink device
|
|
class SoundInput
|
|
: public QObject
|
|
{
|
|
Q_OBJECT;
|
|
|
|
public:
|
|
SoundInput (QObject * parent = nullptr)
|
|
: QObject {parent}
|
|
, m_sink {nullptr}
|
|
{
|
|
}
|
|
|
|
~SoundInput ();
|
|
|
|
// sink must exist from the start call until the next start call or
|
|
// stop call
|
|
Q_SLOT void start(QAudioDeviceInfo const&, int framesPerBuffer, AudioDevice * sink, unsigned downSampleFactor, AudioDevice::Channel = AudioDevice::Mono);
|
|
Q_SLOT void suspend ();
|
|
Q_SLOT void resume ();
|
|
Q_SLOT void stop ();
|
|
|
|
Q_SIGNAL void error (QString message) const;
|
|
Q_SIGNAL void status (QString message) const;
|
|
|
|
private:
|
|
// used internally
|
|
Q_SLOT void handleStateChanged (QAudio::State) const;
|
|
|
|
bool audioError () const;
|
|
|
|
QScopedPointer<QAudioInput> m_stream;
|
|
AudioDevice * m_sink;
|
|
};
|
|
|
|
#endif
|