From 9e2ec27b29d8a7b186409a67ddad368067031132 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 21 Sep 2016 17:20:51 -0700 Subject: [PATCH] always play audio injectors locally --- interface/src/Application.cpp | 3 ++- libraries/audio/src/AudioInjector.cpp | 24 +++++++------------ libraries/audio/src/AudioInjector.h | 11 ++++----- .../src/AudioScriptingInterface.cpp | 2 +- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8a37662ca9..f7775125fb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1039,7 +1039,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : cameraMenuChanged(); } - // set the local loopback interface for local sounds from audio scripts + // set the local loopback interface for local sounds + AudioInjector::setLocalAudioInterface(audioIO.data()); AudioScriptingInterface::getInstance().setLocalAudioInterface(audioIO.data()); this->installEventFilter(this); diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index c6368259c0..fdf5a4fc55 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -28,6 +28,8 @@ int audioInjectorPtrMetaTypeId = qRegisterMetaType(); +AbstractAudioInterface* AudioInjector::_localAudioInterface{ nullptr }; + AudioInjectorState operator& (AudioInjectorState lhs, AudioInjectorState rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); }; @@ -37,24 +39,15 @@ AudioInjectorState& operator|= (AudioInjectorState& lhs, AudioInjectorState rhs) return lhs; }; -AudioInjector::AudioInjector(QObject* parent) : - QObject(parent) -{ - -} - AudioInjector::AudioInjector(const Sound& sound, const AudioInjectorOptions& injectorOptions) : - _audioData(sound.getByteArray()), - _options(injectorOptions) + AudioInjector(sound.getByteArray(), injectorOptions) { - } AudioInjector::AudioInjector(const QByteArray& audioData, const AudioInjectorOptions& injectorOptions) : _audioData(audioData), _options(injectorOptions) { - } bool AudioInjector::stateHas(AudioInjectorState state) const { @@ -447,7 +440,7 @@ AudioInjector* AudioInjector::playSound(SharedSoundPointer sound, const float vo QByteArray samples = sound->getByteArray(); if (stretchFactor == 1.0f) { - return playSoundAndDelete(samples, options, nullptr); + return playSoundAndDelete(samples, options); } const int standardRate = AudioConstants::SAMPLE_RATE; @@ -465,11 +458,11 @@ AudioInjector* AudioInjector::playSound(SharedSoundPointer sound, const float vo nInputFrames); Q_UNUSED(nOutputFrames); - return playSoundAndDelete(resampled, options, nullptr); + return playSoundAndDelete(resampled, options); } -AudioInjector* AudioInjector::playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options, AbstractAudioInterface* localInterface) { - AudioInjector* sound = playSound(buffer, options, localInterface); +AudioInjector* AudioInjector::playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options) { + AudioInjector* sound = playSound(buffer, options); if (sound) { sound->_state |= AudioInjectorState::PendingDelete; @@ -479,9 +472,8 @@ AudioInjector* AudioInjector::playSoundAndDelete(const QByteArray& buffer, const } -AudioInjector* AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options, AbstractAudioInterface* localInterface) { +AudioInjector* AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { AudioInjector* injector = new AudioInjector(buffer, options); - injector->setLocalAudioInterface(localInterface); // grab the AudioInjectorManager auto injectorManager = DependencyManager::get(); diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index b872800e15..5f2b1064fa 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -48,9 +48,7 @@ AudioInjectorState& operator|= (AudioInjectorState& lhs, AudioInjectorState rhs) // until it dies. class AudioInjector : public QObject { Q_OBJECT - public: - AudioInjector(QObject* parent); AudioInjector(const Sound& sound, const AudioInjectorOptions& injectorOptions); AudioInjector(const QByteArray& audioData, const AudioInjectorOptions& injectorOptions); @@ -66,11 +64,11 @@ public: float getVolume() const { return _options.volume; } glm::vec3 getPosition() const { return _options.position; } bool isStereo() const { return _options.stereo; } - void setLocalAudioInterface(AbstractAudioInterface* localAudioInterface) { _localAudioInterface = localAudioInterface; } bool stateHas(AudioInjectorState state) const ; - static AudioInjector* playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options, AbstractAudioInterface* localInterface); - static AudioInjector* playSound(const QByteArray& buffer, const AudioInjectorOptions options, AbstractAudioInterface* localInterface); + static void setLocalAudioInterface(AbstractAudioInterface* audioInterface) { _localAudioInterface = audioInterface; } + static AudioInjector* playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options); + static AudioInjector* playSound(const QByteArray& buffer, const AudioInjectorOptions options); static AudioInjector* playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position); public slots: @@ -98,6 +96,8 @@ private: int64_t injectNextFrame(); bool injectLocally(); + static AbstractAudioInterface* _localAudioInterface; + QByteArray _audioData; AudioInjectorOptions _options; AudioInjectorState _state { AudioInjectorState::NotFinished }; @@ -107,7 +107,6 @@ private: float _loudness { 0.0f }; int _currentSendOffset { 0 }; std::unique_ptr _currentPacket { nullptr }; - AbstractAudioInterface* _localAudioInterface { nullptr }; AudioInjectorLocalBuffer* _localBuffer { nullptr }; int64_t _nextFrame { 0 }; diff --git a/libraries/script-engine/src/AudioScriptingInterface.cpp b/libraries/script-engine/src/AudioScriptingInterface.cpp index f7cc04b209..ddb4c2117e 100644 --- a/libraries/script-engine/src/AudioScriptingInterface.cpp +++ b/libraries/script-engine/src/AudioScriptingInterface.cpp @@ -45,7 +45,7 @@ ScriptAudioInjector* AudioScriptingInterface::playSound(SharedSoundPointer sound // stereo option isn't set from script, this comes from sound metadata or filename AudioInjectorOptions optionsCopy = injectorOptions; optionsCopy.stereo = sound->isStereo(); - auto injector = AudioInjector::playSound(sound->getByteArray(), optionsCopy, _localAudioInterface); + auto injector = AudioInjector::playSound(sound->getByteArray(), optionsCopy); if (!injector) { return NULL; }