From db1031144b961c0bec7b68ef539a6b2a562e843c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 18 Jun 2014 13:46:03 -0700 Subject: [PATCH] fix passing of unattenuated zones to buffers --- assignment-client/src/audio/AudioMixer.cpp | 25 +++++++++++++++---- assignment-client/src/audio/AudioMixer.h | 5 ++-- .../src/audio/AudioMixerClientData.cpp | 7 +++--- .../src/audio/AudioMixerClientData.h | 4 --- .../audio/src/PositionalAudioRingBuffer.cpp | 6 ++--- .../audio/src/PositionalAudioRingBuffer.h | 8 ++++-- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index a9c6b71388..0a723ad6fb 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -75,12 +75,17 @@ AudioMixer::AudioMixer(const QByteArray& packet) : _numStatFrames(0), _sumListeners(0), _sumMixes(0), - _sourceUnattenuatedZone(), - _listenerUnattenuatedZone() + _sourceUnattenuatedZone(NULL), + _listenerUnattenuatedZone(NULL) { } +AudioMixer::~AudioMixer() { + delete _sourceUnattenuatedZone; + delete _listenerUnattenuatedZone; +} + void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuffer* bufferToAdd, AvatarAudioRingBuffer* listeningNodeBuffer) { float bearingRelativeAngleToSource = 0.0f; @@ -432,8 +437,16 @@ void AudioMixer::run() { glm::vec3 listenerCorner(zoneStringList[6].toFloat(), zoneStringList[7].toFloat(), zoneStringList[8].toFloat()); glm::vec3 listenerDimensions(zoneStringList[9].toFloat(), zoneStringList[10].toFloat(), zoneStringList[11].toFloat()); - _sourceUnattenuatedZone = AABox(sourceCorner, sourceDimensions); - _listenerUnattenuatedZone = AABox(listenerCorner, listenerDimensions); + _sourceUnattenuatedZone = new AABox(sourceCorner, sourceDimensions); + _listenerUnattenuatedZone = new AABox(listenerCorner, listenerDimensions); + + glm::vec3 sourceCenter = _sourceUnattenuatedZone->calcCenter(); + glm::vec3 destinationCenter = _listenerUnattenuatedZone->calcCenter(); + + qDebug() << "There is an unattenuated zone with source center at" + << QString("%1, %2, %3").arg(sourceCenter.x).arg(sourceCenter.y).arg(sourceCenter.z); + qDebug() << "Buffers inside this zone will not be attenuated inside a box with center at" + << QString("%1, %2, %3").arg(destinationCenter.x).arg(destinationCenter.y).arg(destinationCenter.z); } int nextFrame = 0; @@ -452,7 +465,9 @@ void AudioMixer::run() { foreach (const SharedNodePointer& node, nodeList->getNodeHash()) { if (node->getLinkedData()) { - ((AudioMixerClientData*) node->getLinkedData())->checkBuffersBeforeFrameSend(JITTER_BUFFER_SAMPLES); + ((AudioMixerClientData*) node->getLinkedData())->checkBuffersBeforeFrameSend(JITTER_BUFFER_SAMPLES, + _sourceUnattenuatedZone, + _listenerUnattenuatedZone); } } diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 70eb8bb32d..39f8cf63ae 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -26,6 +26,7 @@ class AudioMixer : public ThreadedAssignment { Q_OBJECT public: AudioMixer(const QByteArray& packet); + ~AudioMixer(); public slots: /// threaded run of assignment void run(); @@ -51,8 +52,8 @@ private: int _numStatFrames; int _sumListeners; int _sumMixes; - AABox _sourceUnattenuatedZone; - AABox _listenerUnattenuatedZone; + AABox* _sourceUnattenuatedZone; + AABox* _listenerUnattenuatedZone; }; #endif // hifi_AudioMixer_h diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 483cff6018..2f78a4ac78 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -19,8 +19,7 @@ #include "AudioMixerClientData.h" AudioMixerClientData::AudioMixerClientData() : - _ringBuffers(), - _listenerUnattenuatedZone(NULL) + _ringBuffers() { } @@ -112,9 +111,9 @@ void AudioMixerClientData::checkBuffersBeforeFrameSend(int jitterBufferLengthSam _ringBuffers[i]->updateNextOutputTrailingLoudness(); if (checkSourceZone && checkSourceZone->contains(_ringBuffers[i]->getPosition())) { - _listenerUnattenuatedZone = listenerZone; + _ringBuffers[i]->setListenerUnattenuatedZone(listenerZone); } else { - _listenerUnattenuatedZone = NULL; + _ringBuffers[i]->setListenerUnattenuatedZone(NULL); } } } diff --git a/assignment-client/src/audio/AudioMixerClientData.h b/assignment-client/src/audio/AudioMixerClientData.h index 8c3f980789..e52b09e134 100644 --- a/assignment-client/src/audio/AudioMixerClientData.h +++ b/assignment-client/src/audio/AudioMixerClientData.h @@ -30,12 +30,8 @@ public: void checkBuffersBeforeFrameSend(int jitterBufferLengthSamples, AABox* checkSourceZone = NULL, AABox* listenerZone = NULL); void pushBuffersAfterFrameSend(); - - AABox* getListenerUnattenuatedZone() const { return _listenerUnattenuatedZone; } - void setListenerUnattenuatedZone(AABox* listenerUnattenuatedZone) { _listenerUnattenuatedZone = listenerUnattenuatedZone; } private: QList _ringBuffers; - AABox* _listenerUnattenuatedZone; }; #endif // hifi_AudioMixerClientData_h diff --git a/libraries/audio/src/PositionalAudioRingBuffer.cpp b/libraries/audio/src/PositionalAudioRingBuffer.cpp index bb47c6de9e..1cc4147175 100644 --- a/libraries/audio/src/PositionalAudioRingBuffer.cpp +++ b/libraries/audio/src/PositionalAudioRingBuffer.cpp @@ -28,14 +28,12 @@ PositionalAudioRingBuffer::PositionalAudioRingBuffer(PositionalAudioRingBuffer:: _willBeAddedToMix(false), _shouldLoopbackForNode(false), _shouldOutputStarveDebug(true), - _isStereo(isStereo) + _isStereo(isStereo), + _listenerUnattenuatedZone(NULL) { } -PositionalAudioRingBuffer::~PositionalAudioRingBuffer() { -} - int PositionalAudioRingBuffer::parseData(const QByteArray& packet) { // skip the packet header (includes the source UUID) diff --git a/libraries/audio/src/PositionalAudioRingBuffer.h b/libraries/audio/src/PositionalAudioRingBuffer.h index 17a663d5f6..00362c245a 100644 --- a/libraries/audio/src/PositionalAudioRingBuffer.h +++ b/libraries/audio/src/PositionalAudioRingBuffer.h @@ -12,9 +12,10 @@ #ifndef hifi_PositionalAudioRingBuffer_h #define hifi_PositionalAudioRingBuffer_h -#include #include +#include + #include "AudioRingBuffer.h" class PositionalAudioRingBuffer : public AudioRingBuffer { @@ -25,7 +26,6 @@ public: }; PositionalAudioRingBuffer(PositionalAudioRingBuffer::Type type, bool isStereo = false); - ~PositionalAudioRingBuffer(); int parseData(const QByteArray& packet); int parsePositionalData(const QByteArray& positionalByteArray); @@ -47,6 +47,9 @@ public: const glm::vec3& getPosition() const { return _position; } const glm::quat& getOrientation() const { return _orientation; } + AABox* getListenerUnattenuatedZone() const { return _listenerUnattenuatedZone; } + void setListenerUnattenuatedZone(AABox* listenerUnattenuatedZone) { _listenerUnattenuatedZone = listenerUnattenuatedZone; } + protected: // disallow copying of PositionalAudioRingBuffer objects PositionalAudioRingBuffer(const PositionalAudioRingBuffer&); @@ -61,6 +64,7 @@ protected: bool _isStereo; float _nextOutputTrailingLoudness; + AABox* _listenerUnattenuatedZone; }; #endif // hifi_PositionalAudioRingBuffer_h