diff --git a/modules/juce_audio_devices/native/juce_android_Audio.cpp b/modules/juce_audio_devices/native/juce_android_Audio.cpp index 7953988250..158580fbfc 100644 --- a/modules/juce_audio_devices/native/juce_android_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_android_Audio.cpp @@ -339,20 +339,12 @@ public: jshort* const src = env->GetShortArrayElements (audioBuffer, nullptr); - for (int chan = 0; chan < inputChannelBuffer.getNumChannels(); ++chan) - { - AudioData::Pointer d (inputChannelBuffer.getWritePointer (chan)); - - if (chan < numDeviceInputChannels) - { - AudioData::Pointer s (src + chan, numDeviceInputChannels); - d.convertSamples (s, actualBufferSize); - } - else - { - d.clearSamples (actualBufferSize); - } - } + AudioData::deinterleaveSamples (reinterpret_cast (src), + numDeviceInputChannels, + inputChannelBuffer.getArrayOfWritePointers(), + inputChannelBuffer.getNumChannels(), + actualBufferSize); env->ReleaseShortArrayElements (audioBuffer, src, 0); } @@ -382,14 +374,12 @@ public: jshort* const dest = env->GetShortArrayElements (audioBuffer, nullptr); - for (int chan = 0; chan < numDeviceOutputChannels; ++chan) - { - AudioData::Pointer d (dest + chan, numDeviceOutputChannels); - - const float* const sourceChanData = outputChannelBuffer.getReadPointer (jmin (chan, outputChannelBuffer.getNumChannels() - 1)); - AudioData::Pointer s (sourceChanData); - d.convertSamples (s, actualBufferSize); - } + AudioData::interleaveSamples (outputChannelBuffer.getArrayOfReadPointers(), + outputChannelBuffer.getNumChannels(), + reinterpret_cast (dest), + numDeviceOutputChannels, + actualBufferSize); env->ReleaseShortArrayElements (audioBuffer, dest, 0); jint numWritten = env->CallIntMethod (outputDevice, AudioTrack.write, audioBuffer, 0, actualBufferSize * numDeviceOutputChannels); diff --git a/modules/juce_audio_devices/native/juce_android_Oboe.cpp b/modules/juce_audio_devices/native/juce_android_Oboe.cpp index b3bc7f775d..2f2f8beb70 100644 --- a/modules/juce_audio_devices/native/juce_android_Oboe.cpp +++ b/modules/juce_audio_devices/native/juce_android_Oboe.cpp @@ -46,28 +46,26 @@ struct OboeAudioIODeviceBufferHelpers static void convertFromOboe (const int16* srcInterleaved, AudioBuffer& audioBuffer, int numSamples) { - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; + const auto numChannels = audioBuffer.getNumChannels(); - DstSampleType dstData (audioBuffer.getWritePointer (i)); - SrcSampleType srcData (srcInterleaved + i, audioBuffer.getNumChannels()); - dstData.convertSamples (srcData, numSamples); - } + AudioData::deinterleaveSamples (reinterpret_cast (srcInterleaved), + numChannels, + audioBuffer.getArrayOfWritePointers(), + numChannels, + numSamples); } static void convertToOboe (const AudioBuffer& audioBuffer, int16* dstInterleaved, int numSamples) { - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; + const auto numChannels = audioBuffer.getNumChannels(); - DstSampleType dstData (dstInterleaved + i, audioBuffer.getNumChannels()); - SrcSampleType srcData (audioBuffer.getReadPointer (i)); - dstData.convertSamples (srcData, numSamples); - } + AudioData::interleaveSamples (audioBuffer.getArrayOfReadPointers(), + numChannels, + reinterpret_cast (dstInterleaved), + numChannels, + numSamples); } }; @@ -98,15 +96,12 @@ struct OboeAudioIODeviceBufferHelpers // No need to convert, we instructed the buffer to point to the src data directly already jassert (audioBuffer.getWritePointer (0) != srcInterleaved); - for (int i = 0; i < numChannels; ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; - - DstSampleType dstData (audioBuffer.getWritePointer (i)); - SrcSampleType srcData (srcInterleaved + i, audioBuffer.getNumChannels()); - dstData.convertSamples (srcData, numSamples); - } + AudioData::deinterleaveSamples (srcInterleaved, + numChannels, + audioBuffer.getArrayOfWritePointers(), + numChannels, + numSamples); } } @@ -119,15 +114,12 @@ struct OboeAudioIODeviceBufferHelpers // No need to convert, we instructed the buffer to point to the src data directly already jassert (audioBuffer.getReadPointer (0) != dstInterleaved); - for (int i = 0; i < numChannels; ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; - - DstSampleType dstData (dstInterleaved + i, audioBuffer.getNumChannels()); - SrcSampleType srcData (audioBuffer.getReadPointer (i)); - dstData.convertSamples (srcData, numSamples); - } + AudioData::interleaveSamples (audioBuffer.getArrayOfReadPointers(), + numChannels, + dstInterleaved, + numChannels, + numSamples); } } }; diff --git a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp index 2bb38b4064..b93f9aeaad 100644 --- a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp +++ b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp @@ -196,29 +196,26 @@ struct BufferHelpers static void convertFromOpenSL (const int16* srcInterleaved, AudioBuffer& audioBuffer) { - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; + const auto numChannels = audioBuffer.getNumChannels(); - DstSampleType dstData (audioBuffer.getWritePointer (i)); - SrcSampleType srcData (srcInterleaved + i, audioBuffer.getNumChannels()); - dstData.convertSamples (srcData, audioBuffer.getNumSamples()); - } + AudioData::deinterleaveSamples (reinterpret_cast (srcInterleaved), + numChannels, + audioBuffer.getArrayOfWritePointers(), + numChannels, + audioBuffer.getNumSamples()); } static void convertToOpenSL (const AudioBuffer& audioBuffer, int16* dstInterleaved) { - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; + const auto numChannels = audioBuffer.getNumChannels(); - DstSampleType dstData (dstInterleaved + i, audioBuffer.getNumChannels()); - SrcSampleType srcData (audioBuffer.getReadPointer (i)); - - dstData.convertSamples (srcData, audioBuffer.getNumSamples()); - } + AudioData::interleaveSamples (audioBuffer.getArrayOfReadPointers(), + numChannels, + reinterpret_cast (dstInterleaved), + numChannels, + audioBuffer.getNumSamples()); } }; @@ -249,41 +246,38 @@ struct BufferHelpers static void convertFromOpenSL (const float* srcInterleaved, AudioBuffer& audioBuffer) { - if (audioBuffer.getNumChannels() == 1) + const auto numChannels = audioBuffer.getNumChannels(); + + if (numChannels == 1) { jassert (srcInterleaved == audioBuffer.getWritePointer (0)); return; } - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; - - DstSampleType dstData (audioBuffer.getWritePointer (i)); - SrcSampleType srcData (srcInterleaved + i, audioBuffer.getNumChannels()); - dstData.convertSamples (srcData, audioBuffer.getNumSamples()); - } + AudioData::deinterleaveSamples (srcInterleaved, + numChannels, + audioBuffer.getArrayOfWritePointers(), + numChannels, + audioBuffer.getNumSamples()); } static void convertToOpenSL (const AudioBuffer& audioBuffer, float* dstInterleaved) { - if (audioBuffer.getNumChannels() == 1) + const auto numChannels = audioBuffer.getNumChannels(); + + if (numChannels == 1) { jassert (dstInterleaved == audioBuffer.getReadPointer (0)); return; } - for (int i = 0; i < audioBuffer.getNumChannels(); ++i) - { - using DstSampleType = AudioData::Pointer; - using SrcSampleType = AudioData::Pointer; - - DstSampleType dstData (dstInterleaved + i, audioBuffer.getNumChannels()); - SrcSampleType srcData (audioBuffer.getReadPointer (i)); - - dstData.convertSamples (srcData, audioBuffer.getNumSamples()); - } + AudioData::interleaveSamples (audioBuffer.getArrayOfReadPointers(), + numChannels, + dstInterleaved, + numChannels, + audioBuffer.getNumSamples()); } }; diff --git a/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm b/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm index bc3dcf22bb..5c7ea999bb 100644 --- a/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm +++ b/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm @@ -132,13 +132,10 @@ private: source->source->getNextAudioBlock (info); - typedef AudioData::Pointer CDSampleFormat; - typedef AudioData::Pointer SourceSampleFormat; - - CDSampleFormat left (buffer, 2); - left.convertSamples (SourceSampleFormat (tempBuffer.getReadPointer (0)), numSamples); - CDSampleFormat right (buffer + 2, 2); - right.convertSamples (SourceSampleFormat (tempBuffer.getReadPointer (1)), numSamples); + AudioData::interleaveSamples (tempBuffer.getArrayOfReadPointers(), 2, + reinterpret_cast (buffer), 2, + numSamples); source->readPosition += numSamples; } diff --git a/modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp b/modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp index c55e7ee173..7d8a9498e3 100644 --- a/modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp +++ b/modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp @@ -388,16 +388,10 @@ bool AudioCDBurner::addAudioTrack (AudioSource* audioSource, int numSamples) buffer.clear (bytesPerBlock); - typedef AudioData::Pointer CDSampleFormat; - - typedef AudioData::Pointer SourceSampleFormat; - - CDSampleFormat left (buffer, 2); - left.convertSamples (SourceSampleFormat (sourceBuffer.getReadPointer (0)), samplesPerBlock); - CDSampleFormat right (buffer + 2, 2); - right.convertSamples (SourceSampleFormat (sourceBuffer.getReadPointer (1)), samplesPerBlock); + AudioData::interleaveSamples (sourceBuffer.getArrayOfReadPointers(), 2, + reinterpret_cast (buffer), 2, + samplesPerBlock); hr = pimpl->redbook->AddAudioTrackBlocks (buffer, bytesPerBlock);