From 6df430660d24b9af929a1c5abbc18cec1b3d5a97 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 26 Sep 2014 15:23:17 -0700 Subject: [PATCH 1/3] Uninitialized member --- libraries/audio/src/AudioInjector.cpp | 6 ++++-- libraries/audio/src/AudioInjector.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 10623651a0..33f92e6599 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -33,7 +33,8 @@ AudioInjector::AudioInjector(QObject* parent) : AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) : _sound(sound), _options(injectorOptions), - _shouldStop(false) + _shouldStop(false), + _currentSendPosition(0) { } @@ -43,7 +44,8 @@ void AudioInjector::setOptions(AudioInjectorOptions& options) { const uchar MAX_INJECTOR_VOLUME = 0xFF; -void AudioInjector::injectAudio() { +void AudioInjector::injectAudio(int startingPosition) { + _currentSendPosition = startingPosition; QByteArray soundByteArray = _sound->getByteArray(); diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index af9b5e55d1..bf93221e91 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -29,7 +29,7 @@ public: int getCurrentSendPosition() const { return _currentSendPosition; } public slots: - void injectAudio(); + void injectAudio(int startingPosition = 0); void stop() { _shouldStop = true; } void setOptions(AudioInjectorOptions& options); void setCurrentSendPosition(int currentSendPosition) { _currentSendPosition = currentSendPosition; } From dfe70ed2e359bf86be7fc7483a008e2ba07e24b5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 26 Sep 2014 19:23:36 -0700 Subject: [PATCH 2/3] Initialize InjectedAudioStream with correct stereo value --- .../src/audio/AudioMixerClientData.cpp | 5 ++++- libraries/audio/src/InjectedAudioStream.cpp | 15 ++++++++++----- libraries/audio/src/InjectedAudioStream.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 6c326b3d28..2f60640da3 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -89,10 +89,13 @@ int AudioMixerClientData::parseData(const QByteArray& packet) { // grab the stream identifier for this injected audio int bytesBeforeStreamIdentifier = numBytesForPacketHeader(packet) + sizeof(quint16); QUuid streamIdentifier = QUuid::fromRfc4122(packet.mid(bytesBeforeStreamIdentifier, NUM_BYTES_RFC4122_UUID)); + int bytesBeforeStereoIdentifier = bytesBeforeStreamIdentifier + NUM_BYTES_RFC4122_UUID; + bool isStereo; + QDataStream(packet.mid(bytesBeforeStereoIdentifier)) >> isStereo; if (!_audioStreams.contains(streamIdentifier)) { // we don't have this injected stream yet, so add it - _audioStreams.insert(streamIdentifier, matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getStreamSettings())); + _audioStreams.insert(streamIdentifier, matchingStream = new InjectedAudioStream(streamIdentifier, isStereo, AudioMixer::getStreamSettings())); } else { matchingStream = _audioStreams.value(streamIdentifier); } diff --git a/libraries/audio/src/InjectedAudioStream.cpp b/libraries/audio/src/InjectedAudioStream.cpp index 0cc13eae05..873b32cc40 100644 --- a/libraries/audio/src/InjectedAudioStream.cpp +++ b/libraries/audio/src/InjectedAudioStream.cpp @@ -19,8 +19,8 @@ #include "InjectedAudioStream.h" -InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, const InboundAudioStream::Settings& settings) : - PositionalAudioStream(PositionalAudioStream::Injector, false, settings), +InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, const bool isStereo, const InboundAudioStream::Settings& settings) : + PositionalAudioStream(PositionalAudioStream::Injector, isStereo, settings), _streamIdentifier(streamIdentifier), _radius(0.0f), _attenuationRatio(0) @@ -39,9 +39,14 @@ int InjectedAudioStream::parseStreamProperties(PacketType type, // skip the stream identifier packetStream.skipRawData(NUM_BYTES_RFC4122_UUID); - packetStream >> _isStereo; - if (isStereo()) { - _ringBuffer.resizeForFrameSize(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO); + // read the channel flag + bool isStereo; + packetStream >> isStereo; + + // if isStereo value has changed, restart the ring buffer with new frame size + if (isStereo != _isStereo) { + _ringBuffer.resizeForFrameSize(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL); + _isStereo = isStereo; } // pull the loopback flag and set our boolean diff --git a/libraries/audio/src/InjectedAudioStream.h b/libraries/audio/src/InjectedAudioStream.h index f3840b1029..60c36dfb12 100644 --- a/libraries/audio/src/InjectedAudioStream.h +++ b/libraries/audio/src/InjectedAudioStream.h @@ -18,7 +18,7 @@ class InjectedAudioStream : public PositionalAudioStream { public: - InjectedAudioStream(const QUuid& streamIdentifier, const InboundAudioStream::Settings& settings); + InjectedAudioStream(const QUuid& streamIdentifier, const bool isStereo, const InboundAudioStream::Settings& settings); float getRadius() const { return _radius; } float getAttenuationRatio() const { return _attenuationRatio; } From 5a8b9082b25e187373588ef08a140577492564e4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 26 Sep 2014 19:47:26 -0700 Subject: [PATCH 3/3] Check _currentSendPosition instead of overriding --- libraries/audio/src/AudioInjector.cpp | 9 ++++++--- libraries/audio/src/AudioInjector.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 33f92e6599..d5e1c59d7a 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -44,11 +44,14 @@ void AudioInjector::setOptions(AudioInjectorOptions& options) { const uchar MAX_INJECTOR_VOLUME = 0xFF; -void AudioInjector::injectAudio(int startingPosition) { - _currentSendPosition = startingPosition; - +void AudioInjector::injectAudio() { QByteArray soundByteArray = _sound->getByteArray(); + if (_currentSendPosition < 0 || + _currentSendPosition >= soundByteArray.size()) { + _currentSendPosition = 0; + } + // make sure we actually have samples downloaded to inject if (soundByteArray.size()) { // give our sample byte array to the local audio interface, if we have it, so it can be handled locally diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index bf93221e91..af9b5e55d1 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -29,7 +29,7 @@ public: int getCurrentSendPosition() const { return _currentSendPosition; } public slots: - void injectAudio(int startingPosition = 0); + void injectAudio(); void stop() { _shouldStop = true; } void setOptions(AudioInjectorOptions& options); void setCurrentSendPosition(int currentSendPosition) { _currentSendPosition = currentSendPosition; }