| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2020 - Raw Material Software Limited
 - 
 -    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
 - {
 - 
 - //==============================================================================
 - /**
 -     A type of AudioSource that takes an input source and changes its sample rate.
 - 
 -     @see AudioSource, LagrangeInterpolator, CatmullRomInterpolator
 - 
 -     @tags{Audio}
 - */
 - class JUCE_API  ResamplingAudioSource  : public AudioSource
 - {
 - public:
 -     //==============================================================================
 -     /** Creates a ResamplingAudioSource for a given input source.
 - 
 -         @param inputSource              the input source to read from
 -         @param deleteInputWhenDeleted   if true, the input source will be deleted when
 -                                         this object is deleted
 -         @param numChannels              the number of channels to process
 -     */
 -     ResamplingAudioSource (AudioSource* inputSource,
 -                            bool deleteInputWhenDeleted,
 -                            int numChannels = 2);
 - 
 -     /** Destructor. */
 -     ~ResamplingAudioSource() override;
 - 
 -     /** Changes the resampling ratio.
 - 
 -         (This value can be changed at any time, even while the source is running).
 - 
 -         @param samplesInPerOutputSample     if set to 1.0, the input is passed through; higher
 -                                             values will speed it up; lower values will slow it
 -                                             down. The ratio must be greater than 0
 -     */
 -     void setResamplingRatio (double samplesInPerOutputSample);
 - 
 -     /** Returns the current resampling ratio.
 - 
 -         This is the value that was set by setResamplingRatio().
 -     */
 -     double getResamplingRatio() const noexcept                  { return ratio; }
 - 
 -     /** Clears any buffers and filters that the resampler is using. */
 -     void flushBuffers();
 - 
 -     //==============================================================================
 -     void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override;
 -     void releaseResources() override;
 -     void getNextAudioBlock (const AudioSourceChannelInfo&) override;
 - 
 - private:
 -     //==============================================================================
 -     OptionalScopedPointer<AudioSource> input;
 -     double ratio = 1.0, lastRatio = 1.0;
 -     AudioBuffer<float> buffer;
 -     int bufferPos = 0, sampsInBuffer = 0;
 -     double subSampleOffset = 0.0;
 -     double coefficients[6];
 -     SpinLock ratioLock;
 -     CriticalSection callbackLock;
 -     const int numChannels;
 -     HeapBlock<float*> destBuffers;
 -     HeapBlock<const float*> srcBuffers;
 - 
 -     void setFilterCoefficients (double c1, double c2, double c3, double c4, double c5, double c6);
 -     void createLowPass (double proportionalRate);
 - 
 -     struct FilterState
 -     {
 -         double x1, x2, y1, y2;
 -     };
 - 
 -     HeapBlock<FilterState> filterStates;
 -     void resetFilters();
 - 
 -     void applyFilter (float* samples, int num, FilterState& fs);
 - 
 -     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ResamplingAudioSource)
 - };
 - 
 - } // namespace juce
 
 
  |