diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index c09d733cb5..4b05ed9ac9 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -905,7 +905,7 @@ void Audio::addSpatialAudioToBuffer(unsigned int sampleTime, const QByteArray& s unsigned int delayCount = delay * _desiredOutputFormat.channelCount(); unsigned int silentCount = (remaining < delayCount) ? remaining : delayCount; if (silentCount) { - _spatialAudioRingBuffer.addSilentFrame(silentCount); + _spatialAudioRingBuffer.addSilentSamples(silentCount); } // Recalculate the number of remaining samples diff --git a/libraries/audio/src/MixedProcessedAudioStream.cpp b/libraries/audio/src/MixedProcessedAudioStream.cpp index 2922459140..5693af7c6e 100644 --- a/libraries/audio/src/MixedProcessedAudioStream.cpp +++ b/libraries/audio/src/MixedProcessedAudioStream.cpp @@ -12,7 +12,8 @@ #include "MixedProcessedAudioStream.h" MixedProcessedAudioStream::MixedProcessedAudioStream(int numFrameSamples, int numFramesCapacity, const InboundAudioStream::Settings& settings) - : InboundAudioStream(numFrameSamples, numFramesCapacity, settings) + : InboundAudioStream(numFrameSamples, numFramesCapacity, settings), + _networkSamplesWritten(0) { } @@ -24,6 +25,9 @@ void MixedProcessedAudioStream::outputFormatChanged(int outputFormatChannelCount int MixedProcessedAudioStream::parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties, int networkSamples) { + memcpy(&_networkSamples[_networkSamplesWritten], packetAfterStreamProperties.data(), packetAfterStreamProperties.size()); + _networkSamplesWritten += packetAfterStreamProperties.size() / sizeof(int16_t); + QByteArray outputBuffer; emit processSamples(packetAfterStreamProperties, outputBuffer); @@ -33,10 +37,21 @@ int MixedProcessedAudioStream::parseAudioData(PacketType type, const QByteArray& } int MixedProcessedAudioStream::writeDroppableSilentSamples(int silentSamples) { - return InboundAudioStream::writeDroppableSilentSamples(networkToDeviceSamples(silentSamples)); + int deviceSilentSamplesWritten = InboundAudioStream::writeDroppableSilentSamples(networkToDeviceSamples(silentSamples)); + + int networkSilentSamplesWritten = deviceToNetworkSamples(deviceSilentSamplesWritten); + memset(&_networkSamples[_networkSamplesWritten], 0, networkSilentSamplesWritten * sizeof(int16_t)); + _networkSamplesWritten += networkSilentSamplesWritten; + + return deviceSilentSamplesWritten; } +static const int STEREO_FACTOR = 2; + int MixedProcessedAudioStream::networkToDeviceSamples(int networkSamples) { - const int STEREO_DIVIDER = 2; - return networkSamples * _outputFormatChannelsTimesSampleRate / (STEREO_DIVIDER * SAMPLE_RATE); + return networkSamples * _outputFormatChannelsTimesSampleRate / (STEREO_FACTOR * SAMPLE_RATE); +} + +int MixedProcessedAudioStream::deviceToNetworkSamples(int deviceSamples) { + return deviceSamples * (STEREO_FACTOR * SAMPLE_RATE) / _outputFormatChannelsTimesSampleRate; } diff --git a/libraries/audio/src/MixedProcessedAudioStream.h b/libraries/audio/src/MixedProcessedAudioStream.h index ec65c8f712..1ba8b7a29d 100644 --- a/libraries/audio/src/MixedProcessedAudioStream.h +++ b/libraries/audio/src/MixedProcessedAudioStream.h @@ -32,8 +32,12 @@ protected: private: int networkToDeviceSamples(int networkSamples); + int deviceToNetworkSamples(int deviceSamples); private: int _outputFormatChannelsTimesSampleRate; + + int16_t _networkSamples[10 * NETWORK_BUFFER_LENGTH_SAMPLES_STEREO]; + int _networkSamplesWritten; }; #endif // hifi_MixedProcessedAudioStream_h