|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2017 - ROLI Ltd.
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- MemoryAudioSource::MemoryAudioSource (AudioBuffer<float>& bufferToUse, bool copyMemory, bool shouldLoop)
- : isLooping (shouldLoop)
- {
- if (copyMemory)
- buffer.makeCopyOf (bufferToUse);
- else
- buffer.setDataToReferTo (bufferToUse.getArrayOfWritePointers(),
- bufferToUse.getNumChannels(),
- bufferToUse.getNumSamples());
- }
-
- //==============================================================================
- void MemoryAudioSource::prepareToPlay (int /*samplesPerBlockExpected*/, double /*sampleRate*/)
- {
- position = 0;
- }
-
- void MemoryAudioSource::releaseResources() {}
-
- void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill)
- {
- auto& dst = *bufferToFill.buffer;
- auto channels = jmin (dst.getNumChannels(), buffer.getNumChannels());
- auto max = 0, pos = 0;
- auto n = buffer.getNumSamples(), m = bufferToFill.numSamples;
-
- for (auto i = position; (i < n || isLooping) && (pos < m); i += max)
- {
- max = jmin (m - pos, n - (i % n));
-
- int ch = 0;
- for (; ch < channels; ++ch)
- dst.copyFrom (ch, bufferToFill.startSample + pos, buffer, ch, i % n, max);
-
- for (; ch < dst.getNumChannels(); ++ch)
- dst.clear (ch, bufferToFill.startSample + pos, max);
-
- pos += max;
- }
-
- if (pos < m)
- dst.clear (bufferToFill.startSample + pos, m - pos);
- }
-
- } // namespace juce
|