diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index f402050265..63b4716f82 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -105,7 +105,9 @@ int AudioMixer::addStreamToMixForListeningNodeWithStream(PositionalAudioStream* float repeatedFrameFadeFactor = 1.0f; if (!streamToAdd->lastPopSucceeded()) { - if (_streamSettings._repetitionWithFade) { + if (_streamSettings._repetitionWithFade && !streamToAdd->getLastPopOutput().isNull()) { + // reptition with fade is enabled, and we do have a valid previous frame to repeat. + // calculate its fade factor, which depends on how many times it's already been repeated. repeatedFrameFadeFactor = calculateRepeatedFrameFadeFactor(streamToAdd->getConsecutiveNotMixedCount() - 1); if (repeatedFrameFadeFactor == 0.0f) { return 0; diff --git a/libraries/audio/src/AudioRingBuffer.h b/libraries/audio/src/AudioRingBuffer.h index 65e6947115..522c1b8fff 100644 --- a/libraries/audio/src/AudioRingBuffer.h +++ b/libraries/audio/src/AudioRingBuffer.h @@ -108,6 +108,8 @@ public: _bufferLast(bufferFirst + capacity - 1), _at(at) {} + bool isNull() const { return _at == NULL; } + bool operator==(const ConstIterator& rhs) { return _at == rhs._at; } bool operator!=(const ConstIterator& rhs) { return _at != rhs._at; } const int16_t& operator*() { return *_at; }