From 0498c5c708238ad0f74667646d02b3ef40ed3cfd Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 11 Feb 2015 15:57:32 -0800 Subject: [PATCH] provide old ASI APIs in AudioInjector --- libraries/audio/src/AudioInjector.cpp | 53 +++++++++++---------------- libraries/audio/src/AudioInjector.h | 22 +++++++---- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index aa4b99c30d..445bf0770b 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -34,35 +34,20 @@ void injectorFromScriptValue(const QScriptValue& object, AudioInjector*& out) { } AudioInjector::AudioInjector(QObject* parent) : - QObject(parent), - _options(), - _shouldStop(false), - _loudness(0.0f), - _isFinished(false), - _currentSendPosition(0), - _localBuffer(NULL) + QObject(parent) { + } AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) : _audioData(sound->getByteArray()), - _options(injectorOptions), - _shouldStop(false), - _loudness(0.0f), - _isFinished(false), - _currentSendPosition(0), - _localBuffer(NULL) + _options(injectorOptions) { } AudioInjector::AudioInjector(const QByteArray& audioData, const AudioInjectorOptions& injectorOptions) : _audioData(audioData), - _options(injectorOptions), - _shouldStop(false), - _loudness(0.0f), - _isFinished(false), - _currentSendPosition(0), - _localBuffer(NULL) + _options(injectorOptions) { } @@ -83,21 +68,25 @@ float AudioInjector::getLoudness() { void AudioInjector::injectAudio() { - // check if we need to offset the sound by some number of seconds - if (_options.secondOffset > 0.0f) { + if (!_isStarted) { + // check if we need to offset the sound by some number of seconds + if (_options.secondOffset > 0.0f) { + + // convert the offset into a number of bytes + int byteOffset = (int) floorf(AudioConstants::SAMPLE_RATE * _options.secondOffset * (_options.stereo ? 2.0f : 1.0f)); + byteOffset *= sizeof(int16_t); + + _currentSendPosition = byteOffset; + } - // convert the offset into a number of bytes - int byteOffset = (int) floorf(AudioConstants::SAMPLE_RATE * _options.secondOffset * (_options.stereo ? 2.0f : 1.0f)); - byteOffset *= sizeof(int16_t); - - _currentSendPosition = byteOffset; - } - - if (_options.localOnly) { - injectLocally(); + if (_options.localOnly) { + injectLocally(); + } else { + injectToMixer(); + } } else { - injectToMixer(); - } + qDebug() << "AudioInjector::injectAudio called but already started."; + } } void AudioInjector::injectLocally() { diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 05850c4f47..7f414effae 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -43,25 +43,31 @@ public: public slots: void injectAudio(); void stop(); - void stopAndDeleteLater(); void setOptions(AudioInjectorOptions& options); void setCurrentSendPosition(int currentSendPosition) { _currentSendPosition = currentSendPosition; } - float getLoudness(); + float getLoudness() const; + bool isPlaying() const { return !_isFinished; } signals: void finished(); + +private slots: + void stopAndDeleteLater(); private: void injectToMixer(); void injectLocally(); QByteArray _audioData; AudioInjectorOptions _options; - bool _shouldStop; - float _loudness; - bool _isFinished; - int _currentSendPosition; - AbstractAudioInterface* _localAudioInterface; - AudioInjectorLocalBuffer* _localBuffer; + bool _shouldStop = false; + float _loudness = 0.0f; + bool _isStarted = false; + bool _isFinished = false; + int _currentSendPosition = 0; + AbstractAudioInterface* _localAudioInterface = NULL; + AudioInjectorLocalBuffer* _localBuffer = NULL; + + friend QScriptValue injectorToScriptValue(QScriptEngine* engine, AudioInjector* const& in); }; Q_DECLARE_METATYPE(AudioInjector*)