diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 4b05ed9ac9..8aac32849e 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -121,6 +121,7 @@ Audio::Audio(QObject* parent) : _noiseSampleFrames = new float[NUMBER_OF_NOISE_SAMPLE_FRAMES]; connect(&_receivedAudioStream, &MixedProcessedAudioStream::processSamples, this, &Audio::processReceivedAudioStreamSamples, Qt::DirectConnection); + connect(&_receivedAudioStream, &MixedProcessedAudioStream::dataParsed, this, &Audio::updateScopeBuffers, Qt::DirectConnection); } void Audio::init(QGLWidget *parent) { @@ -777,11 +778,13 @@ void Audio::processReceivedAudioStreamSamples(const QByteArray& inputBuffer, QBy numNetworkOutputSamples, numDeviceOutputSamples, _desiredOutputFormat, _outputFormat); +} - +void Audio::updateScopeBuffers() { if (_scopeEnabled && !_scopeEnabledPause) { unsigned int numAudioChannels = _desiredOutputFormat.channelCount(); - const int16_t* samples = receivedSamples; + const int16_t* samples = _receivedAudioStream.getNetworkSamples(); + int numNetworkOutputSamples = _receivedAudioStream.getNetworkSamplesWritten(); for (int numSamples = numNetworkOutputSamples / numAudioChannels; numSamples > 0; numSamples -= NETWORK_SAMPLES_PER_FRAME) { unsigned int audioChannel = 0; @@ -801,6 +804,8 @@ void Audio::processReceivedAudioStreamSamples(const QByteArray& inputBuffer, QBy samples += NETWORK_SAMPLES_PER_FRAME * numAudioChannels; } } + + _receivedAudioStream.clearNetworkSamples(); } void Audio::addReceivedAudioToStream(const QByteArray& audioByteArray) { diff --git a/interface/src/Audio.h b/interface/src/Audio.h index a93b8c5be7..c080557576 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -106,6 +106,7 @@ public slots: void parseAudioStreamStatsPacket(const QByteArray& packet); void addSpatialAudioToBuffer(unsigned int sampleTime, const QByteArray& spatialAudio, unsigned int numSamples); void processReceivedAudioStreamSamples(const QByteArray& inputBuffer, QByteArray& outputBuffer); + void updateScopeBuffers(); void handleAudioInput(); void reset(); void resetStats(); diff --git a/libraries/audio/src/InboundAudioStream.cpp b/libraries/audio/src/InboundAudioStream.cpp index 15e940ac49..f393a4af44 100644 --- a/libraries/audio/src/InboundAudioStream.cpp +++ b/libraries/audio/src/InboundAudioStream.cpp @@ -161,6 +161,8 @@ int InboundAudioStream::parseData(const QByteArray& packet) { framesAvailableChanged(); + emit dataParsed(); + return readBytes; } diff --git a/libraries/audio/src/InboundAudioStream.h b/libraries/audio/src/InboundAudioStream.h index 62a22b61ab..dac1bb138c 100644 --- a/libraries/audio/src/InboundAudioStream.h +++ b/libraries/audio/src/InboundAudioStream.h @@ -149,6 +149,9 @@ public: int getPacketsReceived() const { return _incomingSequenceNumberStats.getReceived(); } +signals: + void dataParsed(); + public slots: /// This function should be called every second for all the stats to function properly. If dynamic jitter buffers /// is enabled, those stats are used to calculate _desiredJitterBufferFrames. diff --git a/libraries/audio/src/MixedProcessedAudioStream.h b/libraries/audio/src/MixedProcessedAudioStream.h index 1ba8b7a29d..e1a54e4449 100644 --- a/libraries/audio/src/MixedProcessedAudioStream.h +++ b/libraries/audio/src/MixedProcessedAudioStream.h @@ -26,6 +26,11 @@ signals: public: void outputFormatChanged(int outputFormatChannelCountTimesSampleRate); + const int16_t* getNetworkSamples() const { return _networkSamples; } + int getNetworkSamplesWritten() const { return _networkSamplesWritten; } + + void clearNetworkSamples() { _networkSamplesWritten = 0; } + protected: int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties, int networkSamples); int writeDroppableSilentSamples(int silentSamples);