From 20d6615417172663a45c0ee8468e340b60cddfd4 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Tue, 5 Dec 2017 16:13:44 -0800 Subject: [PATCH] emit only when recording --- interface/src/scripting/Audio.cpp | 16 ++++++++++------ interface/src/scripting/Audio.h | 3 +-- libraries/audio-client/src/AudioClient.cpp | 7 +++++-- libraries/audio-client/src/AudioClient.h | 5 +++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 7ed5c2ead9..0d0a845a7a 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -59,9 +59,7 @@ Audio::Audio() : _devices(_contextIsHMD) { } void Audio::onOutputBufferReceived(const QByteArray outputBuffer) { - if (_isRecording) { - _audioFileWav.addRawAudioChunk((char*)outputBuffer.data(), outputBuffer.size()); - } + _audioFileWav.addRawAudioChunk((char*)outputBuffer.data(), outputBuffer.size()); } bool Audio::startRecording(const QString& filepath) { @@ -71,15 +69,21 @@ bool Audio::startRecording(const QString& filepath) { return false; } connect(client, &AudioClient::outputBufferReceived, this, &Audio::onOutputBufferReceived); - _isRecording = true; + client->setRecording(true); return true; } +bool Audio::getRecording() { + auto client = DependencyManager::get().data(); + return client->getRecording(); +} + void Audio::stopRecording() { auto client = DependencyManager::get().data(); disconnect(client, &AudioClient::outputBufferReceived, this, 0); - if (_isRecording) { - _isRecording = false; + + if (client->getRecording()) { + client->setRecording(false); _audioFileWav.close(); } } diff --git a/interface/src/scripting/Audio.h b/interface/src/scripting/Audio.h index 7e10761970..dbedb99a0d 100644 --- a/interface/src/scripting/Audio.h +++ b/interface/src/scripting/Audio.h @@ -58,7 +58,7 @@ public: Q_INVOKABLE bool startRecording(const QString& filename); Q_INVOKABLE void stopRecording(); - Q_INVOKABLE bool getRecording() { return _isRecording; }; + Q_INVOKABLE bool getRecording(); signals: void nop(); @@ -89,7 +89,6 @@ private: bool _isMuted { false }; bool _enableNoiseReduction { true }; // Match default value of AudioClient::_isNoiseGateEnabled. bool _contextIsHMD { false }; - bool _isRecording { false }; AudioDevices* getDevices() { return &_devices; } AudioDevices _devices; AudioFileWav _audioFileWav; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 96b96d2bb1..7524641f37 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1909,8 +1909,11 @@ qint64 AudioClient::AudioOutputIODevice::readData(char * data, qint64 maxSize) { } // send output buffer for recording - QByteArray outputBuffer(reinterpret_cast(scratchBuffer), bytesWritten); - emit _audio->outputBufferReceived(outputBuffer); + if (_audio->_isRecording) { + QByteArray outputBuffer(reinterpret_cast(scratchBuffer), bytesWritten); + emit _audio->outputBufferReceived(outputBuffer); + } + int bytesAudioOutputUnplayed = _audio->_audioOutput->bufferSize() - _audio->_audioOutput->bytesFree(); float msecsAudioOutputUnplayed = bytesAudioOutputUnplayed / (float)_audio->_outputFormat.bytesForDuration(USECS_PER_MSEC); diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index eb9de29411..5ec85aab0f 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -158,6 +158,9 @@ public: bool getNamedAudioDeviceForModeExists(QAudio::Mode mode, const QString& deviceName); + void setRecording(bool isRecording) { _isRecording = isRecording; }; + bool getRecording() { return _isRecording; }; + #ifdef Q_OS_WIN static QString getWinDeviceName(wchar_t* guid); #endif @@ -420,6 +423,8 @@ private: QTimer* _checkDevicesTimer { nullptr }; QTimer* _checkPeakValuesTimer { nullptr }; + + bool _isRecording { false }; };