/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online 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.rawmaterialsoftware.com/juce 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->getSampleData (0, bufferToFill.startSample); if (bufferToFill.buffer->getNumChannels() > 1) { reverb.processStereo (firstChannel, bufferToFill.buffer->getSampleData (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(); } }