12 #ifndef hifi_AudioScope_h
13 #define hifi_AudioScope_h
15 #include <glm/glm.hpp>
20 #include <DependencyManager.h>
21 #include <gpu/Batch.h>
24 class AudioScope :
public QObject,
public Dependency {
47 Q_PROPERTY(QVector<int> scopeInput READ getScopeInput)
48 Q_PROPERTY(QVector<int> scopeOutputLeft READ getScopeOutputLeft)
49 Q_PROPERTY(QVector<int> scopeOutputRight READ getScopeOutputRight)
51 Q_PROPERTY(QVector<int> triggerInput READ getTriggerInput)
52 Q_PROPERTY(QVector<int> triggerOutputLeft READ getTriggerOutputLeft)
53 Q_PROPERTY(QVector<int> triggerOutputRight READ getTriggerOutputRight)
59 void reallocateScope(
int frames);
67 void toggle() { setVisible(!_isEnabled); }
74 void setVisible(
bool visible);
81 bool getVisible()
const {
return _isEnabled; }
87 void togglePause() { setPause(!_isPaused); }
94 void setPause(
bool paused) { _isPaused = paused; emit pauseChanged(); }
101 bool getPause() {
return _isPaused; }
107 void toggleTrigger() { _autoTrigger = !_autoTrigger; }
114 bool getAutoTrigger() {
return _autoTrigger; }
121 void setAutoTrigger(
bool autoTrigger) { _isTriggered =
false; _autoTrigger = autoTrigger; }
129 void setTriggerValues(
int x,
int y) { _triggerValues.x = x; _triggerValues.y = y; }
136 void setTriggered(
bool triggered) { _isTriggered = triggered; }
143 bool getTriggered() {
return _isTriggered; }
150 float getFramesPerSecond();
157 int getFramesPerScope() {
return _framesPerScope; }
163 void selectAudioScopeFiveFrames();
169 void selectAudioScopeTwentyFrames();
175 void selectAudioScopeFiftyFrames();
182 QVector<int> getScopeInput() {
return _scopeInputData; };
189 QVector<int> getScopeOutputLeft() {
return _scopeOutputLeftData; };
196 QVector<int> getScopeOutputRight() {
return _scopeOutputRightData; };
203 QVector<int> getTriggerInput() {
return _triggerInputData; };
210 QVector<int> getTriggerOutputLeft() {
return _triggerOutputLeftData; };
217 QVector<int> getTriggerOutputRight() {
return _triggerOutputRightData; };
224 void setLocalEcho(
bool localEcho);
231 void setServerEcho(
bool serverEcho);
253 void addStereoSilenceToScope(
int silentSamplesPerChannel);
254 void addLastFrameRepeatedWithFadeToScope(
int samplesPerChannel);
255 void addStereoSamplesToScope(
const QByteArray& samples);
256 void addInputToScope(
const QByteArray& inputSamples);
261 int addBufferToScope(QByteArray* byteArray,
int frameOffset,
const int16_t* source,
int sourceSamples,
262 unsigned int sourceChannel,
unsigned int sourceNumberOfChannels,
float fade = 1.0f);
263 int addSilenceToScope(QByteArray* byteArray,
int frameOffset,
int silentSamples);
265 QVector<int> getScopeVector(
const QByteArray* scope,
int offset);
267 bool shouldTrigger(
const QVector<int>& scope);
268 void computeInputData();
269 void computeOutputData();
271 void storeTriggerValues();
277 int _scopeInputOffset;
278 int _scopeOutputOffset;
280 int _samplesPerScope;
282 QByteArray* _scopeInput;
283 QByteArray* _scopeOutputLeft;
284 QByteArray* _scopeOutputRight;
285 QByteArray _scopeLastFrame;
287 QVector<int> _scopeInputData;
288 QVector<int> _scopeOutputLeftData;
289 QVector<int> _scopeOutputRightData;
291 QVector<int> _triggerInputData;
292 QVector<int> _triggerOutputLeftData;
293 QVector<int> _triggerOutputRightData;
296 glm::ivec2 _triggerValues;
298 int _audioScopeBackground;