/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2015 - ROLI Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ ReverbAudioSource::ReverbAudioSource (AudioSource* const inputSource, const bool deleteInputWhenDeleted) : input (inputSource, deleteInputWhenDeleted), bypass (false) { jassert (inputSource != nullptr); } ReverbAudioSource::~ReverbAudioSource() {} void ReverbAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) { const ScopedLock sl (lock); input->prepareToPlay (samplesPerBlockExpected, sampleRate); reverb.setSampleRate (sampleRate); } void ReverbAudioSource::releaseResources() {} void ReverbAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) { const ScopedLock sl (lock); input->getNextAudioBlock (bufferToFill); if (! bypass) { float* const firstChannel = bufferToFill.buffer->getWritePointer (0, bufferToFill.startSample); if (bufferToFill.buffer->getNumChannels() > 1) { reverb.processStereo (firstChannel, bufferToFill.buffer->getWritePointer (1, bufferToFill.startSample), bufferToFill.numSamples); } else { reverb.processMono (firstChannel, bufferToFill.numSamples); } } } void ReverbAudioSource::setParameters (const Reverb::Parameters& newParams) { const ScopedLock sl (lock); reverb.setParameters (newParams); } void ReverbAudioSource::setBypassed (bool b) noexcept { if (bypass != b) { const ScopedLock sl (lock); bypass = b; reverb.reset(); } }