From 164c06a1904d6b52c33f1140a7f307a28473a43f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 2 Apr 2015 10:41:52 -0700 Subject: [PATCH 1/3] fix resampled stereo audio array size --- libraries/audio/src/AudioInjectorLocalBuffer.cpp | 4 +++- libraries/audio/src/Sound.cpp | 8 +++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/audio/src/AudioInjectorLocalBuffer.cpp b/libraries/audio/src/AudioInjectorLocalBuffer.cpp index 6cbe56adb7..e69945308f 100644 --- a/libraries/audio/src/AudioInjectorLocalBuffer.cpp +++ b/libraries/audio/src/AudioInjectorLocalBuffer.cpp @@ -59,6 +59,8 @@ qint64 AudioInjectorLocalBuffer::readData(char* data, qint64 maxSize) { if (!_shouldLoop && bytesRead == bytesToEnd) { // we hit the end of the buffer, emit a signal emit bufferEmpty(); + } else if (_shouldLoop && _currentOffset == _rawAudioArray.size()) { + _currentOffset = 0; } return bytesRead; @@ -80,7 +82,7 @@ qint64 AudioInjectorLocalBuffer::recursiveReadFromFront(char* data, qint64 maxSi // check if we need to call ourselves again and pull from the front again if (bytesRead < maxSize) { - return bytesRead + recursiveReadFromFront(data, maxSize); + return bytesRead + recursiveReadFromFront(data, maxSize - bytesRead); } else { _currentOffset = bytesRead; return bytesRead; diff --git a/libraries/audio/src/Sound.cpp b/libraries/audio/src/Sound.cpp index 6f149bb203..b0807eb482 100644 --- a/libraries/audio/src/Sound.cpp +++ b/libraries/audio/src/Sound.cpp @@ -77,7 +77,7 @@ void Sound::downloadFinished(QNetworkReply* reply) { // since it's raw the only way for us to know that is if the file was called .stereo.raw if (reply->url().fileName().toLower().endsWith("stereo.raw")) { _isStereo = true; - qDebug() << "Processing sound from" << reply->url() << "as stereo audio file."; + qDebug() << "Processing sound of" << rawAudioByteArray.size() << "bytes from" << reply->url() << "as stereo audio file."; } // Process as RAW file @@ -102,12 +102,11 @@ void Sound::downSample(const QByteArray& rawAudioByteArray) { int numSourceSamples = rawAudioByteArray.size() / sizeof(int16_t); int numDestinationBytes = rawAudioByteArray.size() / 2; - if (_isStereo && numSourceSamples % 4 != 0) { - numDestinationBytes += 1; + if (_isStereo && numSourceSamples % 2 != 0) { + numDestinationBytes += sizeof(int16_t); } _byteArray.resize(numDestinationBytes); - int16_t* sourceSamples = (int16_t*) rawAudioByteArray.data(); int16_t* destinationSamples = (int16_t*) _byteArray.data(); @@ -121,7 +120,6 @@ void Sound::downSample(const QByteArray& rawAudioByteArray) { destinationSamples[i / 2] = (sourceSamples[i] + sourceSamples[i + 2]) / 2; destinationSamples[(i / 2) + 1] = (sourceSamples[i + 1] + sourceSamples[i + 3]) / 2; } - } } else { for (int i = 1; i < numSourceSamples; i += 2) { From 41290dd3e3172828cad0272c8cfec16d68c82efc Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 2 Apr 2015 11:34:39 -0700 Subject: [PATCH 2/3] push data pointer for recursive read from front --- libraries/audio/src/AudioInjectorLocalBuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio/src/AudioInjectorLocalBuffer.cpp b/libraries/audio/src/AudioInjectorLocalBuffer.cpp index e69945308f..1b2d44fe24 100644 --- a/libraries/audio/src/AudioInjectorLocalBuffer.cpp +++ b/libraries/audio/src/AudioInjectorLocalBuffer.cpp @@ -82,7 +82,7 @@ qint64 AudioInjectorLocalBuffer::recursiveReadFromFront(char* data, qint64 maxSi // check if we need to call ourselves again and pull from the front again if (bytesRead < maxSize) { - return bytesRead + recursiveReadFromFront(data, maxSize - bytesRead); + return bytesRead + recursiveReadFromFront(data + bytesRead, maxSize - bytesRead); } else { _currentOffset = bytesRead; return bytesRead; From 3f079e10aa1c14444718271864d1a7fe29d1b21f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 2 Apr 2015 11:35:23 -0700 Subject: [PATCH 3/3] user AudioConstants for size of int16_t --- libraries/audio/src/Sound.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/audio/src/Sound.cpp b/libraries/audio/src/Sound.cpp index b0807eb482..834c6a531f 100644 --- a/libraries/audio/src/Sound.cpp +++ b/libraries/audio/src/Sound.cpp @@ -99,11 +99,11 @@ void Sound::downSample(const QByteArray& rawAudioByteArray) { // we want to convert it to the format that the audio-mixer wants // which is signed, 16-bit, 24Khz - int numSourceSamples = rawAudioByteArray.size() / sizeof(int16_t); + int numSourceSamples = rawAudioByteArray.size() / sizeof(AudioConstants::AudioSample); - int numDestinationBytes = rawAudioByteArray.size() / 2; + int numDestinationBytes = rawAudioByteArray.size() / sizeof(AudioConstants::AudioSample); if (_isStereo && numSourceSamples % 2 != 0) { - numDestinationBytes += sizeof(int16_t); + numDestinationBytes += sizeof(AudioConstants::AudioSample); } _byteArray.resize(numDestinationBytes);