diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 52ce654f86..31c0e64491 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -490,9 +490,12 @@ void MyAvatar::startRecording() { if (!_recorder) { _recorder = RecorderPointer(new Recorder(this)); } - DependencyManager::get<AudioClient>()->setRecorder(_recorder); - _recorder->startRecording(); + // connect to AudioClient's signal so we get input audio + auto audioClient = DependencyManager::get<AudioClient>(); + connect(audioClient.data(), &AudioClient::inputReceived, _recorder.data(), + &Recorder::recordAudio, Qt::BlockingQueuedConnection); + _recorder->startRecording(); } void MyAvatar::stopRecording() { @@ -504,6 +507,10 @@ void MyAvatar::stopRecording() { return; } if (_recorder) { + // stop grabbing audio from the AudioClient + auto audioClient = DependencyManager::get<AudioClient>(); + disconnect(audioClient.data(), 0, _recorder.data(), 0); + _recorder->stopRecording(); } } diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index e2a882b4fc..2d48b2ddaa 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -685,10 +685,6 @@ void AudioClient::handleAudioInput() { auto nodeList = DependencyManager::get<NodeList>(); SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer); - if (_recorder && _recorder.data()->isRecording()) { - _recorder.data()->record(reinterpret_cast<char*>(networkAudioSamples), numNetworkBytes); - } - if (audioMixer && audioMixer->getActiveSocket()) { glm::vec3 headPosition = _positionGetter(); glm::quat headOrientation = _orientationGetter(); diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 58bf9bdc24..32d7c32e79 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -37,8 +37,6 @@ #include <RingBufferHistory.h> #include <StDev.h> -#include "Recorder.h" - #include "AudioIOStats.h" #include "AudioNoiseGate.h" @@ -112,8 +110,6 @@ public: float getInputRingBufferMsecsAvailable() const; float getAudioOutputMsecsUnplayed() const; - - void setRecorder(RecorderPointer recorder) { _recorder = recorder; } int getOutputBufferSize() { return _outputBufferSizeFrames; } @@ -273,8 +269,6 @@ private: AudioOutputIODevice _audioOutputIODevice; - WeakRecorderPointer _recorder; - AudioIOStats _stats; AudioNoiseGate _inputGate; diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index b90ded2e9a..364afb9211 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -136,7 +136,6 @@ void Recorder::record() { } } -void Recorder::record(char* samples, int size) { - QByteArray byteArray(samples, size); - _recording->addAudioPacket(byteArray); +void Recorder::recordAudio(const QByteArray& audioByteArray) { + _recording->addAudioPacket(audioByteArray); } diff --git a/libraries/avatars/src/Recorder.h b/libraries/avatars/src/Recorder.h index fa320afa7f..2723ebebdb 100644 --- a/libraries/avatars/src/Recorder.h +++ b/libraries/avatars/src/Recorder.h @@ -26,7 +26,8 @@ typedef QSharedPointer<Recorder> RecorderPointer; typedef QWeakPointer<Recorder> WeakRecorderPointer; /// Records a recording -class Recorder { +class Recorder : public QObject { + Q_OBJECT public: Recorder(AvatarData* avatar); @@ -40,7 +41,8 @@ public slots: void stopRecording(); void saveToFile(const QString& file); void record(); - void record(char* samples, int size); + void recordAudio(const QByteArray& audioArray); + private: QElapsedTimer _timer;