| @@ -312,8 +312,8 @@ struct DSPDemo : public AudioSource, | |||
| inputSource->getNextAudioBlock (bufferToFill); | |||
| dsp::AudioBlock<float> block (*bufferToFill.buffer, | |||
| (size_t) bufferToFill.startSample); | |||
| AudioBlock<float> block (*bufferToFill.buffer, | |||
| (size_t) bufferToFill.startSample); | |||
| ScopedLock audioLock (audioCallbackLock); | |||
| this->process (ProcessContextReplacing<float> (block)); | |||
| @@ -59,8 +59,6 @@ struct StateVariableFilterDemoDSP | |||
| void prepare (const ProcessSpec& spec) | |||
| { | |||
| sampleRate = spec.sampleRate; | |||
| filter.state = new StateVariableFilter::Parameters<float>; | |||
| filter.prepare (spec); | |||
| } | |||
| @@ -78,18 +76,21 @@ struct StateVariableFilterDemoDSP | |||
| { | |||
| if (sampleRate != 0.0) | |||
| { | |||
| auto cutoff = static_cast<float> (cutoffParam.getCurrentValue()); | |||
| auto resonance = static_cast<float> (qParam.getCurrentValue()); | |||
| auto type = static_cast<StateVariableFilter::Parameters<float>::Type> (typeParam.getCurrentSelectedID() - 1); | |||
| filter.state->type = type; | |||
| filter.state->setCutOffFrequency (sampleRate, cutoff, resonance); | |||
| filter.setCutoffFrequency (static_cast<float> (cutoffParam.getCurrentValue())); | |||
| filter.setResonance (static_cast<float> (qParam.getCurrentValue())); | |||
| switch (typeParam.getCurrentSelectedID() - 1) | |||
| { | |||
| case 0: filter.setType (StateVariableTPTFilterType::lowpass); break; | |||
| case 1: filter.setType (StateVariableTPTFilterType::bandpass); break; | |||
| case 2: filter.setType (StateVariableTPTFilterType::highpass); break; | |||
| default: jassertfalse; break; | |||
| }; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| ProcessorDuplicator<StateVariableFilter::Filter<float>, | |||
| StateVariableFilter::Parameters<float>> filter; | |||
| StateVariableTPTFilter<float> filter; | |||
| ChoiceParameter typeParam {{ "Low-pass", "Band-pass", "High-pass" }, 1, "Type" }; | |||
| SliderParameter cutoffParam {{ 20.0, 20000.0 }, 0.5, 440.0f, "Cutoff", "Hz" }; | |||
| @@ -117,16 +117,17 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.mm" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.h" | |||
| @@ -1078,27 +1079,51 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h" | |||
| "../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp" | |||
| "../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Bias.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_DelayLine.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_DelayLine.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_DryWetMixer.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_DryWetMixer.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Gain.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_LadderFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oscillator.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oversampling.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Panner.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Panner.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessContext.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Reverb.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_WaveShaper.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Bias.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Chorus.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Chorus.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Compressor.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Compressor.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Gain.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_LadderFilter.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_LadderFilter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Limiter.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Limiter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_NoiseGate.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_NoiseGate.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Oscillator.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Phaser.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Phaser.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Reverb.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_WaveShaper.h" | |||
| "../../../../../modules/juce_dsp/juce_dsp.cpp" | |||
| "../../../../../modules/juce_dsp/juce_dsp.mm" | |||
| "../../../../../modules/juce_dsp/juce_dsp.h" | |||
| @@ -1841,16 +1866,17 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/sources/ju | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -2802,27 +2828,51 @@ set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SI | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Bias.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DelayLine.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DelayLine.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DryWetMixer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DryWetMixer.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Gain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oscillator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Panner.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Panner.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessContext.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_WaveShaper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Bias.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Chorus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Chorus.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Compressor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Compressor.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Gain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_LadderFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_LadderFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Limiter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Limiter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_NoiseGate.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_NoiseGate.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Oscillator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Phaser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Phaser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_WaveShaper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -242,10 +242,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -254,6 +254,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1427,24 +1430,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2453,10 +2492,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2983,21 +3022,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -374,6 +374,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -676,10 +679,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -688,6 +691,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1915,24 +1921,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -3141,16 +3183,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4731,13 +4773,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4746,13 +4794,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4767,15 +4815,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -242,10 +242,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -254,6 +254,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1427,24 +1430,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2453,10 +2492,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2983,21 +3022,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -374,6 +374,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -676,10 +679,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -688,6 +691,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1915,24 +1921,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -3141,16 +3183,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4731,13 +4773,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4746,13 +4794,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4767,15 +4815,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -242,10 +242,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -254,6 +254,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1427,24 +1430,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2453,10 +2492,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2983,21 +3022,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -374,6 +374,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -676,10 +679,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -688,6 +691,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1915,24 +1921,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -3141,16 +3183,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4731,13 +4773,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4746,13 +4794,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4767,15 +4815,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -235,7 +235,7 @@ public: | |||
| bool hasEditor() const override { return true; } | |||
| AudioProcessorEditor* createEditor() override { return new Editor (*this); } | |||
| const String getName() const override { return "MIDILogger"; } | |||
| const String getName() const override { return "MIDI Logger"; } | |||
| bool acceptsMidi() const override { return true; } | |||
| bool producesMidi() const override { return true; } | |||
| double getTailLengthSeconds() const override { return 0.0; } | |||
| @@ -98,16 +98,17 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.mm" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.h" | |||
| @@ -1506,16 +1507,17 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/sources/ju | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -223,10 +223,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -235,6 +235,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2047,10 +2050,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -508,10 +508,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -520,6 +520,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -2535,16 +2538,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -115,16 +115,17 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.mm" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.h" | |||
| @@ -934,27 +935,51 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h" | |||
| "../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp" | |||
| "../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Bias.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_DelayLine.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_DelayLine.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_DryWetMixer.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_DryWetMixer.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Gain.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_LadderFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oscillator.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Oversampling.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Panner.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_Panner.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessContext.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_Reverb.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_WaveShaper.h" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp" | |||
| "../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Bias.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Chorus.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Chorus.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Compressor.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Compressor.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Gain.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_LadderFilter.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_LadderFilter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Limiter.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Limiter.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_NoiseGate.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_NoiseGate.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Oscillator.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Phaser.cpp" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Phaser.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_Reverb.h" | |||
| "../../../../../modules/juce_dsp/widgets/juce_WaveShaper.h" | |||
| "../../../../../modules/juce_dsp/juce_dsp.cpp" | |||
| "../../../../../modules/juce_dsp/juce_dsp.mm" | |||
| "../../../../../modules/juce_dsp/juce_dsp.h" | |||
| @@ -1654,16 +1679,17 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/sources/ju | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -2473,27 +2499,51 @@ set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SI | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Bias.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_BallisticsFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DelayLine.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DelayLine.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DryWetMixer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_DryWetMixer.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Gain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oscillator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Panner.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Panner.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessContext.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_WaveShaper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableTPTFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Bias.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Chorus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Chorus.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Compressor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Compressor.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Gain.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_LadderFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_LadderFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Limiter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Limiter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_NoiseGate.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_NoiseGate.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Oscillator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Phaser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Phaser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/widgets/juce_WaveShaper.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -230,10 +230,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -242,6 +242,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1220,24 +1223,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2190,10 +2229,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2647,21 +2686,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -314,6 +314,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -586,10 +589,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -598,6 +601,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1630,24 +1636,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -2781,16 +2823,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4152,13 +4194,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4167,13 +4215,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4188,15 +4236,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -230,10 +230,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -242,6 +242,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1220,24 +1223,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2190,10 +2229,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2647,21 +2686,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -314,6 +314,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -586,10 +589,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -598,6 +601,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1630,24 +1636,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -2781,16 +2823,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4152,13 +4194,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4167,13 +4215,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4188,15 +4236,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -230,10 +230,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -242,6 +242,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1220,24 +1223,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2190,10 +2229,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2647,21 +2686,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -314,6 +314,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -586,10 +589,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -598,6 +601,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1630,24 +1636,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -2781,16 +2823,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4152,13 +4194,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4167,13 +4215,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4188,15 +4236,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -52,3 +52,7 @@ target_link_libraries(AudioPluginHost PRIVATE | |||
| juce::juce_dsp | |||
| juce::juce_opengl | |||
| juce::juce_video) | |||
| if(CMAKE_SYSTEM_NAME STREQUAL "iOS") | |||
| juce_add_bundle_resources_directory(AudioPluginHost ../../examples/Assets) | |||
| endif() | |||
| @@ -1,7 +1,7 @@ | |||
| # ============================================================================== | |||
| # | |||
| # This file is part of the JUCE library. | |||
| # Copyright (c) 2017 - ROLI Ltd. | |||
| # Copyright (c) 2020 - Raw Material Software Limited | |||
| # | |||
| # JUCE is an open source library subject to commercial or open-source | |||
| # licensing. | |||
| @@ -102,16 +102,17 @@ add_library( ${BINARY_NAME} | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" | |||
| "../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" | |||
| "../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.mm" | |||
| "../../../../../modules/juce_audio_basics/juce_audio_basics.h" | |||
| @@ -1585,16 +1586,17 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/sources/ju | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_ADSR.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Decibels.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_GenericInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Interpolators.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_SmoothedValue.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.mm" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| set_source_files_properties("../../../../../modules/juce_audio_basics/juce_audio_basics.h" PROPERTIES HEADER_FILE_ONLY TRUE) | |||
| @@ -223,10 +223,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -235,6 +235,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2132,10 +2135,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -538,10 +538,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -550,6 +550,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -2670,16 +2673,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -239,10 +239,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -251,6 +251,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1283,24 +1286,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2303,10 +2342,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2785,21 +2824,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -338,6 +338,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -625,10 +628,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -637,6 +640,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1723,24 +1729,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -2931,16 +2973,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4377,13 +4419,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4392,13 +4440,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4413,15 +4461,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -239,10 +239,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -251,6 +251,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1283,24 +1286,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2303,10 +2342,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -2785,21 +2824,33 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> | |||
| @@ -338,6 +338,9 @@ | |||
| <Filter Include="JUCE Modules\juce_dsp\processors"> | |||
| <UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp\widgets"> | |||
| <UniqueIdentifier>{73374573-0194-9A6E-461A-A81EEB511C26}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_dsp"> | |||
| <UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier> | |||
| </Filter> | |||
| @@ -625,10 +628,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -637,6 +640,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -1723,24 +1729,60 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClCompile> | |||
| @@ -2931,16 +2973,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -4377,13 +4419,19 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"> | |||
| <Filter>JUCE Modules\juce_dsp\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_BallisticsFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DelayLine.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_DryWetMixer.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FirstOrderTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"> | |||
| @@ -4392,13 +4440,13 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LinkwitzRileyFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Panner.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"> | |||
| @@ -4413,15 +4461,45 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableTPTFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\processors</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Bias.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Chorus.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Compressor.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Gain.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_LadderFilter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Limiter.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_NoiseGate.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Oscillator.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Phaser.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_Reverb.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\widgets\juce_WaveShaper.h"> | |||
| <Filter>JUCE Modules\juce_dsp\widgets</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"> | |||
| <Filter>JUCE Modules\juce_dsp</Filter> | |||
| </ClInclude> | |||
| @@ -222,10 +222,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -234,6 +234,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -2108,10 +2111,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ToneGeneratorAudioSource.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.h"/> | |||
| @@ -535,10 +535,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\synthesisers\juce_Synthesiser.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\synthesisers</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.cpp"> | |||
| @@ -547,6 +547,9 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_SmoothedValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_WindowedSincInterpolator.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\juce_audio_basics.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics</Filter> | |||
| </ClCompile> | |||
| @@ -2637,16 +2640,16 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_ADSR.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_CatmullRomInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Decibels.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_GenericInterpolator.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_IIRFilter.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_LagrangeInterpolator.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Interpolators.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\utilities</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\utilities\juce_Reverb.h"> | |||
| @@ -59,7 +59,8 @@ | |||
| #include "buffers/juce_AudioProcessLoadMeasurer.cpp" | |||
| #include "utilities/juce_IIRFilter.cpp" | |||
| #include "utilities/juce_LagrangeInterpolator.cpp" | |||
| #include "utilities/juce_CatmullRomInterpolator.cpp" | |||
| #include "utilities/juce_WindowedSincInterpolator.cpp" | |||
| #include "utilities/juce_Interpolators.cpp" | |||
| #include "utilities/juce_SmoothedValue.cpp" | |||
| #include "midi/juce_MidiBuffer.cpp" | |||
| #include "midi/juce_MidiFile.cpp" | |||
| @@ -88,8 +88,8 @@ | |||
| #include "buffers/juce_AudioProcessLoadMeasurer.h" | |||
| #include "utilities/juce_Decibels.h" | |||
| #include "utilities/juce_IIRFilter.h" | |||
| #include "utilities/juce_LagrangeInterpolator.h" | |||
| #include "utilities/juce_CatmullRomInterpolator.h" | |||
| #include "utilities/juce_GenericInterpolator.h" | |||
| #include "utilities/juce_Interpolators.h" | |||
| #include "utilities/juce_SmoothedValue.h" | |||
| #include "utilities/juce_Reverb.h" | |||
| #include "utilities/juce_ADSR.h" | |||
| @@ -24,7 +24,7 @@ namespace juce | |||
| { | |||
| MemoryAudioSource::MemoryAudioSource (AudioBuffer<float>& bufferToUse, bool copyMemory, bool shouldLoop) | |||
| : isLooping (shouldLoop) | |||
| : isCurrentlyLooping (shouldLoop) | |||
| { | |||
| if (copyMemory) | |||
| buffer.makeCopyOf (bufferToUse); | |||
| @@ -50,7 +50,7 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT | |||
| auto n = buffer.getNumSamples(), m = bufferToFill.numSamples; | |||
| int i; | |||
| for (i = position; (i < n || isLooping) && (pos < m); i += max) | |||
| for (i = position; (i < n || isCurrentlyLooping) && (pos < m); i += max) | |||
| { | |||
| max = jmin (m - pos, n - (i % n)); | |||
| @@ -70,4 +70,31 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT | |||
| position = (i % n); | |||
| } | |||
| //============================================================================== | |||
| void MemoryAudioSource::setNextReadPosition (int64 newPosition) | |||
| { | |||
| position = (int) newPosition; | |||
| } | |||
| int64 MemoryAudioSource::getNextReadPosition() const | |||
| { | |||
| return position; | |||
| } | |||
| int64 MemoryAudioSource::getTotalLength() const | |||
| { | |||
| return buffer.getNumSamples(); | |||
| } | |||
| //============================================================================== | |||
| bool MemoryAudioSource::isLooping() const | |||
| { | |||
| return isCurrentlyLooping; | |||
| } | |||
| void MemoryAudioSource::setLooping (bool shouldLoop) | |||
| { | |||
| isCurrentlyLooping = shouldLoop; | |||
| } | |||
| } // namespace juce | |||
| @@ -29,7 +29,7 @@ namespace juce | |||
| @tags{Audio} | |||
| */ | |||
| class JUCE_API MemoryAudioSource : public AudioSource | |||
| class JUCE_API MemoryAudioSource : public PositionableAudioSource | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| @@ -52,11 +52,28 @@ public: | |||
| /** Implementation of the AudioSource method. */ | |||
| void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override; | |||
| //============================================================================== | |||
| /** Implementation of the PositionableAudioSource method. */ | |||
| void setNextReadPosition (int64 newPosition) override; | |||
| /** Implementation of the PositionableAudioSource method. */ | |||
| int64 getNextReadPosition() const override; | |||
| /** Implementation of the PositionableAudioSource method. */ | |||
| int64 getTotalLength() const override; | |||
| //============================================================================== | |||
| /** Implementation of the PositionableAudioSource method. */ | |||
| bool isLooping() const override; | |||
| /** Implementation of the PositionableAudioSource method. */ | |||
| void setLooping (bool shouldLoop) override; | |||
| private: | |||
| //============================================================================== | |||
| AudioBuffer<float> buffer; | |||
| int position = 0; | |||
| bool isLooping; | |||
| bool isCurrentlyLooping; | |||
| //============================================================================== | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryAudioSource) | |||
| @@ -1,75 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| 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 | |||
| { | |||
| struct CatmullRomAlgorithm | |||
| { | |||
| static forcedinline float valueAtOffset (const float* const inputs, const float offset) noexcept | |||
| { | |||
| auto y0 = inputs[3]; | |||
| auto y1 = inputs[2]; | |||
| auto y2 = inputs[1]; | |||
| auto y3 = inputs[0]; | |||
| auto halfY0 = 0.5f * y0; | |||
| auto halfY3 = 0.5f * y3; | |||
| return y1 + offset * ((0.5f * y2 - halfY0) | |||
| + (offset * (((y0 + 2.0f * y2) - (halfY3 + 2.5f * y1)) | |||
| + (offset * ((halfY3 + 1.5f * y1) - (halfY0 + 1.5f * y2)))))); | |||
| } | |||
| }; | |||
| CatmullRomInterpolator::CatmullRomInterpolator() noexcept { reset(); } | |||
| CatmullRomInterpolator::~CatmullRomInterpolator() noexcept {} | |||
| void CatmullRomInterpolator::reset() noexcept | |||
| { | |||
| subSamplePos = 1.0; | |||
| for (auto& s : lastInputSamples) | |||
| s = 0; | |||
| } | |||
| int CatmullRomInterpolator::process (double actualRatio, const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
| { | |||
| return interpolate<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap); | |||
| } | |||
| int CatmullRomInterpolator::process (double actualRatio, const float* in, float* out, int numOut) noexcept | |||
| { | |||
| return interpolate<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut); | |||
| } | |||
| int CatmullRomInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, int available, int wrap, float gain) noexcept | |||
| { | |||
| return interpolateAdding<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap, gain); | |||
| } | |||
| int CatmullRomInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, float gain) noexcept | |||
| { | |||
| return interpolateAdding<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, gain); | |||
| } | |||
| } // namespace juce | |||
| @@ -1,146 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| 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 | |||
| { | |||
| /** | |||
| Interpolator for resampling a stream of floats using Catmull-Rom interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own CatmullRomInterpolator | |||
| object. | |||
| @see LagrangeInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| class JUCE_API CatmullRomInterpolator | |||
| { | |||
| public: | |||
| CatmullRomInterpolator() noexcept; | |||
| ~CatmullRomInterpolator() noexcept; | |||
| CatmullRomInterpolator (CatmullRomInterpolator&&) noexcept = default; | |||
| CatmullRomInterpolator& operator= (CatmullRomInterpolator&&) noexcept = default; | |||
| /** Resets the state of the interpolator. | |||
| Call this when there's a break in the continuity of the input data stream. | |||
| */ | |||
| void reset() noexcept; | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce) noexcept; | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param available the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int available, | |||
| int wrapAround) noexcept; | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| float gain) noexcept; | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param available the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int available, | |||
| int wrapAround, | |||
| float gain) noexcept; | |||
| private: | |||
| float lastInputSamples[5]; | |||
| double subSamplePos; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CatmullRomInterpolator) | |||
| }; | |||
| } // namespace juce | |||
| @@ -0,0 +1,493 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| /** | |||
| An interpolator base class for resampling streams of floats. | |||
| Note that the resamplers are stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own interpolator object. | |||
| @see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
| LinearInterpolator, ZeroOrderHoldInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| template <class InterpolatorTraits, int memorySize> | |||
| class JUCE_API GenericInterpolator | |||
| { | |||
| public: | |||
| GenericInterpolator() noexcept { reset(); } | |||
| GenericInterpolator (GenericInterpolator&&) noexcept = default; | |||
| GenericInterpolator& operator= (GenericInterpolator&&) noexcept = default; | |||
| /** Returns the latency of the interpolation algorithm in isolation. | |||
| In the context of resampling the total latency of a process using | |||
| the interpolator is the base latency divided by the speed ratio. | |||
| */ | |||
| static constexpr float getBaseLatency() noexcept | |||
| { | |||
| return InterpolatorTraits::algorithmicLatency; | |||
| } | |||
| /** Resets the state of the interpolator. | |||
| Call this when there's a break in the continuity of the input data stream. | |||
| */ | |||
| void reset() noexcept | |||
| { | |||
| indexBuffer = 0; | |||
| subSamplePos = 1.0; | |||
| std::fill (std::begin (lastInputSamples), std::end (lastInputSamples), 0.0f); | |||
| } | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce) noexcept | |||
| { | |||
| return interpolate (speedRatio, inputSamples, outputSamples, numOutputSamplesToProduce); | |||
| } | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param numInputSamplesAvailable the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int numInputSamplesAvailable, | |||
| int wrapAround) noexcept | |||
| { | |||
| return interpolate (speedRatio, inputSamples, outputSamples, | |||
| numOutputSamplesToProduce, numInputSamplesAvailable, wrapAround); | |||
| } | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| float gain) noexcept | |||
| { | |||
| return interpolateAdding (speedRatio, inputSamples, outputSamples, numOutputSamplesToProduce, gain); | |||
| } | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param numInputSamplesAvailable the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int numInputSamplesAvailable, | |||
| int wrapAround, | |||
| float gain) noexcept | |||
| { | |||
| return interpolateAdding (speedRatio, inputSamples, outputSamples, | |||
| numOutputSamplesToProduce, numInputSamplesAvailable, wrapAround, gain); | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| forcedinline void pushInterpolationSample (float newValue) noexcept | |||
| { | |||
| lastInputSamples[indexBuffer] = newValue; | |||
| if (++indexBuffer == memorySize) | |||
| indexBuffer = 0; | |||
| } | |||
| forcedinline void pushInterpolationSamples (const float* input, | |||
| int numOutputSamplesToProduce) noexcept | |||
| { | |||
| if (numOutputSamplesToProduce >= memorySize) | |||
| { | |||
| const auto* const offsetInput = input + (numOutputSamplesToProduce - memorySize); | |||
| for (int i = 0; i < memorySize; ++i) | |||
| pushInterpolationSample (offsetInput[i]); | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOutputSamplesToProduce; ++i) | |||
| pushInterpolationSample (input[i]); | |||
| } | |||
| } | |||
| forcedinline void pushInterpolationSamples (const float* input, | |||
| int numOutputSamplesToProduce, | |||
| int numInputSamplesAvailable, | |||
| int wrapAround) noexcept | |||
| { | |||
| if (numOutputSamplesToProduce >= memorySize) | |||
| { | |||
| if (numInputSamplesAvailable >= memorySize) | |||
| { | |||
| pushInterpolationSamples (input, | |||
| numOutputSamplesToProduce); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSamples (input + ((numOutputSamplesToProduce - numInputSamplesAvailable) - 1), | |||
| numInputSamplesAvailable); | |||
| if (wrapAround > 0) | |||
| { | |||
| numOutputSamplesToProduce -= wrapAround; | |||
| pushInterpolationSamples (input + ((numOutputSamplesToProduce - (memorySize - numInputSamplesAvailable)) - 1), | |||
| memorySize - numInputSamplesAvailable); | |||
| } | |||
| else | |||
| { | |||
| for (int i = numInputSamplesAvailable; i < memorySize; ++i) | |||
| pushInterpolationSample (0.0f); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| if (numOutputSamplesToProduce > numInputSamplesAvailable) | |||
| { | |||
| for (int i = 0; i < numInputSamplesAvailable; ++i) | |||
| pushInterpolationSample (input[i]); | |||
| const auto extraSamples = numOutputSamplesToProduce - numInputSamplesAvailable; | |||
| if (wrapAround > 0) | |||
| { | |||
| const auto* const offsetInput = input + (numInputSamplesAvailable - wrapAround); | |||
| for (int i = 0; i < extraSamples; ++i) | |||
| pushInterpolationSample (offsetInput[i]); | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < extraSamples; ++i) | |||
| pushInterpolationSample (0.0f); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOutputSamplesToProduce; ++i) | |||
| pushInterpolationSample (input[i]); | |||
| } | |||
| } | |||
| } | |||
| //============================================================================== | |||
| int interpolate (double speedRatio, | |||
| const float* input, | |||
| float* output, | |||
| int numOutputSamplesToProduce) noexcept | |||
| { | |||
| auto pos = subSamplePos; | |||
| int numUsed = 0; | |||
| while (numOutputSamplesToProduce > 0) | |||
| { | |||
| while (pos >= 1.0) | |||
| { | |||
| pushInterpolationSample (input[numUsed++]); | |||
| pos -= 1.0; | |||
| } | |||
| *output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
| pos += speedRatio; | |||
| --numOutputSamplesToProduce; | |||
| } | |||
| subSamplePos = pos; | |||
| return numUsed; | |||
| } | |||
| int interpolate (double speedRatio, | |||
| const float* input, float* output, | |||
| int numOutputSamplesToProduce, | |||
| int numInputSamplesAvailable, | |||
| int wrap) noexcept | |||
| { | |||
| auto originalIn = input; | |||
| auto pos = subSamplePos; | |||
| bool exceeded = false; | |||
| if (speedRatio < 1.0) | |||
| { | |||
| for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
| { | |||
| if (pos >= 1.0) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (0.0f); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (*input++); | |||
| if (--numInputSamplesAvailable <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| input -= wrap; | |||
| numInputSamplesAvailable += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos -= 1.0; | |||
| } | |||
| *output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
| pos += speedRatio; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
| { | |||
| while (pos < speedRatio) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (*input++); | |||
| if (--numInputSamplesAvailable <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| input -= wrap; | |||
| numInputSamplesAvailable += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos += 1.0; | |||
| } | |||
| pos -= speedRatio; | |||
| *output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos), indexBuffer); | |||
| } | |||
| } | |||
| subSamplePos = pos; | |||
| if (wrap == 0) | |||
| return (int) (input - originalIn); | |||
| return ((int) (input - originalIn) + wrap) % wrap; | |||
| } | |||
| int interpolateAdding (double speedRatio, | |||
| const float* input, | |||
| float* output, | |||
| int numOutputSamplesToProduce, | |||
| int numInputSamplesAvailable, | |||
| int wrap, | |||
| float gain) noexcept | |||
| { | |||
| auto originalIn = input; | |||
| auto pos = subSamplePos; | |||
| bool exceeded = false; | |||
| if (speedRatio < 1.0) | |||
| { | |||
| for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
| { | |||
| if (pos >= 1.0) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (0.0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (*input++); | |||
| if (--numInputSamplesAvailable <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| input -= wrap; | |||
| numInputSamplesAvailable += wrap; | |||
| } | |||
| else | |||
| { | |||
| numInputSamplesAvailable = true; | |||
| } | |||
| } | |||
| } | |||
| pos -= 1.0; | |||
| } | |||
| *output++ += gain * InterpolatorTraits::valueAtOffset ((float) pos); | |||
| pos += speedRatio; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
| { | |||
| while (pos < speedRatio) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (0.0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (*input++); | |||
| if (--numInputSamplesAvailable <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| input -= wrap; | |||
| numInputSamplesAvailable += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos += 1.0; | |||
| } | |||
| pos -= speedRatio; | |||
| *output++ += gain * InterpolatorTraits::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos), indexBuffer); | |||
| } | |||
| } | |||
| subSamplePos = pos; | |||
| if (wrap == 0) | |||
| return (int) (input - originalIn); | |||
| return ((int) (input - originalIn) + wrap) % wrap; | |||
| } | |||
| int interpolateAdding (double speedRatio, | |||
| const float* input, | |||
| float* output, | |||
| int numOutputSamplesToProduce, | |||
| float gain) noexcept | |||
| { | |||
| auto pos = subSamplePos; | |||
| int numUsed = 0; | |||
| while (numOutputSamplesToProduce > 0) | |||
| { | |||
| while (pos >= 1.0) | |||
| { | |||
| pushInterpolationSample (input[numUsed++]); | |||
| pos -= 1.0; | |||
| } | |||
| *output++ += gain * InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
| pos += speedRatio; | |||
| --numOutputSamplesToProduce; | |||
| } | |||
| subSamplePos = pos; | |||
| return numUsed; | |||
| } | |||
| //============================================================================== | |||
| float lastInputSamples[(size_t) memorySize]; | |||
| double subSamplePos = 1.0; | |||
| int indexBuffer = 0; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GenericInterpolator) | |||
| }; | |||
| } // namespace juce | |||
| @@ -0,0 +1,184 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| #if JUCE_UNIT_TESTS | |||
| class InterpolatorTests : public UnitTest | |||
| { | |||
| public: | |||
| InterpolatorTests() | |||
| : UnitTest ("InterpolatorTests", UnitTestCategories::audio) | |||
| { | |||
| } | |||
| private: | |||
| template<typename InterpolatorType> | |||
| void runInterplatorTests (const String& interpolatorName) | |||
| { | |||
| auto createGaussian = [](std::vector<float>& destination, float scale, float centreInSamples, float width) | |||
| { | |||
| for (size_t i = 0; i < destination.size(); ++i) | |||
| { | |||
| auto x = (((float) i) - centreInSamples) * width; | |||
| destination[i] = std::exp (-(x * x)); | |||
| } | |||
| FloatVectorOperations::multiply (destination.data(), scale, (int) destination.size()); | |||
| }; | |||
| auto findGaussianPeak = [](const std::vector<float>& input) -> float | |||
| { | |||
| auto max = std::max_element (std::begin (input), std::end (input)); | |||
| auto maxPrev = max - 1; | |||
| jassert (maxPrev >= std::begin (input)); | |||
| auto maxNext = max + 1; | |||
| jassert (maxNext < std::end (input)); | |||
| auto quadraticMaxLoc = (*maxPrev - *maxNext) / (2.0f * ((*maxNext + *maxPrev) - (2.0f * *max))); | |||
| return quadraticMaxLoc + (float) std::distance (std::begin (input), max); | |||
| }; | |||
| auto expectAllElementsWithin = [this](const std::vector<float>& v1, const std::vector<float>& v2, float tolerance) | |||
| { | |||
| expectEquals ((int) v1.size(), (int) v2.size()); | |||
| for (size_t i = 0; i < v1.size(); ++i) | |||
| expectWithinAbsoluteError (v1[i], v2[i], tolerance); | |||
| }; | |||
| InterpolatorType interpolator; | |||
| constexpr size_t inputSize = 1001; | |||
| static_assert (inputSize > 800 + InterpolatorType::getBaseLatency(), | |||
| "The test InterpolatorTests input buffer is too small"); | |||
| std::vector<float> input (inputSize); | |||
| constexpr auto inputGaussianMidpoint = (float) (inputSize - 1) / 2.0f; | |||
| constexpr auto inputGaussianValueAtEnds = 0.000001f; | |||
| const auto inputGaussianWidth = std::sqrt (-std::log (inputGaussianValueAtEnds)) / inputGaussianMidpoint; | |||
| createGaussian (input, 1.0f, inputGaussianMidpoint, inputGaussianWidth); | |||
| for (auto speedRatio : { 0.4, 0.8263, 1.0, 1.05, 1.2384, 1.6 }) | |||
| { | |||
| const auto expectedGaussianMidpoint = (inputGaussianMidpoint + InterpolatorType::getBaseLatency()) / (float) speedRatio; | |||
| const auto expectedGaussianWidth = inputGaussianWidth * (float) speedRatio; | |||
| const auto outputBufferSize = (size_t) std::floor ((float) input.size() / speedRatio); | |||
| for (int numBlocks : { 1, 5 }) | |||
| { | |||
| const auto inputBlockSize = (float) input.size() / (float) numBlocks; | |||
| const auto outputBlockSize = (int) std::floor (inputBlockSize / speedRatio); | |||
| std::vector<float> output (outputBufferSize, std::numeric_limits<float>::min()); | |||
| beginTest (interpolatorName + " process " + String (numBlocks) + " blocks ratio " + String (speedRatio)); | |||
| interpolator.reset(); | |||
| { | |||
| auto* inputPtr = input.data(); | |||
| auto* outputPtr = output.data(); | |||
| for (int i = 0; i < numBlocks; ++i) | |||
| { | |||
| auto numInputSamplesRead = interpolator.process (speedRatio, inputPtr, outputPtr, outputBlockSize); | |||
| inputPtr += numInputSamplesRead; | |||
| outputPtr += outputBlockSize; | |||
| } | |||
| } | |||
| expectWithinAbsoluteError (findGaussianPeak (output), expectedGaussianMidpoint, 0.1f); | |||
| std::vector<float> expectedOutput (output.size()); | |||
| createGaussian (expectedOutput, 1.0f, expectedGaussianMidpoint, expectedGaussianWidth); | |||
| expectAllElementsWithin (output, expectedOutput, 0.02f); | |||
| beginTest (interpolatorName + " process adding " + String (numBlocks) + " blocks ratio " + String (speedRatio)); | |||
| interpolator.reset(); | |||
| constexpr float addingGain = 0.7384f; | |||
| { | |||
| auto* inputPtr = input.data(); | |||
| auto* outputPtr = output.data(); | |||
| for (int i = 0; i < numBlocks; ++i) | |||
| { | |||
| auto numInputSamplesRead = interpolator.processAdding (speedRatio, inputPtr, outputPtr, outputBlockSize, addingGain); | |||
| inputPtr += numInputSamplesRead; | |||
| outputPtr += outputBlockSize; | |||
| } | |||
| } | |||
| expectWithinAbsoluteError (findGaussianPeak (output), expectedGaussianMidpoint, 0.1f); | |||
| std::vector<float> additionalOutput (output.size()); | |||
| createGaussian (additionalOutput, addingGain, expectedGaussianMidpoint, expectedGaussianWidth); | |||
| FloatVectorOperations::add (expectedOutput.data(), additionalOutput.data(), (int) additionalOutput.size()); | |||
| expectAllElementsWithin (output, expectedOutput, 0.02f); | |||
| } | |||
| beginTest (interpolatorName + " process wrap 0 ratio " + String (speedRatio)); | |||
| std::vector<float> doubleLengthOutput (2 * outputBufferSize, std::numeric_limits<float>::min()); | |||
| interpolator.reset(); | |||
| interpolator.process (speedRatio, input.data(), doubleLengthOutput.data(), (int) doubleLengthOutput.size(), | |||
| (int) input.size(), 0); | |||
| std::vector<float> expectedDoubleLengthOutput (doubleLengthOutput.size()); | |||
| createGaussian (expectedDoubleLengthOutput, 1.0f, expectedGaussianMidpoint, expectedGaussianWidth); | |||
| expectAllElementsWithin (doubleLengthOutput, expectedDoubleLengthOutput, 0.02f); | |||
| beginTest (interpolatorName + " process wrap double ratio " + String (speedRatio)); | |||
| interpolator.reset(); | |||
| interpolator.process (speedRatio, input.data(), doubleLengthOutput.data(), (int) doubleLengthOutput.size(), | |||
| (int) input.size(), (int) input.size()); | |||
| std::vector<float> secondGaussian (doubleLengthOutput.size()); | |||
| createGaussian (secondGaussian, 1.0f, expectedGaussianMidpoint + outputBufferSize, expectedGaussianWidth); | |||
| FloatVectorOperations::add (expectedDoubleLengthOutput.data(), secondGaussian.data(), (int) expectedDoubleLengthOutput.size()); | |||
| expectAllElementsWithin (doubleLengthOutput, expectedDoubleLengthOutput, 0.02f); | |||
| } | |||
| } | |||
| public: | |||
| void runTest() override | |||
| { | |||
| runInterplatorTests<WindowedSincInterpolator> ("WindowedSincInterpolator"); | |||
| runInterplatorTests<LagrangeInterpolator> ("LagrangeInterpolator"); | |||
| runInterplatorTests<CatmullRomInterpolator> ("CatmullRomInterpolator"); | |||
| runInterplatorTests<LinearInterpolator> ("LinearInterpolator"); | |||
| } | |||
| }; | |||
| static InterpolatorTests interpolatorTests; | |||
| #endif | |||
| } // namespace juce | |||
| @@ -0,0 +1,228 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| class Interpolators | |||
| { | |||
| private: | |||
| struct WindowedSincTraits | |||
| { | |||
| static constexpr float algorithmicLatency = 100.0f; | |||
| static forcedinline float windowedSinc (float firstFrac, int index) noexcept | |||
| { | |||
| auto index2 = index + 1; | |||
| auto frac = firstFrac; | |||
| auto value1 = lookupTable[index]; | |||
| auto value2 = lookupTable[index2]; | |||
| return value1 + (frac * (value2 - value1)); | |||
| } | |||
| static forcedinline float valueAtOffset (const float* const inputs, const float offset, int indexBuffer) noexcept | |||
| { | |||
| int numCrossings = 100; | |||
| float result = 0.0f; | |||
| auto samplePosition = indexBuffer; | |||
| float firstFrac = 0.0f; | |||
| float lastSincPosition = -1.0f; | |||
| int index = 0, sign = -1; | |||
| for (int i = -numCrossings; i <= numCrossings; ++i) | |||
| { | |||
| auto sincPosition = (1.0f - offset) + (float) i; | |||
| if (i == -numCrossings || (sincPosition >= 0 && lastSincPosition < 0)) | |||
| { | |||
| auto indexFloat = (sincPosition >= 0.f ? sincPosition : -sincPosition) * 100.0f; | |||
| index = (int) std::floor (indexFloat); | |||
| firstFrac = indexFloat - index; | |||
| sign = (sincPosition < 0 ? -1 : 1); | |||
| } | |||
| if (sincPosition == 0.0f) | |||
| result += inputs[samplePosition]; | |||
| else if (sincPosition < numCrossings && sincPosition > -numCrossings) | |||
| result += inputs[samplePosition] * windowedSinc (firstFrac, index); | |||
| if (++samplePosition == numCrossings * 2) | |||
| samplePosition = 0; | |||
| lastSincPosition = sincPosition; | |||
| index += 100 * sign; | |||
| } | |||
| return result; | |||
| } | |||
| static const float lookupTable[10001]; | |||
| }; | |||
| struct LagrangeTraits | |||
| { | |||
| static constexpr float algorithmicLatency = 2.0f; | |||
| static float valueAtOffset (const float*, float, int) noexcept; | |||
| }; | |||
| struct CatmullRomTraits | |||
| { | |||
| //============================================================================== | |||
| static constexpr float algorithmicLatency = 2.0f; | |||
| static forcedinline float valueAtOffset (const float* const inputs, const float offset, int index) noexcept | |||
| { | |||
| auto y0 = inputs[index]; if (++index == 4) index = 0; | |||
| auto y1 = inputs[index]; if (++index == 4) index = 0; | |||
| auto y2 = inputs[index]; if (++index == 4) index = 0; | |||
| auto y3 = inputs[index]; | |||
| auto halfY0 = 0.5f * y0; | |||
| auto halfY3 = 0.5f * y3; | |||
| return y1 + offset * ((0.5f * y2 - halfY0) | |||
| + (offset * (((y0 + 2.0f * y2) - (halfY3 + 2.5f * y1)) | |||
| + (offset * ((halfY3 + 1.5f * y1) - (halfY0 + 1.5f * y2)))))); | |||
| } | |||
| }; | |||
| struct LinearTraits | |||
| { | |||
| static constexpr float algorithmicLatency = 1.0f; | |||
| static forcedinline float valueAtOffset (const float* const inputs, const float offset, int index) noexcept | |||
| { | |||
| auto y0 = inputs[index]; | |||
| auto y1 = inputs[index == 0 ? 1 : 0]; | |||
| return y1 * offset + y0 * (1.0f - offset); | |||
| } | |||
| }; | |||
| struct ZeroOrderHoldTraits | |||
| { | |||
| static constexpr float algorithmicLatency = 0.0f; | |||
| static forcedinline float valueAtOffset (const float* const inputs, const float, int) noexcept | |||
| { | |||
| return inputs[0]; | |||
| } | |||
| }; | |||
| public: | |||
| using WindowedSinc = GenericInterpolator<WindowedSincTraits, 200>; | |||
| using Lagrange = GenericInterpolator<LagrangeTraits, 5>; | |||
| using CatmullRom = GenericInterpolator<CatmullRomTraits, 4>; | |||
| using Linear = GenericInterpolator<LinearTraits, 2>; | |||
| using ZeroOrderHold = GenericInterpolator<ZeroOrderHoldTraits, 1>; | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| An interpolator for resampling a stream of floats using high order windowed | |||
| (hann) sinc interpolation, recommended for high quality resampling. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own LinearInterpolator object. | |||
| @see GenericInterpolator | |||
| @see LagrangeInterpolator, CatmullRomInterpolator, LinearInterpolator, | |||
| ZeroOrderHoldInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| using WindowedSincInterpolator = Interpolators::WindowedSinc; | |||
| /** | |||
| An interpolator for resampling a stream of floats using 4-point lagrange interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own LagrangeInterpolator object. | |||
| @see GenericInterpolator | |||
| @see CatmullRomInterpolator, WindowedSincInterpolator, LinearInterpolator, | |||
| ZeroOrderHoldInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| using LagrangeInterpolator = Interpolators::Lagrange; | |||
| /** | |||
| An interpolator for resampling a stream of floats using Catmull-Rom interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own CatmullRomInterpolator object. | |||
| @see GenericInterpolator | |||
| @see LagrangeInterpolator, WindowedSincInterpolator, LinearInterpolator, | |||
| ZeroOrderHoldInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| using CatmullRomInterpolator = Interpolators::CatmullRom; | |||
| /** | |||
| An interpolator for resampling a stream of floats using linear interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own LinearInterpolator object. | |||
| @see GenericInterpolator | |||
| @see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
| ZeroOrderHoldInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| using LinearInterpolator = Interpolators::Linear; | |||
| /** | |||
| An interpolator for resampling a stream of floats using zero order hold | |||
| interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own ZeroOrderHoldInterpolator | |||
| object. | |||
| @see GenericInterpolator | |||
| @see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
| LinearInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| using ZeroOrderHoldInterpolator = Interpolators::ZeroOrderHold; | |||
| } // namespace juce | |||
| @@ -23,381 +23,6 @@ | |||
| namespace juce | |||
| { | |||
| namespace | |||
| { | |||
| static forcedinline void pushInterpolationSample (float* lastInputSamples, float newValue) noexcept | |||
| { | |||
| lastInputSamples[4] = lastInputSamples[3]; | |||
| lastInputSamples[3] = lastInputSamples[2]; | |||
| lastInputSamples[2] = lastInputSamples[1]; | |||
| lastInputSamples[1] = lastInputSamples[0]; | |||
| lastInputSamples[0] = newValue; | |||
| } | |||
| static forcedinline void pushInterpolationSamples (float* lastInputSamples, const float* input, int numOut) noexcept | |||
| { | |||
| if (numOut >= 5) | |||
| { | |||
| for (int i = 0; i < 5; ++i) | |||
| lastInputSamples[i] = input[--numOut]; | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOut; ++i) | |||
| pushInterpolationSample (lastInputSamples, input[i]); | |||
| } | |||
| } | |||
| static forcedinline void pushInterpolationSamples (float* lastInputSamples, const float* input, | |||
| int numOut, int available, int wrapAround) noexcept | |||
| { | |||
| if (numOut >= 5) | |||
| { | |||
| if (available >= 5) | |||
| { | |||
| for (int i = 0; i < 5; ++i) | |||
| lastInputSamples[i] = input[--numOut]; | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < available; ++i) | |||
| lastInputSamples[i] = input[--numOut]; | |||
| if (wrapAround > 0) | |||
| { | |||
| numOut -= wrapAround; | |||
| for (int i = available; i < 5; ++i) | |||
| lastInputSamples[i] = input[--numOut]; | |||
| } | |||
| else | |||
| { | |||
| for (int i = available; i < 5; ++i) | |||
| lastInputSamples[i] = 0.0f; | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| if (numOut > available) | |||
| { | |||
| for (int i = 0; i < available; ++i) | |||
| pushInterpolationSample (lastInputSamples, input[i]); | |||
| if (wrapAround > 0) | |||
| { | |||
| for (int i = 0; i < numOut - available; ++i) | |||
| pushInterpolationSample (lastInputSamples, input[i + available - wrapAround]); | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOut - available; ++i) | |||
| pushInterpolationSample (lastInputSamples, 0); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOut; ++i) | |||
| pushInterpolationSample (lastInputSamples, input[i]); | |||
| } | |||
| } | |||
| } | |||
| template <typename InterpolatorType> | |||
| static int interpolate (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
| const float* in, float* out, int numOut) noexcept | |||
| { | |||
| auto pos = subSamplePos; | |||
| if (actualRatio == 1.0 && pos == 1.0) | |||
| { | |||
| memcpy (out, in, (size_t) numOut * sizeof (float)); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut); | |||
| return numOut; | |||
| } | |||
| int numUsed = 0; | |||
| while (numOut > 0) | |||
| { | |||
| while (pos >= 1.0) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, in[numUsed++]); | |||
| pos -= 1.0; | |||
| } | |||
| *out++ = InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
| pos += actualRatio; | |||
| --numOut; | |||
| } | |||
| subSamplePos = pos; | |||
| return numUsed; | |||
| } | |||
| template <typename InterpolatorType> | |||
| static int interpolate (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
| const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
| { | |||
| if (actualRatio == 1.0) | |||
| { | |||
| if (available >= numOut) | |||
| { | |||
| memcpy (out, in, (size_t) numOut * sizeof (float)); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
| } | |||
| else | |||
| { | |||
| memcpy (out, in, (size_t) available * sizeof (float)); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
| if (wrap > 0) | |||
| { | |||
| memcpy (out + available, in + available - wrap, (size_t) (numOut - available) * sizeof (float)); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOut - available; ++i) | |||
| pushInterpolationSample (lastInputSamples, 0); | |||
| } | |||
| } | |||
| return numOut; | |||
| } | |||
| auto originalIn = in; | |||
| auto pos = subSamplePos; | |||
| bool exceeded = false; | |||
| if (actualRatio < 1.0) | |||
| { | |||
| for (int i = numOut; --i >= 0;) | |||
| { | |||
| if (pos >= 1.0) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, 0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (lastInputSamples, *in++); | |||
| if (--available <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| in -= wrap; | |||
| available += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos -= 1.0; | |||
| } | |||
| *out++ = InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
| pos += actualRatio; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = numOut; --i >= 0;) | |||
| { | |||
| while (pos < actualRatio) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, 0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (lastInputSamples, *in++); | |||
| if (--available <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| in -= wrap; | |||
| available += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos += 1.0; | |||
| } | |||
| pos -= actualRatio; | |||
| *out++ = InterpolatorType::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos)); | |||
| } | |||
| } | |||
| subSamplePos = pos; | |||
| if (wrap == 0) | |||
| return (int) (in - originalIn); | |||
| return ((int) (in - originalIn) + wrap) % wrap; | |||
| } | |||
| template <typename InterpolatorType> | |||
| static int interpolateAdding (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
| const float* in, float* out, int numOut, | |||
| int available, int wrap, float gain) noexcept | |||
| { | |||
| if (actualRatio == 1.0) | |||
| { | |||
| if (available >= numOut) | |||
| { | |||
| FloatVectorOperations::addWithMultiply (out, in, gain, numOut); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
| } | |||
| else | |||
| { | |||
| FloatVectorOperations::addWithMultiply (out, in, gain, available); | |||
| pushInterpolationSamples (lastInputSamples, in, available, available, wrap); | |||
| if (wrap > 0) | |||
| { | |||
| FloatVectorOperations::addWithMultiply (out, in - wrap, gain, numOut - available); | |||
| pushInterpolationSamples (lastInputSamples, in - wrap, numOut - available, available, wrap); | |||
| } | |||
| else | |||
| { | |||
| for (int i = 0; i < numOut-available; ++i) | |||
| pushInterpolationSample (lastInputSamples, 0.0); | |||
| } | |||
| } | |||
| return numOut; | |||
| } | |||
| auto originalIn = in; | |||
| auto pos = subSamplePos; | |||
| bool exceeded = false; | |||
| if (actualRatio < 1.0) | |||
| { | |||
| for (int i = numOut; --i >= 0;) | |||
| { | |||
| if (pos >= 1.0) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, 0.0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (lastInputSamples, *in++); | |||
| if (--available <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| in -= wrap; | |||
| available += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos -= 1.0; | |||
| } | |||
| *out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
| pos += actualRatio; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int i = numOut; --i >= 0;) | |||
| { | |||
| while (pos < actualRatio) | |||
| { | |||
| if (exceeded) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, 0.0); | |||
| } | |||
| else | |||
| { | |||
| pushInterpolationSample (lastInputSamples, *in++); | |||
| if (--available <= 0) | |||
| { | |||
| if (wrap > 0) | |||
| { | |||
| in -= wrap; | |||
| available += wrap; | |||
| } | |||
| else | |||
| { | |||
| exceeded = true; | |||
| } | |||
| } | |||
| } | |||
| pos += 1.0; | |||
| } | |||
| pos -= actualRatio; | |||
| *out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos)); | |||
| } | |||
| } | |||
| subSamplePos = pos; | |||
| if (wrap == 0) | |||
| return (int) (in - originalIn); | |||
| return ((int) (in - originalIn) + wrap) % wrap; | |||
| } | |||
| template <typename InterpolatorType> | |||
| static int interpolateAdding (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
| const float* in, float* out, int numOut, float gain) noexcept | |||
| { | |||
| auto pos = subSamplePos; | |||
| if (actualRatio == 1.0 && pos == 1.0) | |||
| { | |||
| FloatVectorOperations::addWithMultiply (out, in, gain, numOut); | |||
| pushInterpolationSamples (lastInputSamples, in, numOut); | |||
| return numOut; | |||
| } | |||
| int numUsed = 0; | |||
| while (numOut > 0) | |||
| { | |||
| while (pos >= 1.0) | |||
| { | |||
| pushInterpolationSample (lastInputSamples, in[numUsed++]); | |||
| pos -= 1.0; | |||
| } | |||
| *out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
| pos += actualRatio; | |||
| --numOut; | |||
| } | |||
| subSamplePos = pos; | |||
| return numUsed; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| template <int k> | |||
| struct LagrangeResampleHelper | |||
| { | |||
| @@ -410,58 +35,28 @@ struct LagrangeResampleHelper<0> | |||
| static forcedinline void calc (float&, float) noexcept {} | |||
| }; | |||
| struct LagrangeAlgorithm | |||
| { | |||
| static forcedinline float valueAtOffset (const float* inputs, float offset) noexcept | |||
| { | |||
| return calcCoefficient<0> (inputs[4], offset) | |||
| + calcCoefficient<1> (inputs[3], offset) | |||
| + calcCoefficient<2> (inputs[2], offset) | |||
| + calcCoefficient<3> (inputs[1], offset) | |||
| + calcCoefficient<4> (inputs[0], offset); | |||
| } | |||
| template <int k> | |||
| static forcedinline float calcCoefficient (float input, float offset) noexcept | |||
| { | |||
| LagrangeResampleHelper<0 - k>::calc (input, -2.0f - offset); | |||
| LagrangeResampleHelper<1 - k>::calc (input, -1.0f - offset); | |||
| LagrangeResampleHelper<2 - k>::calc (input, 0.0f - offset); | |||
| LagrangeResampleHelper<3 - k>::calc (input, 1.0f - offset); | |||
| LagrangeResampleHelper<4 - k>::calc (input, 2.0f - offset); | |||
| return input; | |||
| } | |||
| }; | |||
| LagrangeInterpolator::LagrangeInterpolator() noexcept { reset(); } | |||
| LagrangeInterpolator::~LagrangeInterpolator() noexcept {} | |||
| void LagrangeInterpolator::reset() noexcept | |||
| { | |||
| subSamplePos = 1.0; | |||
| for (auto& s : lastInputSamples) | |||
| s = 0; | |||
| } | |||
| int LagrangeInterpolator::process (double actualRatio, const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
| { | |||
| return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap); | |||
| template <int k> | |||
| static float calcCoefficient (float input, float offset) noexcept | |||
| { | |||
| LagrangeResampleHelper<0 - k>::calc (input, -2.0f - offset); | |||
| LagrangeResampleHelper<1 - k>::calc (input, -1.0f - offset); | |||
| LagrangeResampleHelper<2 - k>::calc (input, 0.0f - offset); | |||
| LagrangeResampleHelper<3 - k>::calc (input, 1.0f - offset); | |||
| LagrangeResampleHelper<4 - k>::calc (input, 2.0f - offset); | |||
| return input; | |||
| } | |||
| int LagrangeInterpolator::process (double actualRatio, const float* in, float* out, int numOut) noexcept | |||
| float Interpolators::LagrangeTraits::valueAtOffset (const float* inputs, float offset, int index) noexcept | |||
| { | |||
| return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut); | |||
| } | |||
| float result = 0.0f; | |||
| int LagrangeInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, int available, int wrap, float gain) noexcept | |||
| { | |||
| return interpolateAdding<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap, gain); | |||
| } | |||
| result += calcCoefficient<0> (inputs[index], offset); if (++index == 5) index = 0; | |||
| result += calcCoefficient<1> (inputs[index], offset); if (++index == 5) index = 0; | |||
| result += calcCoefficient<2> (inputs[index], offset); if (++index == 5) index = 0; | |||
| result += calcCoefficient<3> (inputs[index], offset); if (++index == 5) index = 0; | |||
| result += calcCoefficient<4> (inputs[index], offset); | |||
| int LagrangeInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, float gain) noexcept | |||
| { | |||
| return interpolateAdding<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, gain); | |||
| return result; | |||
| } | |||
| } // namespace juce | |||
| @@ -1,146 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| 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 | |||
| { | |||
| /** | |||
| Interpolator for resampling a stream of floats using 4-point lagrange interpolation. | |||
| Note that the resampler is stateful, so when there's a break in the continuity | |||
| of the input stream you're feeding it, you should call reset() before feeding | |||
| it any new data. And like with any other stateful filter, if you're resampling | |||
| multiple channels, make sure each one uses its own LagrangeInterpolator | |||
| object. | |||
| @see CatmullRomInterpolator | |||
| @tags{Audio} | |||
| */ | |||
| class JUCE_API LagrangeInterpolator | |||
| { | |||
| public: | |||
| LagrangeInterpolator() noexcept; | |||
| ~LagrangeInterpolator() noexcept; | |||
| LagrangeInterpolator (LagrangeInterpolator&&) noexcept = default; | |||
| LagrangeInterpolator& operator= (LagrangeInterpolator&&) noexcept = default; | |||
| /** Resets the state of the interpolator. | |||
| Call this when there's a break in the continuity of the input data stream. | |||
| */ | |||
| void reset() noexcept; | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce) noexcept; | |||
| /** Resamples a stream of samples. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results into | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param available the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int process (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int available, | |||
| int wrapAround) noexcept; | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| float gain) noexcept; | |||
| /** Resamples a stream of samples, adding the results to the output data | |||
| with a gain. | |||
| @param speedRatio the number of input samples to use for each output sample | |||
| @param inputSamples the source data to read from. This must contain at | |||
| least (speedRatio * numOutputSamplesToProduce) samples. | |||
| @param outputSamples the buffer to write the results to - the result values will be added | |||
| to any pre-existing data in this buffer after being multiplied by | |||
| the gain factor | |||
| @param numOutputSamplesToProduce the number of output samples that should be created | |||
| @param available the number of available input samples. If it needs more samples | |||
| than available, it either wraps back for wrapAround samples, or | |||
| it feeds zeroes | |||
| @param wrapAround if the stream exceeds available samples, it wraps back for | |||
| wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
| @param gain a gain factor to multiply the resulting samples by before | |||
| adding them to the destination buffer | |||
| @returns the actual number of input samples that were used | |||
| */ | |||
| int processAdding (double speedRatio, | |||
| const float* inputSamples, | |||
| float* outputSamples, | |||
| int numOutputSamplesToProduce, | |||
| int available, | |||
| int wrapAround, | |||
| float gain) noexcept; | |||
| private: | |||
| float lastInputSamples[5]; | |||
| double subSamplePos; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LagrangeInterpolator) | |||
| }; | |||
| } // namespace juce | |||
| @@ -130,6 +130,50 @@ Type jmap (Type sourceValue, Type sourceRangeMin, Type sourceRangeMax, Type targ | |||
| return targetRangeMin + ((targetRangeMax - targetRangeMin) * (sourceValue - sourceRangeMin)) / (sourceRangeMax - sourceRangeMin); | |||
| } | |||
| /** Remaps a normalised value (between 0 and 1) to a logarithmic target range. | |||
| The entire target range must be greater than zero. | |||
| @see mapFromLog10 | |||
| @code | |||
| mapToLog10 (0.5, 0.4, 40.0) == 4.0 | |||
| @endcode | |||
| */ | |||
| template <typename Type> | |||
| Type mapToLog10 (Type value0To1, Type logRangeMin, Type logRangeMax) | |||
| { | |||
| jassert (logRangeMin > 0); | |||
| jassert (logRangeMax > 0); | |||
| auto logMin = std::log10 (logRangeMin); | |||
| auto logMax = std::log10 (logRangeMax); | |||
| return std::pow ((Type) 10.0, value0To1 * (logMax - logMin) + logMin); | |||
| } | |||
| /** Remaps a logarithmic value in a target range to a normalised value (between 0 and 1). | |||
| The entire target range must be greater than zero. | |||
| @see mapToLog10 | |||
| @code | |||
| mapFromLog10 (4.0, 0.4, 40.0) == 0.5 | |||
| @endcode | |||
| */ | |||
| template <typename Type> | |||
| Type mapFromLog10 (Type valueInLogRange, Type logRangeMin, Type logRangeMax) | |||
| { | |||
| jassert (logRangeMin > 0); | |||
| jassert (logRangeMax > 0); | |||
| auto logMin = std::log10 (logRangeMin); | |||
| auto logMax = std::log10 (logRangeMax); | |||
| return (std::log10 (valueInLogRange) - logMin) / (logMax - logMin); | |||
| } | |||
| /** Scans an array of values, returning the minimum value that it contains. */ | |||
| template <typename Type> | |||
| Type findMinimum (const Type* data, int numValues) | |||
| @@ -75,6 +75,9 @@ public: | |||
| /** Provides the type of scoped unlocker to use with a SpinLock. */ | |||
| using ScopedUnlockType = GenericScopedUnlock<SpinLock>; | |||
| /** Provides the type of scoped try-lock to use for locking a SpinLock. */ | |||
| using ScopedTryLockType = GenericScopedTryLock<SpinLock>; | |||
| private: | |||
| //============================================================================== | |||
| mutable Atomic<int> lock; | |||
| @@ -545,7 +545,7 @@ ReferenceCountedArray<IIR::Coefficients<FloatType>> | |||
| { | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeFirstOrderLowPass (sampleRate, frequency)); | |||
| for (auto i = 0; i < order / 2; ++i) | |||
| for (int i = 0; i < order / 2; ++i) | |||
| { | |||
| auto Q = 1.0 / (2.0 * std::cos ((i + 1.0) * MathConstants<double>::pi / order)); | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeLowPass (sampleRate, frequency, | |||
| @@ -554,7 +554,7 @@ ReferenceCountedArray<IIR::Coefficients<FloatType>> | |||
| } | |||
| else | |||
| { | |||
| for (auto i = 0; i < order / 2; ++i) | |||
| for (int i = 0; i < order / 2; ++i) | |||
| { | |||
| auto Q = 1.0 / (2.0 * std::cos ((2.0 * i + 1.0) * MathConstants<double>::pi / (order * 2.0))); | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeLowPass (sampleRate, frequency, | |||
| @@ -580,7 +580,7 @@ ReferenceCountedArray<IIR::Coefficients<FloatType>> | |||
| { | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeFirstOrderHighPass (sampleRate, frequency)); | |||
| for (auto i = 0; i < order / 2; ++i) | |||
| for (int i = 0; i < order / 2; ++i) | |||
| { | |||
| auto Q = 1.0 / (2.0 * std::cos ((i + 1.0) * MathConstants<double>::pi / order)); | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeHighPass (sampleRate, frequency, | |||
| @@ -589,7 +589,7 @@ ReferenceCountedArray<IIR::Coefficients<FloatType>> | |||
| } | |||
| else | |||
| { | |||
| for (auto i = 0; i < order / 2; ++i) | |||
| for (int i = 0; i < order / 2; ++i) | |||
| { | |||
| auto Q = 1.0 / (2.0 * std::cos ((2.0 * i + 1.0) * MathConstants<double>::pi / (order * 2.0))); | |||
| arrayFilters.add (*IIR::Coefficients<FloatType>::makeHighPass (sampleRate, frequency, | |||
| @@ -685,7 +685,7 @@ struct Convolution::Pimpl : private Thread | |||
| /** This function copies a buffer to a temporary location, so that any external | |||
| audio source can be processed then in the dedicated thread. | |||
| */ | |||
| void copyBufferToTemporaryLocation (dsp::AudioBlock<float> block) | |||
| void copyBufferToTemporaryLocation (AudioBlock<float> block) | |||
| { | |||
| const SpinLock::ScopedLockType sl (processLock); | |||
| @@ -725,7 +725,7 @@ struct Convolution::Pimpl : private Thread | |||
| } | |||
| else | |||
| { | |||
| auto interpolated = dsp::AudioBlock<float> (interpolationBuffer).getSubBlock (0, numSamples); | |||
| auto interpolated = AudioBlock<float> (interpolationBuffer).getSubBlock (0, numSamples); | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| @@ -167,7 +167,7 @@ struct FFTFallback : public FFT::Instance | |||
| { | |||
| auto* input = reinterpret_cast<Complex<float>*> (d); | |||
| for (auto i = size >> 1; i < size; ++i) | |||
| for (int i = size >> 1; i < size; ++i) | |||
| input[i] = std::conj (input[size - i]); | |||
| perform (input, scratch, true); | |||
| @@ -681,7 +681,7 @@ struct FFTWImpl : public FFT::Instance | |||
| auto size = (1 << order); | |||
| if (! ignoreNegativeFreqs) | |||
| for (auto i = size >> 1; i < size; ++i) | |||
| for (int i = size >> 1; i < size; ++i) | |||
| out[i] = std::conj (out[size - i]); | |||
| } | |||
| @@ -780,7 +780,7 @@ struct IntelFFT : public FFT::Instance | |||
| auto size = (1 << order); | |||
| if (! ignoreNegativeFreqs) | |||
| for (auto i = size >> 1; i < size; ++i) | |||
| for (int i = size >> 1; i < size; ++i) | |||
| out[i] = std::conj (out[size - i]); | |||
| } | |||
| @@ -971,7 +971,7 @@ void FFT::performFrequencyOnlyForwardTransform (float* inputOutputData) const no | |||
| performRealOnlyForwardTransform (inputOutputData); | |||
| auto* out = reinterpret_cast<Complex<float>*> (inputOutputData); | |||
| for (auto i = 0; i < size; ++i) | |||
| for (int i = 0; i < size; ++i) | |||
| inputOutputData[i] = std::abs (out[i]); | |||
| zeromem (&inputOutputData[size], static_cast<size_t> (size) * sizeof (float)); | |||
| @@ -49,8 +49,14 @@ | |||
| #include "processors/juce_FIRFilter.cpp" | |||
| #include "processors/juce_IIRFilter.cpp" | |||
| #include "processors/juce_LadderFilter.cpp" | |||
| #include "processors/juce_FirstOrderTPTFilter.cpp" | |||
| #include "processors/juce_Panner.cpp" | |||
| #include "processors/juce_Oversampling.cpp" | |||
| #include "processors/juce_BallisticsFilter.cpp" | |||
| #include "processors/juce_LinkwitzRileyFilter.cpp" | |||
| #include "processors/juce_DelayLine.cpp" | |||
| #include "processors/juce_DryWetMixer.cpp" | |||
| #include "processors/juce_StateVariableTPTFilter.cpp" | |||
| #include "maths/juce_SpecialFunctions.cpp" | |||
| #include "maths/juce_Matrix.cpp" | |||
| #include "maths/juce_LookupTable.cpp" | |||
| @@ -58,6 +64,12 @@ | |||
| #include "frequency/juce_Convolution.cpp" | |||
| #include "frequency/juce_Windowing.cpp" | |||
| #include "filter_design/juce_FilterDesign.cpp" | |||
| #include "widgets/juce_LadderFilter.cpp" | |||
| #include "widgets/juce_Compressor.cpp" | |||
| #include "widgets/juce_NoiseGate.cpp" | |||
| #include "widgets/juce_Limiter.cpp" | |||
| #include "widgets/juce_Phaser.cpp" | |||
| #include "widgets/juce_Chorus.cpp" | |||
| #if JUCE_USE_SIMD | |||
| #if defined(__i386__) || defined(__amd64__) || defined(_M_X64) || defined(_X86_) || defined(_M_IX86) | |||
| @@ -243,17 +243,29 @@ namespace juce | |||
| #include "processors/juce_ProcessorWrapper.h" | |||
| #include "processors/juce_ProcessorChain.h" | |||
| #include "processors/juce_ProcessorDuplicator.h" | |||
| #include "processors/juce_Bias.h" | |||
| #include "processors/juce_Gain.h" | |||
| #include "processors/juce_WaveShaper.h" | |||
| #include "processors/juce_IIRFilter.h" | |||
| #include "processors/juce_FIRFilter.h" | |||
| #include "processors/juce_Oscillator.h" | |||
| #include "processors/juce_LadderFilter.h" | |||
| #include "processors/juce_StateVariableFilter.h" | |||
| #include "processors/juce_FirstOrderTPTFilter.h" | |||
| #include "processors/juce_Panner.h" | |||
| #include "processors/juce_DelayLine.h" | |||
| #include "processors/juce_Oversampling.h" | |||
| #include "processors/juce_Reverb.h" | |||
| #include "processors/juce_BallisticsFilter.h" | |||
| #include "processors/juce_LinkwitzRileyFilter.h" | |||
| #include "processors/juce_DryWetMixer.h" | |||
| #include "processors/juce_StateVariableTPTFilter.h" | |||
| #include "frequency/juce_FFT.h" | |||
| #include "frequency/juce_Convolution.h" | |||
| #include "frequency/juce_Windowing.h" | |||
| #include "filter_design/juce_FilterDesign.h" | |||
| #include "widgets/juce_Reverb.h" | |||
| #include "widgets/juce_Bias.h" | |||
| #include "widgets/juce_Gain.h" | |||
| #include "widgets/juce_WaveShaper.h" | |||
| #include "widgets/juce_Oscillator.h" | |||
| #include "widgets/juce_LadderFilter.h" | |||
| #include "widgets/juce_Compressor.h" | |||
| #include "widgets/juce_NoiseGate.h" | |||
| #include "widgets/juce_Limiter.h" | |||
| #include "widgets/juce_Phaser.h" | |||
| #include "widgets/juce_Chorus.h" | |||
| @@ -0,0 +1,121 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| BallisticsFilter<SampleType>::BallisticsFilter() | |||
| { | |||
| setAttackTime (attackTime); | |||
| setReleaseTime (releaseTime); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::setAttackTime (SampleType attackTimeMs) | |||
| { | |||
| attackTime = attackTimeMs; | |||
| cteAT = calculateLimitedCte (static_cast<SampleType> (attackTime)); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::setReleaseTime (SampleType releaseTimeMs) | |||
| { | |||
| releaseTime = releaseTimeMs; | |||
| cteRL = calculateLimitedCte (static_cast<SampleType> (releaseTime)); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::setLevelCalculationType (LevelCalculationType newLevelType) | |||
| { | |||
| levelType = newLevelType; | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| expFactor = -2.0 * MathConstants<double>::pi * 1000.0 / sampleRate; | |||
| setAttackTime (attackTime); | |||
| setReleaseTime (releaseTime); | |||
| yold.resize (spec.numChannels); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::reset() | |||
| { | |||
| reset (0); | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::reset (SampleType initialValue) | |||
| { | |||
| for (auto& old : yold) | |||
| old = initialValue; | |||
| } | |||
| template <typename SampleType> | |||
| SampleType BallisticsFilter<SampleType>::processSample (int channel, SampleType inputValue) | |||
| { | |||
| jassert (isPositiveAndBelow (channel, yold.size())); | |||
| SampleType cte = (inputValue > yold[(size_t) channel] ? cteAT : cteRL); | |||
| if (levelType == LevelCalculationType::RMS) | |||
| inputValue *= inputValue; | |||
| SampleType result = inputValue + cte * (yold[(size_t) channel] - inputValue); | |||
| yold[(size_t) channel] = result; | |||
| if (levelType == LevelCalculationType::RMS) | |||
| return std::sqrt (result); | |||
| return result; | |||
| } | |||
| template <typename SampleType> | |||
| void BallisticsFilter<SampleType>::snapToZero() noexcept | |||
| { | |||
| for (auto& old : yold) | |||
| util::snapToZero (old); | |||
| } | |||
| template <typename SampleType> | |||
| SampleType BallisticsFilter<SampleType>::calculateLimitedCte (SampleType timeMs) const noexcept | |||
| { | |||
| return timeMs < static_cast<SampleType> (1.0e-3) ? 0 | |||
| : static_cast<SampleType> (std::exp (expFactor / timeMs)); | |||
| } | |||
| //============================================================================== | |||
| template class BallisticsFilter<float>; | |||
| template class BallisticsFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,142 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class BallisticsFilterLevelCalculationType | |||
| { | |||
| peak, | |||
| RMS | |||
| }; | |||
| /** | |||
| A processor to apply standard attack / release ballistics to an input signal. | |||
| This is useful in dynamics processors, envelope followers, modulated audio | |||
| effects and for smoothing animation in data visualisation. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class BallisticsFilter | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using LevelCalculationType = BallisticsFilterLevelCalculationType; | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| BallisticsFilter(); | |||
| //============================================================================== | |||
| /** Sets the attack time in ms. | |||
| Attack times less that 0.001 will be snapped to zero and very long attack | |||
| times will eventually saturate depending on the numerical precision used. | |||
| */ | |||
| void setAttackTime (SampleType attackTimeMs); | |||
| /** Sets the release time in ms. | |||
| Release times less that 0.001 will be snapped to zero and very long release | |||
| times will eventually saturate depending on the numerical precision used. | |||
| */ | |||
| void setReleaseTime (SampleType releaseTimeMs); | |||
| /** Sets how the filter levels are calculated. | |||
| Level calculation in digital envelope followers is usually performed using | |||
| peak detection with a rectifier function (like std::abs) and filtering, | |||
| which returns an envelope dependant on the peak or maximum values of the | |||
| signal amplitude. | |||
| To perform an estimation of the average value of the signal you can use | |||
| an RMS (root mean squared) implementation of the ballistics filter instead. | |||
| This is useful in some compressor and noise-gate designs, or in specific | |||
| types of volume meters. | |||
| */ | |||
| void setLevelCalculationType (LevelCalculationType newCalculationType); | |||
| //============================================================================== | |||
| /** Initialises the filter. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the filter. */ | |||
| void reset(); | |||
| /** Resets the internal state variables of the filter to the given initial value. */ | |||
| void reset (SampleType initialValue); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() <= yold.size()); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample (inputSamples[i], (int) channel); | |||
| } | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| } | |||
| /** Processes one sample at a time on a given channel. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| /** Ensure that the state variables are rounded to zero if the state | |||
| variables are denormals. This is only needed if you are doing | |||
| sample by sample processing. | |||
| */ | |||
| void snapToZero() noexcept; | |||
| private: | |||
| //============================================================================== | |||
| SampleType calculateLimitedCte (SampleType) const noexcept; | |||
| //============================================================================== | |||
| std::vector<SampleType> yold; | |||
| double sampleRate = 44100.0, expFactor = -0.142; | |||
| SampleType attackTime = 1.0, releaseTime = 100.0, cteAT = 0.0, cteRL = 0.0; | |||
| LevelCalculationType levelType = LevelCalculationType::peak; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,121 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType, typename InterpolationType> | |||
| DelayLine<SampleType, InterpolationType>::DelayLine() | |||
| : DelayLine (0) | |||
| { | |||
| } | |||
| template <typename SampleType, typename InterpolationType> | |||
| DelayLine<SampleType, InterpolationType>::DelayLine (int maximumDelayInSamples) | |||
| { | |||
| jassert (maximumDelayInSamples >= 0); | |||
| totalSize = jmax (4, maximumDelayInSamples + 1); | |||
| sampleRate = 44100.0; | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType, typename InterpolationType> | |||
| void DelayLine<SampleType, InterpolationType>::setDelay (SampleType newDelayInSamples) | |||
| { | |||
| auto upperLimit = (SampleType) (totalSize - 1); | |||
| jassert (isPositiveAndNotGreaterThan (newDelayInSamples, upperLimit)); | |||
| delay = jlimit ((SampleType) 0, upperLimit, newDelayInSamples); | |||
| delayInt = static_cast<int> (std::floor (delay)); | |||
| delayFrac = delay - (SampleType) delayInt; | |||
| updateInternalVariables(); | |||
| } | |||
| template <typename SampleType, typename InterpolationType> | |||
| SampleType DelayLine<SampleType, InterpolationType>::getDelay() const | |||
| { | |||
| return delay; | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType, typename InterpolationType> | |||
| void DelayLine<SampleType, InterpolationType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.numChannels > 0); | |||
| bufferData.setSize ((int) spec.numChannels, totalSize, false, false, true); | |||
| writePos.resize (spec.numChannels); | |||
| readPos.resize (spec.numChannels); | |||
| v.resize (spec.numChannels); | |||
| sampleRate = spec.sampleRate; | |||
| reset(); | |||
| } | |||
| template <typename SampleType, typename InterpolationType> | |||
| void DelayLine<SampleType, InterpolationType>::reset() | |||
| { | |||
| for (auto vec : { &writePos, &readPos }) | |||
| std::fill (vec->begin(), vec->end(), 0); | |||
| std::fill (v.begin(), v.end(), static_cast<SampleType> (0)); | |||
| bufferData.clear(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType, typename InterpolationType> | |||
| void DelayLine<SampleType, InterpolationType>::pushSample (int channel, SampleType sample) | |||
| { | |||
| bufferData.setSample (channel, writePos[(size_t) channel], sample); | |||
| writePos[(size_t) channel] = (writePos[(size_t) channel] + totalSize - 1) % totalSize; | |||
| } | |||
| template <typename SampleType, typename InterpolationType> | |||
| SampleType DelayLine<SampleType, InterpolationType>::popSample (int channel, SampleType delayInSamples, bool updateReadPointer) | |||
| { | |||
| if (delayInSamples >= 0) | |||
| setDelay(delayInSamples); | |||
| auto result = interpolateSample (channel); | |||
| if (updateReadPointer) | |||
| readPos[(size_t) channel] = (readPos[(size_t) channel] + totalSize - 1) % totalSize; | |||
| return result; | |||
| } | |||
| //============================================================================== | |||
| template class DelayLine<float, DelayLineInterpolationTypes::None>; | |||
| template class DelayLine<double, DelayLineInterpolationTypes::None>; | |||
| template class DelayLine<float, DelayLineInterpolationTypes::Linear>; | |||
| template class DelayLine<double, DelayLineInterpolationTypes::Linear>; | |||
| template class DelayLine<float, DelayLineInterpolationTypes::Lagrange3rd>; | |||
| template class DelayLine<double, DelayLineInterpolationTypes::Lagrange3rd>; | |||
| template class DelayLine<float, DelayLineInterpolationTypes::Thiran>; | |||
| template class DelayLine<double, DelayLineInterpolationTypes::Thiran>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,309 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| /** | |||
| A collection of structs to pass as the template argument when setting the | |||
| interpolation type for the DelayLine class. | |||
| */ | |||
| namespace DelayLineInterpolationTypes | |||
| { | |||
| /** | |||
| No interpolation between successive samples in the delay line will be | |||
| performed. This is useful when the delay is a constant integer or to | |||
| create lo-fi audio effects. | |||
| */ | |||
| struct None {}; | |||
| /** | |||
| Successive samples in the delay line will be linearly interpolated. This | |||
| type of interpolation has a low compuational cost where the delay can be | |||
| modulated in real time, but it also introduces a low-pass filtering effect | |||
| into your audio signal. | |||
| */ | |||
| struct Linear {}; | |||
| /** | |||
| Successive samples in the delay line will be interpolated using a 3rd order | |||
| Lagrange interpolator. This method incurs more computational overhead than | |||
| linear interpolation but reduces the low-pass filtering effect whilst | |||
| remaining amenable to real time delay modulation. | |||
| */ | |||
| struct Lagrange3rd {}; | |||
| /** | |||
| Successive samples in the delay line will be interpolated using 1st order | |||
| Thiran interpolation. This method is very efficient, and features a flat | |||
| amplitude frequency response in exchange for less accuracy in the phase | |||
| response. This interpolation method is stateful so is unsuitable for | |||
| applications requiring fast delay modulation. | |||
| */ | |||
| struct Thiran {}; | |||
| } | |||
| //============================================================================== | |||
| /** | |||
| A delay line processor featuring several algorithms for the fractional delay | |||
| calculation, block processing, and sample-by-sample processing useful when | |||
| modulating the delay in real time or creating a standard delay effect with | |||
| feedback. | |||
| Note: If you intend to change the delay in real time, you may want to smooth | |||
| changes to the delay systematically using either a ramp or a low-pass filter. | |||
| @see SmoothedValue, FirstOrderTPTFilter | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType, typename InterpolationType = DelayLineInterpolationTypes::Linear> | |||
| class DelayLine | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Default constructor. */ | |||
| DelayLine(); | |||
| /** Constructor. */ | |||
| explicit DelayLine (int maximumDelayInSamples); | |||
| //============================================================================== | |||
| /** Sets the delay in samples. */ | |||
| void setDelay (SampleType newDelayInSamples); | |||
| /** Returns the current delay in samples. */ | |||
| SampleType getDelay() const; | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Pushes a single sample into one channel of the delay line. | |||
| Use this function and popSample instead of process if you need to modulate | |||
| the delay in real time instead of using a fixed delay value, or if you want | |||
| to code a delay effect with a feedback loop. | |||
| @see setDelay, popSample, process | |||
| */ | |||
| void pushSample (int channel, SampleType sample); | |||
| /** Pops a single sample from one channel of the delay line. | |||
| Use this function to modulate the delay in real time or implement standard | |||
| delay effects with feedback. | |||
| @param channel the target channel for the delay line. | |||
| @param delayInSamples sets the wanted fractional delay in samples, or -1 | |||
| to use the value being used before or set with | |||
| setDelay function. | |||
| @param updateReadPointer should be set to true if you use the function | |||
| once for each sample, or false if you need | |||
| multi-tap delay capabilities. | |||
| @see setDelay, pushSample, process | |||
| */ | |||
| SampleType popSample (int channel, SampleType delayInSamples = -1, bool updateReadPointer = true); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. | |||
| Can be used for block processing when the delay is not going to change | |||
| during processing. The delay must first be set by calling setDelay. | |||
| @see setDelay | |||
| */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumChannels() == writePos.size()); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock.getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| { | |||
| pushSample ((int) channel, inputSamples[i]); | |||
| outputSamples[i] = popSample ((int) channel); | |||
| } | |||
| } | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::None>::value, SampleType>::type | |||
| interpolateSample (int channel) const | |||
| { | |||
| auto index = (readPos[(size_t) channel] + delayInt) % totalSize; | |||
| return bufferData.getSample (channel, index); | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Linear>::value, SampleType>::type | |||
| interpolateSample (int channel) const | |||
| { | |||
| auto index1 = readPos[(size_t) channel] + delayInt; | |||
| auto index2 = index1 + 1; | |||
| if (index2 >= totalSize) | |||
| { | |||
| index1 %= totalSize; | |||
| index2 %= totalSize; | |||
| } | |||
| auto value1 = bufferData.getSample (channel, index1); | |||
| auto value2 = bufferData.getSample (channel, index2); | |||
| return value1 + delayFrac * (value2 - value1); | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Lagrange3rd>::value, SampleType>::type | |||
| interpolateSample (int channel) const | |||
| { | |||
| auto index1 = readPos[(size_t) channel] + delayInt; | |||
| auto index2 = index1 + 1; | |||
| auto index3 = index2 + 1; | |||
| auto index4 = index3 + 1; | |||
| if (index4 >= totalSize) | |||
| { | |||
| index1 %= totalSize; | |||
| index2 %= totalSize; | |||
| index3 %= totalSize; | |||
| index4 %= totalSize; | |||
| } | |||
| auto* samples = bufferData.getReadPointer (channel); | |||
| auto value1 = samples[index1]; | |||
| auto value2 = samples[index2]; | |||
| auto value3 = samples[index3]; | |||
| auto value4 = samples[index4]; | |||
| auto d1 = delayFrac - 1.f; | |||
| auto d2 = delayFrac - 2.f; | |||
| auto d3 = delayFrac - 3.f; | |||
| auto c1 = -d1 * d2 * d3 / 6.f; | |||
| auto c2 = d2 * d3 * 0.5f; | |||
| auto c3 = -d1 * d3 * 0.5f; | |||
| auto c4 = d1 * d2 / 6.f; | |||
| return value1 * c1 + delayFrac * (value2 * c2 + value3 * c3 + value4 * c4); | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Thiran>::value, SampleType>::type | |||
| interpolateSample (int channel) | |||
| { | |||
| auto index1 = readPos[(size_t) channel] + delayInt; | |||
| auto index2 = index1 + 1; | |||
| if (index2 >= totalSize) | |||
| { | |||
| index1 %= totalSize; | |||
| index2 %= totalSize; | |||
| } | |||
| auto value1 = bufferData.getSample (channel, index1); | |||
| auto value2 = bufferData.getSample (channel, index2); | |||
| auto output = delayFrac == 0 ? value1 : value2 + alpha * (value1 - v[(size_t) channel]); | |||
| v[(size_t) channel] = output; | |||
| return output; | |||
| } | |||
| //============================================================================== | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::None>::value, void>::type | |||
| updateInternalVariables() | |||
| { | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Linear>::value, void>::type | |||
| updateInternalVariables() | |||
| { | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Lagrange3rd>::value, void>::type | |||
| updateInternalVariables() | |||
| { | |||
| if (delayInt >= 1) | |||
| { | |||
| delayFrac++; | |||
| delayInt--; | |||
| } | |||
| } | |||
| template <typename T = InterpolationType> | |||
| typename std::enable_if <std::is_same <T, DelayLineInterpolationTypes::Thiran>::value, void>::type | |||
| updateInternalVariables() | |||
| { | |||
| if (delayFrac < (SampleType) 0.618 && delayInt >= 1) | |||
| { | |||
| delayFrac++; | |||
| delayInt--; | |||
| } | |||
| alpha = (1 - delayFrac) / (1 + delayFrac); | |||
| } | |||
| //============================================================================== | |||
| double sampleRate; | |||
| //============================================================================== | |||
| AudioBuffer<SampleType> bufferData; | |||
| std::vector<SampleType> v; | |||
| std::vector<int> writePos, readPos; | |||
| SampleType delay = 0.0, delayFrac = 0.0; | |||
| int delayInt = 0, totalSize = 4; | |||
| SampleType alpha = 0.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,172 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| DryWetMixer<SampleType>::DryWetMixer() | |||
| : DryWetMixer (0) | |||
| { | |||
| } | |||
| template <typename SampleType> | |||
| DryWetMixer<SampleType>::DryWetMixer (int maximumWetLatencyInSamples) | |||
| : dryDelayLine (maximumWetLatencyInSamples) | |||
| { | |||
| dryDelayLine.setDelay (0); | |||
| update(); | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::setMixingRule (MixingRule newRule) | |||
| { | |||
| currentMixingRule = newRule; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::setWetMixProportion (SampleType newWetMixProportion) | |||
| { | |||
| jassert (isPositiveAndNotGreaterThan (newWetMixProportion, 1.0)); | |||
| mix = jlimit (static_cast<SampleType> (0.0), static_cast<SampleType> (1.0), newWetMixProportion); | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::setWetLatency (SampleType wetLatencySamples) | |||
| { | |||
| dryDelayLine.setDelay (wetLatencySamples); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| dryDelayLine.prepare (spec); | |||
| bufferDry.setSize ((int) spec.numChannels, (int) spec.maximumBlockSize, false, false, true); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::reset() | |||
| { | |||
| dryVolume.reset (sampleRate, 0.05); | |||
| wetVolume.reset (sampleRate, 0.05); | |||
| dryDelayLine.reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::pushDrySamples (const AudioBlock<const SampleType> drySamples) | |||
| { | |||
| jassert (drySamples.getNumChannels() <= (size_t) bufferDry.getNumChannels()); | |||
| auto dryBlock = AudioBlock<SampleType> (bufferDry); | |||
| dryBlock = dryBlock.getSubsetChannelBlock (0, drySamples.getNumChannels()).getSubBlock (0, drySamples.getNumSamples()); | |||
| auto context = ProcessContextNonReplacing<SampleType>(drySamples, dryBlock); | |||
| dryDelayLine.process (context); | |||
| } | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::mixWetSamples (AudioBlock<SampleType> inOutBlock) | |||
| { | |||
| auto dryBlock = AudioBlock<SampleType> (bufferDry); | |||
| dryBlock = dryBlock.getSubsetChannelBlock (0, inOutBlock.getNumChannels()).getSubBlock (0, inOutBlock.getNumSamples()); | |||
| dryBlock.multiplyBy (dryVolume); | |||
| inOutBlock.multiplyBy (wetVolume); | |||
| inOutBlock.add (dryBlock); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void DryWetMixer<SampleType>::update() | |||
| { | |||
| SampleType dryValue, wetValue; | |||
| switch (currentMixingRule) | |||
| { | |||
| case MixingRule::balanced: | |||
| dryValue = static_cast<SampleType> (2.0) * jmin (static_cast<SampleType> (0.5), static_cast<SampleType> (1.0) - mix); | |||
| wetValue = static_cast<SampleType> (2.0) * jmin (static_cast<SampleType> (0.5), mix); | |||
| break; | |||
| case MixingRule::linear: | |||
| dryValue = static_cast<SampleType> (1.0) - mix; | |||
| wetValue = mix; | |||
| break; | |||
| case MixingRule::sin3dB: | |||
| dryValue = static_cast<SampleType> (std::sin (0.5 * MathConstants<double>::pi * (1.0 - mix))); | |||
| wetValue = static_cast<SampleType> (std::sin (0.5 * MathConstants<double>::pi * mix)); | |||
| break; | |||
| case MixingRule::sin4p5dB: | |||
| dryValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * (1.0 - mix)), 1.5)); | |||
| wetValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * mix), 1.5)); | |||
| break; | |||
| case MixingRule::sin6dB: | |||
| dryValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * (1.0 - mix)), 2.0)); | |||
| wetValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * mix), 2.0)); | |||
| break; | |||
| case MixingRule::squareRoot3dB: | |||
| dryValue = std::sqrt (static_cast<SampleType> (1.0) - mix); | |||
| wetValue = std::sqrt (mix); | |||
| break; | |||
| case MixingRule::squareRoot4p5dB: | |||
| dryValue = static_cast<SampleType> (std::pow (std::sqrt (1.0 - mix), 1.5)); | |||
| wetValue = static_cast<SampleType> (std::pow (std::sqrt (mix), 1.5)); | |||
| break; | |||
| default: | |||
| dryValue = jmin (static_cast<SampleType> (0.5), static_cast<SampleType> (1.0) - mix); | |||
| wetValue = jmin (static_cast<SampleType> (0.5), mix); | |||
| break; | |||
| } | |||
| dryVolume.setTargetValue (dryValue); | |||
| wetVolume.setTargetValue (wetValue); | |||
| } | |||
| //============================================================================== | |||
| template class DryWetMixer<float>; | |||
| template class DryWetMixer<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,110 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class DryWetMixingRule | |||
| { | |||
| linear, | |||
| balanced, | |||
| sin3dB, | |||
| sin4p5dB, | |||
| sin6dB, | |||
| squareRoot3dB, | |||
| squareRoot4p5dB | |||
| }; | |||
| /** | |||
| A processor to handle dry/wet mixing of two audio signals, where the wet signal | |||
| may have additional latency. | |||
| Once a DryWetMixer object is configured, push the dry samples using pushDrySamples | |||
| and mix into the fully wet samples using mixWetSamples. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class DryWetMixer | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using MixingRule = DryWetMixingRule; | |||
| //============================================================================== | |||
| /** Default constructor. */ | |||
| DryWetMixer(); | |||
| /** Constructor. */ | |||
| explicit DryWetMixer (int maximumWetLatencyInSamples); | |||
| //============================================================================== | |||
| /** Sets the mix rule. */ | |||
| void setMixingRule (MixingRule newRule); | |||
| /** Sets the current dry/wet mix proportion, with 0.0 being full dry and 1.0 | |||
| being fully wet. | |||
| */ | |||
| void setWetMixProportion (SampleType newWetMixProportion); | |||
| /** Sets the relative latency of the wet signal path compared to the dry signal | |||
| path, and thus the amount of latency compensation that will be added to the | |||
| dry samples in this processor. | |||
| */ | |||
| void setWetLatency (SampleType wetLatencyInSamples); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Copies the dry path samples into an internal delay line. */ | |||
| void pushDrySamples (const AudioBlock<const SampleType> drySamples); | |||
| /** Mixes the supplied wet samples with the latency-compensated dry samples from | |||
| pushDrySamples. | |||
| @param wetSamples Input: The AudioBlock references fully wet samples. | |||
| Output: The AudioBlock references the wet samples mixed | |||
| with the latency compensated dry samples. | |||
| @see pushDrySamples | |||
| */ | |||
| void mixWetSamples (AudioBlock<SampleType> wetSamples); | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SmoothedValue<SampleType, ValueSmoothingTypes::Linear> dryVolume, wetVolume; | |||
| DelayLine<SampleType, DelayLineInterpolationTypes::Thiran> dryDelayLine; | |||
| AudioBuffer<SampleType> bufferDry; | |||
| SampleType mix = 1.0; | |||
| MixingRule currentMixingRule = MixingRule::linear; | |||
| double sampleRate = 44100.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,114 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| FirstOrderTPTFilter<SampleType>::FirstOrderTPTFilter() | |||
| { | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::setType (Type newValue) | |||
| { | |||
| filterType = newValue; | |||
| } | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::setCutoffFrequency (SampleType newValue) | |||
| { | |||
| jassert (isPositiveAndBelow (newValue, static_cast<SampleType> (sampleRate * 0.5))); | |||
| cutoffFrequency = newValue; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| s1.resize (spec.numChannels); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::reset() | |||
| { | |||
| reset (static_cast<SampleType> (0)); | |||
| } | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::reset (SampleType newValue) | |||
| { | |||
| std::fill (s1.begin(), s1.end(), newValue); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType FirstOrderTPTFilter<SampleType>::processSample (int channel, SampleType inputValue) | |||
| { | |||
| auto& s = s1[(size_t) channel]; | |||
| auto v = G * (inputValue - s); | |||
| auto y = v + s; | |||
| s = y + v; | |||
| switch (filterType) | |||
| { | |||
| case Type::lowpass: return y; | |||
| case Type::highpass: return inputValue - y; | |||
| case Type::allpass: return 2 * y - inputValue; | |||
| default: break; | |||
| } | |||
| jassertfalse; | |||
| return y; | |||
| } | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::snapToZero() noexcept | |||
| { | |||
| for (auto& s : s1) | |||
| util::snapToZero (s); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void FirstOrderTPTFilter<SampleType>::update() | |||
| { | |||
| auto g = SampleType (std::tan (juce::MathConstants<double>::pi * cutoffFrequency / sampleRate)); | |||
| G = g / (1 + g); | |||
| } | |||
| //============================================================================== | |||
| template class FirstOrderTPTFilter<float>; | |||
| template class FirstOrderTPTFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,144 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class FirstOrderTPTFilterType | |||
| { | |||
| lowpass, | |||
| highpass, | |||
| allpass | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| A first order filter class using the TPT (Topology-Preserving Transform) structure. | |||
| This filter can be modulated at high rates without producing audio artefacts. See | |||
| Vadim Zavalishin's documentation about TPT structures for more information. | |||
| Note: Using this class prevents some loud audio artefacts commonly encountered when | |||
| changing the cutoff frequency using of other filter simulation structures and IIR | |||
| filter classes. However, this class may still require additional smoothing for | |||
| cutoff frequency changes. | |||
| see StateVariableFilter, IIRFilter, SmoothedValue | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class FirstOrderTPTFilter | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using Type = FirstOrderTPTFilterType; | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| FirstOrderTPTFilter(); | |||
| //============================================================================== | |||
| /** Sets the filter type. */ | |||
| void setType (Type newType); | |||
| /** Sets the cutoff frequency of the filter. | |||
| @param newFrequencyHz cutoff frequency in Hz. | |||
| */ | |||
| void setCutoffFrequency (SampleType newFrequencyHz); | |||
| //============================================================================== | |||
| /** Returns the type of the filter. */ | |||
| Type getType() const noexcept { return filterType; } | |||
| /** Returns the cutoff frequency of the filter. */ | |||
| SampleType getCutoffFrequency() const noexcept { return cutoffFrequency; } | |||
| //============================================================================== | |||
| /** Initialises the filter. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the filter. */ | |||
| void reset(); | |||
| /** Resets the internal state variables of the filter to a given value. */ | |||
| void reset (SampleType newValue); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() <= s1.size()); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample ((int) channel, inputSamples[i]); | |||
| } | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| /** Processes one sample at a time on a given channel. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| /** Ensure that the state variables are rounded to zero if the state | |||
| variables are denormals. This is only needed if you are doing | |||
| sample by sample processing. | |||
| */ | |||
| void snapToZero() noexcept; | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SampleType G = 0; | |||
| std::vector<SampleType> s1 { 2 }; | |||
| double sampleRate = 44100.0; | |||
| //============================================================================== | |||
| Type filterType = Type::lowpass; | |||
| SampleType cutoffFrequency = 1000.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -86,7 +86,7 @@ namespace IIR | |||
| Note that this clears the processing state, but the type of filter and | |||
| its coefficients aren't changed. | |||
| */ | |||
| void reset() { reset (SampleType {0}); } | |||
| void reset() { reset (SampleType {0}); } | |||
| /** Resets the filter's processing pipeline to a specific value. | |||
| @see reset | |||
| @@ -105,6 +105,10 @@ namespace IIR | |||
| processInternal<ProcessContext, true> (context); | |||
| else | |||
| processInternal<ProcessContext, false> (context); | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| } | |||
| /** Processes a single sample, without any locking. | |||
| @@ -1,162 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename Type> | |||
| LadderFilter<Type>::LadderFilter() : state (2) | |||
| { | |||
| setSampleRate (Type (1000)); // intentionally setting unrealistic default | |||
| // sample rate to catch missing initialisation bugs | |||
| setResonance (Type (0)); | |||
| setDrive (Type (1.2)); | |||
| setMode (Mode::LPF12); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::setMode (Mode newValue) noexcept | |||
| { | |||
| switch (newValue) | |||
| { | |||
| case Mode::LPF12: A = {{ Type (0), Type (0), Type (1), Type (0), Type (0) }}; comp = Type (0.5); break; | |||
| case Mode::HPF12: A = {{ Type (1), Type (-2), Type (1), Type (0), Type (0) }}; comp = Type (0); break; | |||
| case Mode::LPF24: A = {{ Type (0), Type (0), Type (0), Type (0), Type (1) }}; comp = Type (0.5); break; | |||
| case Mode::HPF24: A = {{ Type (1), Type (-4), Type (6), Type (-4), Type (1) }}; comp = Type (0); break; | |||
| default: jassertfalse; break; | |||
| } | |||
| static constexpr auto outputGain = Type (1.2); | |||
| for (auto& a : A) | |||
| a *= outputGain; | |||
| mode = newValue; | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::prepare (const juce::dsp::ProcessSpec& spec) | |||
| { | |||
| setSampleRate (Type (spec.sampleRate)); | |||
| setNumChannels (spec.numChannels); | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::reset() noexcept | |||
| { | |||
| for (auto& s : state) | |||
| s.fill (Type (0)); | |||
| cutoffTransformSmoother.setCurrentAndTargetValue (cutoffTransformSmoother.getTargetValue()); | |||
| scaledResonanceSmoother.setCurrentAndTargetValue (scaledResonanceSmoother.getTargetValue()); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::setCutoffFrequencyHz (Type newValue) noexcept | |||
| { | |||
| jassert (newValue > Type (0)); | |||
| cutoffFreqHz = newValue; | |||
| updateCutoffFreq(); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::setResonance (Type newValue) noexcept | |||
| { | |||
| jassert (newValue >= Type (0) && newValue <= Type (1)); | |||
| resonance = newValue; | |||
| updateResonance(); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::setDrive (Type newValue) noexcept | |||
| { | |||
| jassert (newValue >= Type (1)); | |||
| drive = newValue; | |||
| gain = std::pow (drive, Type (-2.642)) * Type (0.6103) + Type (0.3903); | |||
| drive2 = drive * Type (0.04) + Type (0.96); | |||
| gain2 = std::pow (drive2, Type (-2.642)) * Type (0.6103) + Type (0.3903); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| Type LadderFilter<Type>::processSample (Type inputValue, size_t channelToUse) noexcept | |||
| { | |||
| auto& s = state[channelToUse]; | |||
| const auto a1 = cutoffTransformValue; | |||
| const auto g = a1 * Type (-1) + Type (1); | |||
| const auto b0 = g * Type (0.76923076923); | |||
| const auto b1 = g * Type (0.23076923076); | |||
| const auto dx = gain * saturationLUT (drive * inputValue); | |||
| const auto a = dx + scaledResonanceValue * Type (-4) * (gain2 * saturationLUT (drive2 * s[4]) - dx * comp); | |||
| const auto b = b1 * s[0] + a1 * s[1] + b0 * a; | |||
| const auto c = b1 * s[1] + a1 * s[2] + b0 * b; | |||
| const auto d = b1 * s[2] + a1 * s[3] + b0 * c; | |||
| const auto e = b1 * s[3] + a1 * s[4] + b0 * d; | |||
| s[0] = a; | |||
| s[1] = b; | |||
| s[2] = c; | |||
| s[3] = d; | |||
| s[4] = e; | |||
| return a * A[0] + b * A[1] + c * A[2] + d * A[3] + e * A[4]; | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::updateSmoothers() noexcept | |||
| { | |||
| cutoffTransformValue = cutoffTransformSmoother.getNextValue(); | |||
| scaledResonanceValue = scaledResonanceSmoother.getNextValue(); | |||
| } | |||
| //============================================================================== | |||
| template <typename Type> | |||
| void LadderFilter<Type>::setSampleRate (Type newValue) noexcept | |||
| { | |||
| jassert (newValue > Type (0)); | |||
| cutoffFreqScaler = Type (-2.0 * juce::MathConstants<double>::pi) / newValue; | |||
| static constexpr Type smootherRampTimeSec = Type (0.05); | |||
| cutoffTransformSmoother.reset (newValue, smootherRampTimeSec); | |||
| scaledResonanceSmoother.reset (newValue, smootherRampTimeSec); | |||
| updateCutoffFreq(); | |||
| } | |||
| //============================================================================== | |||
| template class LadderFilter<float>; | |||
| template class LadderFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,142 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| LinkwitzRileyFilter<SampleType>::LinkwitzRileyFilter() | |||
| { | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::setType (Type newType) | |||
| { | |||
| filterType = newType; | |||
| } | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::setCutoffFrequency (SampleType newCutoffFrequencyHz) | |||
| { | |||
| jassert (isPositiveAndBelow (newCutoffFrequencyHz, static_cast<SampleType> (sampleRate * 0.5))); | |||
| cutoffFrequency = newCutoffFrequencyHz; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| update(); | |||
| s1.resize (spec.numChannels); | |||
| s2.resize (spec.numChannels); | |||
| s3.resize (spec.numChannels); | |||
| s4.resize (spec.numChannels); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::reset() | |||
| { | |||
| for (auto s : { &s1, &s2, &s3, &s4 }) | |||
| std::fill (s->begin(), s->end(), static_cast<SampleType> (0)); | |||
| } | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::snapToZero() noexcept | |||
| { | |||
| for (auto s : { &s1, &s2, &s3, &s4 }) | |||
| for (auto& element : *s) | |||
| util::snapToZero (element); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType LinkwitzRileyFilter<SampleType>::processSample (int channel, SampleType inputValue) | |||
| { | |||
| auto yH = (inputValue - (R2 + g) * s1[(size_t) channel] - s2[(size_t) channel]) * h; | |||
| auto yB = g * yH + s1[(size_t) channel]; | |||
| s1[(size_t) channel] = g * yH + yB; | |||
| auto yL = g * yB + s2[(size_t) channel]; | |||
| s2[(size_t) channel] = g * yB + yL; | |||
| if (filterType == Type::allpass) | |||
| return yL - R2 * yB + yH; | |||
| auto yH2 = ((filterType == Type::lowpass ? yL : yH) - (R2 + g) * s3[(size_t) channel] - s4[(size_t) channel]) * h; | |||
| auto yB2 = g * yH2 + s3[(size_t) channel]; | |||
| s3[(size_t) channel] = g * yH2 + yB2; | |||
| auto yL2 = g * yB2 + s4[(size_t) channel]; | |||
| s4[(size_t) channel] = g * yB2 + yL2; | |||
| return filterType == Type::lowpass ? yL2 : yH2; | |||
| } | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::processSample (int channel, SampleType inputValue, SampleType &outputLow, SampleType &outputHigh) | |||
| { | |||
| auto yH = (inputValue - (R2 + g) * s1[(size_t) channel] - s2[(size_t) channel]) * h; | |||
| auto yB = g * yH + s1[(size_t) channel]; | |||
| s1[(size_t) channel] = g * yH + yB; | |||
| auto yL = g * yB + s2[(size_t) channel]; | |||
| s2[(size_t) channel] = g * yB + yL; | |||
| auto yH2 = (yL - (R2 + g) * s3[(size_t) channel] - s4[(size_t) channel]) * h; | |||
| auto yB2 = g * yH2 + s3[(size_t) channel]; | |||
| s3[(size_t) channel] = g * yH2 + yB2; | |||
| auto yL2 = g * yB2 + s4[(size_t) channel]; | |||
| s4[(size_t) channel] = g * yB2 + yL2; | |||
| outputLow = yL2; | |||
| outputHigh = yL - R2 * yB + yH - yL2; | |||
| } | |||
| template <typename SampleType> | |||
| void LinkwitzRileyFilter<SampleType>::update() | |||
| { | |||
| g = (SampleType) std::tan (MathConstants<double>::pi * cutoffFrequency / sampleRate); | |||
| R2 = (SampleType) std::sqrt (2.0); | |||
| h = (SampleType) (1.0 / (1.0 + R2 * g + g * g)); | |||
| } | |||
| //============================================================================== | |||
| template class LinkwitzRileyFilter<float>; | |||
| template class LinkwitzRileyFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,136 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class LinkwitzRileyFilterType | |||
| { | |||
| lowpass, | |||
| highpass, | |||
| allpass | |||
| }; | |||
| /** | |||
| A filter class designed to perform multi-band separation using the TPT | |||
| (Topology-Preserving Transform) structure. | |||
| Linkwitz-Riley filters are widely used in audio crossovers that have two outputs, | |||
| a low-pass and a high-pass, such that their sum is equivalent to an all-pass filter | |||
| with a flat magnitude frequency response. The Linkwitz-Riley filters available in | |||
| this class are designed to have a -24 dB/octave slope (LR 4th order). | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class LinkwitzRileyFilter | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using Type = LinkwitzRileyFilterType; | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| LinkwitzRileyFilter(); | |||
| //============================================================================== | |||
| /** Sets the filter type. */ | |||
| void setType (Type newType); | |||
| /** Sets the cutoff frequency of the filter in Hz. */ | |||
| void setCutoffFrequency (SampleType newCutoffFrequencyHz); | |||
| //============================================================================== | |||
| /** Returns the type of the filter. */ | |||
| Type getType() const noexcept { return filterType; } | |||
| /** Returns the cutoff frequency of the filter. */ | |||
| SampleType getCutoffFrequency() const noexcept { return cutoffFrequency; } | |||
| //============================================================================== | |||
| /** Initialises the filter. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the filter. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() <= s1.size()); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock.getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample ((int) channel, inputSamples[i]); | |||
| } | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| } | |||
| /** Performs the filter operation on a single sample at a time. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| /** Performs the filter operation on a single sample at a time, and returns both | |||
| the low-pass and the high-pass outputs of the TPT structure. | |||
| */ | |||
| void processSample (int channel, SampleType inputValue, SampleType &outputLow, SampleType &outputHigh); | |||
| /** Ensure that the state variables are rounded to zero if the state | |||
| variables are denormals. This is only needed if you are doing | |||
| sample by sample processing. | |||
| */ | |||
| void snapToZero() noexcept; | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SampleType g, R2, h; | |||
| std::vector<SampleType> s1, s2, s3, s4; | |||
| double sampleRate = 44100.0; | |||
| SampleType cutoffFrequency = 2000.0; | |||
| Type filterType = Type::lowpass; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -356,8 +356,9 @@ struct Oversampling2TimesPolyphaseIIR : public Oversampling<SampleType>::Oversa | |||
| } | |||
| } | |||
| // Snap To Zero | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero (true); | |||
| #endif | |||
| } | |||
| void processSamplesDown (AudioBlock<SampleType>& outputBlock) override | |||
| @@ -414,8 +415,9 @@ struct Oversampling2TimesPolyphaseIIR : public Oversampling<SampleType>::Oversa | |||
| delayDown.setUnchecked (static_cast<int> (channel), delay); | |||
| } | |||
| // Snap To Zero | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero (false); | |||
| #endif | |||
| } | |||
| void snapToZero (bool snapUpProcessing) | |||
| @@ -498,10 +500,10 @@ private: | |||
| coeffs.coefficients.clear(); | |||
| auto inversion = one / denominator[0]; | |||
| for (auto i = 0; i <= numerator.getOrder(); ++i) | |||
| for (int i = 0; i <= numerator.getOrder(); ++i) | |||
| coeffs.coefficients.add (numerator[i] * inversion); | |||
| for (auto i = 1; i <= denominator.getOrder(); ++i) | |||
| for (int i = 1; i <= denominator.getOrder(); ++i) | |||
| coeffs.coefficients.add (denominator[i] * inversion); | |||
| return coeffs; | |||
| @@ -531,8 +533,9 @@ Oversampling<SampleType>::Oversampling (size_t newNumChannels) | |||
| template <typename SampleType> | |||
| Oversampling<SampleType>::Oversampling (size_t newNumChannels, size_t newFactor, | |||
| FilterType newType, bool isMaximumQuality) | |||
| : numChannels (newNumChannels) | |||
| FilterType newType, bool isMaximumQuality, | |||
| bool useIntegerLatency) | |||
| : numChannels (newNumChannels), shouldUseIntegerLatency (useIntegerLatency) | |||
| { | |||
| jassert (isPositiveAndBelow (newFactor, 5) && numChannels > 0); | |||
| @@ -620,8 +623,21 @@ void Oversampling<SampleType>::clearOversamplingStages() | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Oversampling<SampleType>::setUsingIntegerLatency (bool useIntegerLatency) noexcept | |||
| { | |||
| shouldUseIntegerLatency = useIntegerLatency; | |||
| } | |||
| template <typename SampleType> | |||
| SampleType Oversampling<SampleType>::getLatencyInSamples() const noexcept | |||
| { | |||
| auto latency = getUncompensatedLatency(); | |||
| return shouldUseIntegerLatency ? latency + fractionalDelay : latency; | |||
| } | |||
| template <typename SampleType> | |||
| SampleType Oversampling<SampleType>::getUncompensatedLatency() const noexcept | |||
| { | |||
| auto latency = static_cast<SampleType> (0); | |||
| size_t order = 1; | |||
| @@ -654,6 +670,10 @@ void Oversampling<SampleType>::initProcessing (size_t maximumNumberOfSamplesBefo | |||
| currentNumSamples *= stage->factor; | |||
| } | |||
| ProcessSpec spec = { 0.0, (uint32) maximumNumberOfSamplesBeforeOversampling, (uint32) numChannels }; | |||
| delay.prepare (spec); | |||
| updateDelayLine(); | |||
| isReady = true; | |||
| reset(); | |||
| } | |||
| @@ -666,6 +686,8 @@ void Oversampling<SampleType>::reset() noexcept | |||
| if (isReady) | |||
| for (auto* stage : stages) | |||
| stage->reset(); | |||
| delay.reset(); | |||
| } | |||
| template <typename SampleType> | |||
| @@ -712,6 +734,26 @@ void Oversampling<SampleType>::processSamplesDown (AudioBlock<SampleType>& outpu | |||
| } | |||
| stages.getFirst()->processSamplesDown (outputBlock); | |||
| if (shouldUseIntegerLatency && fractionalDelay > static_cast<SampleType> (0.0)) | |||
| { | |||
| auto context = ProcessContextReplacing<SampleType> (outputBlock); | |||
| delay.process (context); | |||
| } | |||
| } | |||
| template <typename SampleType> | |||
| void Oversampling<SampleType>::updateDelayLine() | |||
| { | |||
| auto latency = getUncompensatedLatency(); | |||
| fractionalDelay = static_cast<SampleType> (1.0) - (latency - std::floor (latency)); | |||
| if (fractionalDelay == static_cast<SampleType> (1.0)) | |||
| fractionalDelay = static_cast<SampleType> (0.0); | |||
| else if (fractionalDelay < static_cast<SampleType> (0.618)) | |||
| fractionalDelay += static_cast<SampleType> (1.0); | |||
| delay.setDelay (fractionalDelay); | |||
| } | |||
| template class Oversampling<float>; | |||
| @@ -21,24 +21,23 @@ namespace juce | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| /** | |||
| A processing class performing multi-channel oversampling. | |||
| A processor that performs multi-channel oversampling. | |||
| It can be configured to do 2 times, 4 times, 8 times or 16 times oversampling | |||
| using a multi-stage approach, either polyphase allpass IIR filters or FIR | |||
| filters for the filtering, and reports successfully the latency added by the | |||
| filter stages. | |||
| This class can be configured to do a factor of 2, 4, 8 or 16 times | |||
| oversampling, using multiple stages, with polyphase allpass IIR filters or FIR | |||
| filters, and latency compensation. | |||
| The principle of oversampling is to increase the sample rate of a given | |||
| non-linear process, to prevent it from creating aliasing. Oversampling works | |||
| by upsampling N times the input signal, processing the upsampled signal | |||
| with the increased internal sample rate, and downsampling the result to get | |||
| back the original processing sample rate. | |||
| Choose between FIR or IIR filtering depending on your needs in term of | |||
| latency and phase distortion. With FIR filters, the phase is linear but the | |||
| latency is maximised. With IIR filtering, the phase is compromised around the | |||
| non-linear process to prevent it from creating aliasing. Oversampling works | |||
| by upsampling the input signal N times, processing the upsampled signal | |||
| with the increased internal sample rate, then downsampling the result to get | |||
| back to the original sample rate. | |||
| Choose between FIR or IIR filtering depending on your needs in terms of | |||
| latency and phase distortion. With FIR filters the phase is linear but the | |||
| latency is maximised. With IIR filtering the phase is compromised around the | |||
| Nyquist frequency but the latency is minimised. | |||
| @see FilterDesign. | |||
| @@ -57,52 +56,62 @@ public: | |||
| numFilterTypes | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| Constructor of the oversampling class. All the processing parameters must be | |||
| provided at the creation of the oversampling object. | |||
| @param numChannels the number of channels to process with this object | |||
| @param factor the processing will perform 2 ^ factor times oversampling | |||
| @param type the type of filter design employed for filtering during | |||
| oversampling | |||
| @param isMaxQuality if the oversampling is done using the maximum quality, | |||
| the filters will be more efficient, but the CPU load will | |||
| increase as well | |||
| */ | |||
| Oversampling (size_t numChannels, | |||
| size_t factor, | |||
| FilterType type, | |||
| bool isMaxQuality = true); | |||
| //=============================================================================== | |||
| /** The default constructor. | |||
| /** The default constructor of the oversampling class, which can be used to create an | |||
| empty object and then add the appropriate stages. | |||
| Note: This creates a "dummy" oversampling stage, which needs to be removed first | |||
| Note: This creates a "dummy" oversampling stage, which needs to be removed | |||
| before adding proper oversampling stages. | |||
| @param numChannels the number of channels to process with this object | |||
| @see clearOversamplingStages, addOversamplingStage | |||
| */ | |||
| explicit Oversampling (size_t numChannels = 1); | |||
| /** Constructor. | |||
| @param numChannels the number of channels to process with this object | |||
| @param factor the processing will perform 2 ^ factor times oversampling | |||
| @param type the type of filter design employed for filtering during | |||
| oversampling | |||
| @param isMaxQuality if the oversampling is done using the maximum quality, where | |||
| the filters will be more efficient but the CPU load will | |||
| increase as well | |||
| @param useIntegerLatency if true this processor will add some fractional delay at the | |||
| end of the signal path to ensure that the overall latency of | |||
| the oversampling is an integer | |||
| */ | |||
| Oversampling (size_t numChannels, | |||
| size_t factor, | |||
| FilterType type, | |||
| bool isMaxQuality = true, | |||
| bool useIntegerLatency = false); | |||
| /** Destructor. */ | |||
| ~Oversampling(); | |||
| //============================================================================== | |||
| /** Returns the latency in samples of the whole processing. Use this information | |||
| in your main processor to compensate the additional latency involved with | |||
| the oversampling, for example with a dry / wet functionality, and to report | |||
| the latency to the DAW. | |||
| //=============================================================================== | |||
| /* Sets if this processor should add some fractional delay at the end of the signal | |||
| path to ensure that the overall latency of the oversampling is an integer. | |||
| */ | |||
| void setUsingIntegerLatency (bool shouldUseIntegerLatency) noexcept; | |||
| /** Returns the latency in samples of the overall processing. You can use this | |||
| information in your main processor to compensate the additional latency | |||
| involved with the oversampling, for example with a dry / wet mixer, and to | |||
| report the latency to the DAW. | |||
| Note: The latency might not be integer, so you might need to round its value | |||
| or to compensate it properly in your processing code. | |||
| Note: If you have not opted to use an integer latency then the latency may not be | |||
| integer, so you might need to round its value or to compensate it properly in | |||
| your processing code since plug-ins can only report integer latency values in | |||
| samples to the DAW. | |||
| */ | |||
| SampleType getLatencyInSamples() const noexcept; | |||
| /** Returns the current oversampling factor. */ | |||
| size_t getOversamplingFactor() const noexcept; | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| /** Must be called before any processing, to set the buffer sizes of the internal | |||
| buffers of the oversampling processing. | |||
| */ | |||
| @@ -127,7 +136,7 @@ public: | |||
| */ | |||
| void processSamplesDown (AudioBlock<SampleType>& outputBlock) noexcept; | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| /** Adds a new oversampling stage to the Oversampling class, multiplying the | |||
| current oversampling factor by two. This is used with the default constructor | |||
| to create custom oversampling chains, requiring a call to the | |||
| @@ -171,7 +180,7 @@ public: | |||
| */ | |||
| void clearOversamplingStages(); | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| size_t factorOversampling = 1; | |||
| size_t numChannels = 1; | |||
| @@ -180,11 +189,17 @@ public: | |||
| #endif | |||
| private: | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| void updateDelayLine(); | |||
| SampleType getUncompensatedLatency() const noexcept; | |||
| //=============================================================================== | |||
| OwnedArray<OversamplingStage> stages; | |||
| bool isReady = false; | |||
| bool isReady = false, shouldUseIntegerLatency = false; | |||
| DelayLine<SampleType, DelayLineInterpolationTypes::Thiran> delay { 8 }; | |||
| SampleType fractionalDelay = 0; | |||
| //============================================================================== | |||
| //=============================================================================== | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Oversampling) | |||
| }; | |||
| @@ -0,0 +1,136 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| Panner<SampleType>::Panner() | |||
| { | |||
| update(); | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Panner<SampleType>::setRule (Rule newRule) | |||
| { | |||
| currentRule = newRule; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Panner<SampleType>::setPan (SampleType newPan) | |||
| { | |||
| jassert (newPan >= -1.0 && newPan <= 1.0); | |||
| pan = jlimit (static_cast<SampleType> (-1.0), static_cast<SampleType> (1.0), newPan); | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Panner<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void Panner<SampleType>::reset() | |||
| { | |||
| leftVolume .reset (sampleRate, 0.05); | |||
| rightVolume.reset (sampleRate, 0.05); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Panner<SampleType>::update() | |||
| { | |||
| SampleType leftValue, rightValue, boostValue; | |||
| auto normalisedPan = static_cast<SampleType> (0.5) * (pan + static_cast<SampleType> (1.0)); | |||
| switch (currentRule) | |||
| { | |||
| case Rule::balanced: | |||
| leftValue = jmin (static_cast<SampleType> (0.5), static_cast<SampleType> (1.0) - normalisedPan); | |||
| rightValue = jmin (static_cast<SampleType> (0.5), normalisedPan); | |||
| boostValue = static_cast<SampleType> (2.0); | |||
| break; | |||
| case Rule::linear: | |||
| leftValue = static_cast<SampleType> (1.0) - normalisedPan; | |||
| rightValue = normalisedPan; | |||
| boostValue = static_cast<SampleType> (2.0); | |||
| break; | |||
| case Rule::sin3dB: | |||
| leftValue = static_cast<SampleType> (std::sin (0.5 * MathConstants<double>::pi * (1.0 - normalisedPan))); | |||
| rightValue = static_cast<SampleType> (std::sin (0.5 * MathConstants<double>::pi * normalisedPan)); | |||
| boostValue = std::sqrt (static_cast<SampleType> (2.0)); | |||
| break; | |||
| case Rule::sin4p5dB: | |||
| leftValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * (1.0 - normalisedPan)), 1.5)); | |||
| rightValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * normalisedPan), 1.5)); | |||
| boostValue = static_cast<SampleType> (std::pow (2.0, 3.0 / 4.0)); | |||
| break; | |||
| case Rule::sin6dB: | |||
| leftValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * (1.0 - normalisedPan)), 2.0)); | |||
| rightValue = static_cast<SampleType> (std::pow (std::sin (0.5 * MathConstants<double>::pi * normalisedPan), 2.0)); | |||
| boostValue = static_cast<SampleType> (2.0); | |||
| break; | |||
| case Rule::squareRoot3dB: | |||
| leftValue = std::sqrt (static_cast<SampleType> (1.0) - normalisedPan); | |||
| rightValue = std::sqrt (normalisedPan); | |||
| boostValue = std::sqrt (static_cast<SampleType> (2.0)); | |||
| break; | |||
| case Rule::squareRoot4p5dB: | |||
| leftValue = static_cast<SampleType> (std::pow (std::sqrt (1.0 - normalisedPan), 1.5)); | |||
| rightValue = static_cast<SampleType> (std::pow (std::sqrt (normalisedPan), 1.5)); | |||
| boostValue = static_cast<SampleType> (std::pow (2.0, 3.0 / 4.0)); | |||
| break; | |||
| default: | |||
| leftValue = jmin (static_cast<SampleType> (0.5), static_cast<SampleType> (1.0) - normalisedPan); | |||
| rightValue = jmin (static_cast<SampleType> (0.5), normalisedPan); | |||
| boostValue = static_cast<SampleType> (2.0); | |||
| break; | |||
| } | |||
| leftVolume .setTargetValue (leftValue * boostValue); | |||
| rightVolume.setTargetValue (rightValue * boostValue); | |||
| } | |||
| //============================================================================== | |||
| template class Panner<float>; | |||
| template class Panner<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,112 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class PannerRule | |||
| { | |||
| linear, | |||
| balanced, | |||
| sin3dB, | |||
| sin4p5dB, | |||
| sin6dB, | |||
| squareRoot3dB, | |||
| squareRoot4p5dB | |||
| }; | |||
| /** | |||
| A processor to perform panning operations on stereo buffers. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class Panner | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using Rule = PannerRule; | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| Panner(); | |||
| //============================================================================== | |||
| /** Sets the panning rule. */ | |||
| void setRule (Rule newRule); | |||
| /** Sets the current panning value, between -1 (full left) and 1 (full right). */ | |||
| void setPan (SampleType newPan); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numInputChannels = inputBlock.getNumChannels(); | |||
| const auto numOutputChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| ignoreUnused (numSamples); | |||
| if (numOutputChannels != 2 || numInputChannels == 0 || numInputChannels > 2) | |||
| return; | |||
| if (numInputChannels == 2) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| } | |||
| else | |||
| { | |||
| outputBlock.getSingleChannelBlock (0).copyFrom (inputBlock); | |||
| outputBlock.getSingleChannelBlock (1).copyFrom (inputBlock); | |||
| } | |||
| if (context.isBypassed) | |||
| return; | |||
| outputBlock.getSingleChannelBlock (0).multiplyBy (leftVolume); | |||
| outputBlock.getSingleChannelBlock (1).multiplyBy (rightVolume); | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| Rule currentRule = Rule::balanced; | |||
| SampleType pan = 0.0; | |||
| SmoothedValue<SampleType> leftVolume, rightVolume; | |||
| double sampleRate = 44100.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -31,14 +31,21 @@ namespace StateVariableFilter | |||
| /** | |||
| An IIR filter that can perform low, band and high-pass filtering on an audio | |||
| signal, with 12 dB of attenuation / octave, using a TPT structure, designed | |||
| signal, with 12 dB of attenuation per octave, using a TPT structure, designed | |||
| for fast modulation (see Vadim Zavalishin's documentation about TPT | |||
| structures for more information). Its behaviour is based on the analog | |||
| state variable filter circuit. | |||
| Note: The bandpass here is not the one in the RBJ CookBook, its gain can be | |||
| Note: The bandpass here is not the one in the RBJ CookBook as its gain can be | |||
| higher than 0 dB. For the classic 0 dB bandpass, we need to multiply the | |||
| result with R2 | |||
| result by R2. | |||
| Note 2: Using this class prevents some loud audio artefacts commonly encountered when | |||
| changing the cutoff frequency using other filter simulation structures and IIR | |||
| filter classes. However, this class may still require additional smoothing for | |||
| cutoff frequency changes. | |||
| see IIRFilter, SmoothedValue | |||
| @tags{DSP} | |||
| */ | |||
| @@ -56,10 +63,19 @@ namespace StateVariableFilter | |||
| using ParametersPtr = typename Parameters<NumericType>::Ptr; | |||
| //============================================================================== | |||
| /** Creates a filter with default parameters. */ | |||
| Filter() : parameters (new Parameters<NumericType>) { reset(); } | |||
| /** Creates a filter with default parameters. | |||
| The classes in the StateVariableFilter namespace are deprecated. you should | |||
| use the equivalent functionality in the StateVariableTPTFilter class. | |||
| */ | |||
| JUCE_DEPRECATED_WITH_BODY (Filter(), : parameters (new Parameters<NumericType>) { reset(); }) | |||
| /** Creates a filter using some parameters. | |||
| Filter (ParametersPtr parametersToUse) : parameters (std::move (parametersToUse)) { reset(); } | |||
| The classes in the StateVariableFilter namespace are deprecated. you should | |||
| use the equivalent functionality in the StateVariableTPTFilter class. | |||
| */ | |||
| JUCE_DEPRECATED_WITH_BODY (Filter (ParametersPtr parametersToUse), : parameters (std::move (parametersToUse)) { reset(); }) | |||
| /** Creates a copy of another filter. */ | |||
| Filter (const Filter&) = default; | |||
| @@ -137,7 +153,10 @@ namespace StateVariableFilter | |||
| for (size_t i = 0 ; i < n; ++i) | |||
| output[i] = processLoop<isBypassed, type> (input[i], state); | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| *parameters = state; | |||
| } | |||
| @@ -173,6 +192,13 @@ namespace StateVariableFilter | |||
| JUCE_LEAK_DETECTOR (Filter) | |||
| }; | |||
| enum class StateVariableFilterType | |||
| { | |||
| lowPass, | |||
| bandPass, | |||
| highPass | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| Structure used for the state variable filter parameters. | |||
| @@ -183,12 +209,7 @@ namespace StateVariableFilter | |||
| struct Parameters : public ProcessorState | |||
| { | |||
| //============================================================================== | |||
| enum class Type | |||
| { | |||
| lowPass, | |||
| bandPass, | |||
| highPass | |||
| }; | |||
| using Type = StateVariableFilterType; | |||
| //============================================================================== | |||
| /** The type of the IIR filter */ | |||
| @@ -0,0 +1,130 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| StateVariableTPTFilter<SampleType>::StateVariableTPTFilter() | |||
| { | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::setType (Type newValue) | |||
| { | |||
| filterType = newValue; | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::setCutoffFrequency (SampleType newCutoffFrequencyHz) | |||
| { | |||
| jassert (isPositiveAndBelow (newCutoffFrequencyHz, static_cast<SampleType> (sampleRate * 0.5))); | |||
| cutoffFrequency = newCutoffFrequencyHz; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::setResonance (SampleType newResonance) | |||
| { | |||
| jassert (newResonance > static_cast<SampleType> (0)); | |||
| resonance = newResonance; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| s1.resize (spec.numChannels); | |||
| s2.resize (spec.numChannels); | |||
| reset(); | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::reset() | |||
| { | |||
| reset (static_cast<SampleType> (0)); | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::reset (SampleType newValue) | |||
| { | |||
| for (auto v : { &s1, &s2 }) | |||
| std::fill (v->begin(), v->end(), newValue); | |||
| } | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::snapToZero() noexcept | |||
| { | |||
| for (auto v : { &s1, &s2 }) | |||
| for (auto& element : *v) | |||
| util::snapToZero (element); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType StateVariableTPTFilter<SampleType>::processSample (int channel, SampleType inputValue) | |||
| { | |||
| auto& ls1 = s1[(size_t) channel]; | |||
| auto& ls2 = s2[(size_t) channel]; | |||
| auto yHP = h * (inputValue - ls1 * (g + R2) - ls2); | |||
| auto yBP = yHP * g + ls1; | |||
| ls1 = yHP * g + yBP; | |||
| auto yLP = yBP * g + ls2; | |||
| ls2 = yBP * g + yLP; | |||
| switch (filterType) | |||
| { | |||
| case Type::lowpass: return yLP; | |||
| case Type::bandpass: return yBP; | |||
| case Type::highpass: return yHP; | |||
| default: return yLP; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void StateVariableTPTFilter<SampleType>::update() | |||
| { | |||
| g = static_cast<SampleType> (std::tan (juce::MathConstants<double>::pi * cutoffFrequency / sampleRate)); | |||
| R2 = static_cast<SampleType> (1.0 / resonance); | |||
| h = static_cast<SampleType> (1.0 / (1.0 + R2 * g + g * g)); | |||
| } | |||
| //============================================================================== | |||
| template class StateVariableTPTFilter<float>; | |||
| template class StateVariableTPTFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,159 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| enum class StateVariableTPTFilterType | |||
| { | |||
| lowpass, | |||
| bandpass, | |||
| highpass | |||
| }; | |||
| //============================================================================== | |||
| /** An IIR filter that can perform low, band and high-pass filtering on an audio | |||
| signal, with 12 dB of attenuation per octave, using a TPT structure, designed | |||
| for fast modulation (see Vadim Zavalishin's documentation about TPT | |||
| structures for more information). Its behaviour is based on the analog | |||
| state variable filter circuit. | |||
| Note: The bandpass here is not the one in the RBJ CookBook as its gain can be | |||
| higher than 0 dB. For the classic 0 dB bandpass, we need to multiply the | |||
| result by R2. | |||
| Note 2: Using this class prevents some loud audio artefacts commonly encountered when | |||
| changing the cutoff frequency using other filter simulation structures and IIR | |||
| filter classes. However, this class may still require additional smoothing for | |||
| cutoff frequency changes. | |||
| see IIRFilter, SmoothedValue | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class StateVariableTPTFilter | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| using Type = StateVariableTPTFilterType; | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| StateVariableTPTFilter(); | |||
| //============================================================================== | |||
| /** Sets the filter type. */ | |||
| void setType (Type newType); | |||
| /** Sets the cutoff frequency of the filter. | |||
| @param newFrequencyHz the new cutoff frequency in Hz. | |||
| */ | |||
| void setCutoffFrequency (SampleType newFrequencyHz); | |||
| /** Sets the resonance of the filter. | |||
| Note: The bandwidth of the resonance increases with the value of the | |||
| parameter. To have a standard 12 dB / octave filter, the value must be set | |||
| at 1 / sqrt(2). | |||
| */ | |||
| void setResonance (SampleType newResonance); | |||
| //============================================================================== | |||
| /** Returns the type of the filter. */ | |||
| Type getType() const noexcept { return filterType; } | |||
| /** Returns the cutoff frequency of the filter. */ | |||
| SampleType getCutoffFrequency() const noexcept { return cutoffFrequency; } | |||
| /** Returns the resonance of the filter. */ | |||
| SampleType getResonance() const noexcept { return resonance; } | |||
| //============================================================================== | |||
| /** Initialises the filter. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the filter. */ | |||
| void reset(); | |||
| /** Resets the internal state variables of the filter to a given value. */ | |||
| void reset (SampleType newValue); | |||
| /** Ensure that the state variables are rounded to zero if the state | |||
| variables are denormals. This is only needed if you are doing | |||
| sample by sample processing. | |||
| */ | |||
| void snapToZero() noexcept; | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() <= s1.size()); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample ((int) channel, inputSamples[i]); | |||
| } | |||
| #if JUCE_SNAP_TO_ZERO | |||
| snapToZero(); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| /** Processes one sample at a time on a given channel. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SampleType g, h, R2; | |||
| std::vector<SampleType> s1 { 2 }, s2 { 2 }; | |||
| double sampleRate = 44100.0; | |||
| Type filterType = Type::lowpass; | |||
| SampleType cutoffFrequency = static_cast<SampleType> (1000.0), | |||
| resonance = static_cast<SampleType> (1.0 / std::sqrt (2.0)); | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -96,7 +96,7 @@ public: | |||
| auto&& outBlock = context.getOutputBlock(); | |||
| jassert (inBlock.getNumChannels() == outBlock.getNumChannels()); | |||
| jassert (inBlock.getNumSamples() == outBlock.getNumSamples()); | |||
| jassert (inBlock.getNumSamples() == outBlock.getNumSamples()); | |||
| auto len = inBlock.getNumSamples(); | |||
| auto numChannels = inBlock.getNumChannels(); | |||
| @@ -0,0 +1,131 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| Chorus<SampleType>::Chorus() | |||
| { | |||
| auto oscFunction = [] (SampleType x) { return std::sin (x); }; | |||
| osc.initialise (oscFunction); | |||
| dryWet.setMixingRule (DryWetMixingRule::linear); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::setRate (SampleType newRateHz) | |||
| { | |||
| jassert (isPositiveAndBelow (newRateHz, static_cast<SampleType> (100.0))); | |||
| rate = newRateHz; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::setDepth (SampleType newDepth) | |||
| { | |||
| jassert (isPositiveAndNotGreaterThan (newDepth, static_cast<SampleType> (1.0))); | |||
| depth = newDepth; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::setCentreDelay (SampleType newDelayMs) | |||
| { | |||
| jassert (isPositiveAndBelow (newDelayMs, static_cast<SampleType> (100.0))); | |||
| centreDelay = jlimit (static_cast<SampleType> (1.0), static_cast<SampleType> (100.0), newDelayMs); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::setFeedback (SampleType newFeedback) | |||
| { | |||
| jassert (newFeedback >= static_cast<SampleType> (-1.0) && newFeedback <= static_cast<SampleType> (1.0)); | |||
| feedback = newFeedback; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::setMix (SampleType newMix) | |||
| { | |||
| jassert (isPositiveAndNotGreaterThan (newMix, static_cast<SampleType> (1.0))); | |||
| mix = newMix; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| delay.prepare (spec); | |||
| dryWet.prepare (spec); | |||
| feedbackVolume.resize (spec.numChannels); | |||
| lastOutput.resize (spec.numChannels); | |||
| osc.prepare (spec); | |||
| bufferDelayTimes.setSize (1, (int) spec.maximumBlockSize, false, false, true); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::reset() | |||
| { | |||
| std::fill (lastOutput.begin(), lastOutput.end(), static_cast<SampleType> (0)); | |||
| delay.reset(); | |||
| osc.reset(); | |||
| dryWet.reset(); | |||
| oscVolume.reset (sampleRate, 0.05); | |||
| for (auto& vol : feedbackVolume) | |||
| vol.reset (sampleRate, 0.05); | |||
| } | |||
| template <typename SampleType> | |||
| void Chorus<SampleType>::update() | |||
| { | |||
| osc.setFrequency (rate); | |||
| oscVolume.setTargetValue (depth * (SampleType) 0.5); | |||
| dryWet.setWetMixProportion (mix); | |||
| for (auto& vol : feedbackVolume) | |||
| vol.setTargetValue (feedback); | |||
| } | |||
| //============================================================================== | |||
| template class Chorus<float>; | |||
| template class Chorus<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,157 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| /** | |||
| A simple chorus DSP widget that modulates the delay of a delay line in order to | |||
| create sweeping notches in the magnitude frequency response. | |||
| This audio effect can be controlled via the speed and depth of the LFO controlling | |||
| the frequency response, a mix control, a feedback control, and the centre delay | |||
| of the modulation. | |||
| Note: To get classic chorus sounds try to use a centre delay time around 7-8 ms | |||
| with a low feeback volume and a low depth. This effect can also be used as a | |||
| flanger with a lower centre delay time and a lot of feedback, and as a vibrato | |||
| effect if the mix value is 1. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class Chorus | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| Chorus(); | |||
| //============================================================================== | |||
| /** Sets the rate (in Hz) of the LFO modulating the chorus delay line. This rate | |||
| must be lower than 100 Hz. | |||
| */ | |||
| void setRate (SampleType newRateHz); | |||
| /** Sets the volume of the LFO modulating the chorus delay line (between 0 and 1). | |||
| */ | |||
| void setDepth (SampleType newDepth); | |||
| /** Sets the centre delay in milliseconds of the chorus delay line modulation. | |||
| This delay must be between 1 and 100 ms. | |||
| */ | |||
| void setCentreDelay (SampleType newDelayMs); | |||
| /** Sets the feedback volume (between -1 and 1) of the chorus delay line. | |||
| Negative values can be used to get specific chorus sounds. | |||
| */ | |||
| void setFeedback (SampleType newFeedback); | |||
| /** Sets the amount of dry and wet signal in the output of the chorus (between 0 | |||
| for full dry and 1 for full wet). | |||
| */ | |||
| void setMix (SampleType newMix); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumChannels() == lastOutput.size()); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| auto delayValuesBlock = AudioBlock<SampleType>(bufferDelayTimes).getSubBlock (0, numSamples); | |||
| auto contextDelay = ProcessContextReplacing<SampleType> (delayValuesBlock); | |||
| delayValuesBlock.clear(); | |||
| osc.process (contextDelay); | |||
| delayValuesBlock.multiplyBy (oscVolume); | |||
| auto* delaySamples = bufferDelayTimes.getWritePointer (0); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| { | |||
| auto lfo = jmax (static_cast<SampleType> (1.0), maximumDelayModulation * delaySamples[i] + centreDelay); | |||
| delaySamples[i] = static_cast<SampleType> (lfo * sampleRate / 1000.0); | |||
| } | |||
| dryWet.pushDrySamples (inputBlock); | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| { | |||
| auto input = inputSamples[i]; | |||
| auto output = input - lastOutput[channel]; | |||
| delay.pushSample ((int) channel, input); | |||
| delay.setDelay (delaySamples[i]); | |||
| output = delay.popSample ((int) channel); | |||
| outputSamples[i] = output; | |||
| lastOutput[channel] = output * feedbackVolume[channel].getNextValue(); | |||
| } | |||
| } | |||
| dryWet.mixWetSamples (outputBlock); | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| Oscillator<SampleType> osc; | |||
| DelayLine<SampleType, DelayLineInterpolationTypes::Linear> delay { 5000 }; | |||
| SmoothedValue<SampleType, ValueSmoothingTypes::Linear> oscVolume; | |||
| std::vector<SmoothedValue<SampleType, ValueSmoothingTypes::Linear>> feedbackVolume { 2 }; | |||
| DryWetMixer<SampleType> dryWet; | |||
| std::vector<SampleType> lastOutput { 2 }; | |||
| AudioBuffer<SampleType> bufferDelayTimes; | |||
| double sampleRate = 44100.0; | |||
| SampleType rate = 1.0, depth = 0.25, feedback = 0.0, mix = 0.5, | |||
| centreDelay = 7.0, maximumDelayModulation = 20.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,117 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| Compressor<SampleType>::Compressor() | |||
| { | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::setThreshold (SampleType newThreshold) | |||
| { | |||
| thresholddB = newThreshold; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::setRatio (SampleType newRatio) | |||
| { | |||
| jassert (newRatio >= static_cast<SampleType> (1.0)); | |||
| ratio = newRatio; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::setAttack (SampleType newAttack) | |||
| { | |||
| attackTime = newAttack; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::setRelease (SampleType newRelease) | |||
| { | |||
| releaseTime = newRelease; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| envelopeFilter.prepare (spec); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::reset() | |||
| { | |||
| envelopeFilter.reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType Compressor<SampleType>::processSample (int channel, SampleType inputValue) | |||
| { | |||
| // Rectifier | |||
| auto env = jmax ((SampleType) 0.0, inputValue); | |||
| // Ballistics filter | |||
| env = envelopeFilter.processSample (channel, env); | |||
| // VCA | |||
| auto gain = (env < threshold) ? static_cast<SampleType> (1.0) | |||
| : std::pow (env * thresholdInverse, ratioInverse - static_cast<SampleType> (1.0)); | |||
| // Output | |||
| return gain * inputValue; | |||
| } | |||
| template <typename SampleType> | |||
| void Compressor<SampleType>::update() | |||
| { | |||
| threshold = Decibels::decibelsToGain (thresholddB, static_cast<SampleType> (-200.0)); | |||
| thresholdInverse = static_cast<SampleType> (1.0) / threshold; | |||
| ratioInverse = static_cast<SampleType> (1.0) / ratio; | |||
| envelopeFilter.setAttackTime (attackTime); | |||
| envelopeFilter.setReleaseTime (releaseTime); | |||
| } | |||
| //============================================================================== | |||
| template class Compressor<float>; | |||
| template class Compressor<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,103 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| /** | |||
| A simple compressor with standard threshold, ratio, attack time and release time | |||
| controls. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class Compressor | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| Compressor(); | |||
| //============================================================================== | |||
| /** Sets the threshold in dB of the compressor.*/ | |||
| void setThreshold (SampleType newThreshold); | |||
| /** Sets the ratio of the compressor (must be higher or equal to 1).*/ | |||
| void setRatio (SampleType newRatio); | |||
| /** Sets the attack time in milliseconds of the compressor.*/ | |||
| void setAttack (SampleType newAttack); | |||
| /** Sets the release time in milliseconds of the compressor.*/ | |||
| void setRelease (SampleType newRelease); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample ((int) channel, inputSamples[i]); | |||
| } | |||
| } | |||
| /** Performs the processing operation on a single sample at a time. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SampleType threshold, thresholdInverse, ratioInverse; | |||
| BallisticsFilter<SampleType> envelopeFilter; | |||
| double sampleRate = 44100.0; | |||
| SampleType thresholddB = 0.0, ratio = 1.0, attackTime = 1.0, releaseTime = 100.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,169 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| LadderFilter<SampleType>::LadderFilter() : state (2) | |||
| { | |||
| setSampleRate (SampleType (1000)); // intentionally setting unrealistic default | |||
| // sample rate to catch missing initialisation bugs | |||
| setResonance (SampleType (0)); | |||
| setDrive (SampleType (1.2)); | |||
| mode = Mode::LPF24; | |||
| setMode (Mode::LPF12); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::setMode (Mode newMode) noexcept | |||
| { | |||
| if (newMode == mode) | |||
| return; | |||
| switch (newMode) | |||
| { | |||
| case Mode::LPF12: A = {{ SampleType (0), SampleType (0), SampleType (1), SampleType (0), SampleType (0) }}; comp = SampleType (0.5); break; | |||
| case Mode::HPF12: A = {{ SampleType (1), SampleType (-2), SampleType (1), SampleType (0), SampleType (0) }}; comp = SampleType (0); break; | |||
| case Mode::BPF12: A = {{ SampleType (0), SampleType (0), SampleType (-1), SampleType (1), SampleType (0) }}; comp = SampleType (0.5); break; | |||
| case Mode::LPF24: A = {{ SampleType (0), SampleType (0), SampleType (0), SampleType (0), SampleType (1) }}; comp = SampleType (0.5); break; | |||
| case Mode::HPF24: A = {{ SampleType (1), SampleType (-4), SampleType (6), SampleType (-4), SampleType (1) }}; comp = SampleType (0); break; | |||
| case Mode::BPF24: A = {{ SampleType (0), SampleType (0), SampleType (1), SampleType (-2), SampleType (1) }}; comp = SampleType (0.5); break; | |||
| default: jassertfalse; break; | |||
| } | |||
| static constexpr auto outputGain = SampleType (1.2); | |||
| for (auto& a : A) | |||
| a *= outputGain; | |||
| mode = newMode; | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| setSampleRate (SampleType (spec.sampleRate)); | |||
| setNumChannels (spec.numChannels); | |||
| reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::reset() noexcept | |||
| { | |||
| for (auto& s : state) | |||
| s.fill (SampleType (0)); | |||
| cutoffTransformSmoother.setCurrentAndTargetValue (cutoffTransformSmoother.getTargetValue()); | |||
| scaledResonanceSmoother.setCurrentAndTargetValue (scaledResonanceSmoother.getTargetValue()); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::setCutoffFrequencyHz (SampleType newCutoff) noexcept | |||
| { | |||
| jassert (newCutoff > SampleType (0)); | |||
| cutoffFreqHz = newCutoff; | |||
| updateCutoffFreq(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::setResonance (SampleType newResonance) noexcept | |||
| { | |||
| jassert (newResonance >= SampleType (0) && newResonance <= SampleType (1)); | |||
| resonance = newResonance; | |||
| updateResonance(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::setDrive (SampleType newDrive) noexcept | |||
| { | |||
| jassert (newDrive >= SampleType (1)); | |||
| drive = newDrive; | |||
| gain = std::pow (drive, SampleType (-2.642)) * SampleType (0.6103) + SampleType (0.3903); | |||
| drive2 = drive * SampleType (0.04) + SampleType (0.96); | |||
| gain2 = std::pow (drive2, SampleType (-2.642)) * SampleType (0.6103) + SampleType (0.3903); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType LadderFilter<SampleType>::processSample (SampleType inputValue, size_t channelToUse) noexcept | |||
| { | |||
| auto& s = state[channelToUse]; | |||
| const auto a1 = cutoffTransformValue; | |||
| const auto g = a1 * SampleType (-1) + SampleType (1); | |||
| const auto b0 = g * SampleType (0.76923076923); | |||
| const auto b1 = g * SampleType (0.23076923076); | |||
| const auto dx = gain * saturationLUT (drive * inputValue); | |||
| const auto a = dx + scaledResonanceValue * SampleType (-4) * (gain2 * saturationLUT (drive2 * s[4]) - dx * comp); | |||
| const auto b = b1 * s[0] + a1 * s[1] + b0 * a; | |||
| const auto c = b1 * s[1] + a1 * s[2] + b0 * b; | |||
| const auto d = b1 * s[2] + a1 * s[3] + b0 * c; | |||
| const auto e = b1 * s[3] + a1 * s[4] + b0 * d; | |||
| s[0] = a; | |||
| s[1] = b; | |||
| s[2] = c; | |||
| s[3] = d; | |||
| s[4] = e; | |||
| return a * A[0] + b * A[1] + c * A[2] + d * A[3] + e * A[4]; | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::updateSmoothers() noexcept | |||
| { | |||
| cutoffTransformValue = cutoffTransformSmoother.getNextValue(); | |||
| scaledResonanceValue = scaledResonanceSmoother.getNextValue(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void LadderFilter<SampleType>::setSampleRate (SampleType newValue) noexcept | |||
| { | |||
| jassert (newValue > SampleType (0)); | |||
| cutoffFreqScaler = SampleType (-2.0 * juce::MathConstants<double>::pi) / newValue; | |||
| static constexpr SampleType smootherRampTimeSec = SampleType (0.05); | |||
| cutoffTransformSmoother.reset (newValue, smootherRampTimeSec); | |||
| scaledResonanceSmoother.reset (newValue, smootherRampTimeSec); | |||
| updateCutoffFreq(); | |||
| } | |||
| //============================================================================== | |||
| template class LadderFilter<float>; | |||
| template class LadderFilter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -21,62 +21,67 @@ namespace juce | |||
| namespace dsp | |||
| { | |||
| enum class LadderFilterMode | |||
| { | |||
| LPF12, // low-pass 12 dB/octave | |||
| HPF12, // high-pass 12 dB/octave | |||
| BPF12, // band-pass 12 dB/octave | |||
| LPF24, // low-pass 24 dB/octave | |||
| HPF24, // high-pass 24 dB/octave | |||
| BPF24 // band-pass 24 dB/octave | |||
| }; | |||
| /** | |||
| Multi-mode filter based on the Moog ladder filter. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename Type> | |||
| template <typename SampleType> | |||
| class LadderFilter | |||
| { | |||
| public: | |||
| enum class Mode | |||
| { | |||
| LPF12, // low-pass 12 dB/octave | |||
| HPF12, // high-pass 12 dB/octave | |||
| LPF24, // low-pass 24 dB/octave | |||
| HPF24 // high-pass 24 dB/octave | |||
| }; | |||
| //============================================================================== | |||
| using Mode = LadderFilterMode; | |||
| //============================================================================== | |||
| /** Creates an uninitialised filter. Call prepare() before first use. */ | |||
| LadderFilter(); | |||
| /** Enables or disables the filter. If disabled it will simply pass through the input signal. */ | |||
| void setEnabled (bool newValue) noexcept { enabled = newValue; } | |||
| void setEnabled (bool isEnabled) noexcept { enabled = isEnabled; } | |||
| /** Sets filter mode. */ | |||
| void setMode (Mode newValue) noexcept; | |||
| void setMode (Mode newMode) noexcept; | |||
| /** Initialises the filter. */ | |||
| void prepare (const juce::dsp::ProcessSpec& spec); | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Returns the current number of channels. */ | |||
| size_t getNumChannels() const noexcept { return state.size(); } | |||
| size_t getNumChannels() const noexcept { return state.size(); } | |||
| /** Resets the internal state variables of the filter. */ | |||
| void reset() noexcept; | |||
| /** Sets the cutoff frequency of the filter. | |||
| @param newValue cutoff frequency in Hz */ | |||
| void setCutoffFrequencyHz (Type newValue) noexcept; | |||
| void setCutoffFrequencyHz (SampleType newCutoff) noexcept; | |||
| /** Sets the resonance of the filter. | |||
| @param newValue a value between 0 and 1; higher values increase the resonance and can result in self oscillation! */ | |||
| void setResonance (Type newValue) noexcept; | |||
| void setResonance (SampleType newResonance) noexcept; | |||
| /** Sets the amount of saturation in the filter. | |||
| @param newValue saturation amount; it can be any number greater than or equal to one. Higher values result in more distortion.*/ | |||
| void setDrive (Type newValue) noexcept; | |||
| void setDrive (SampleType newDrive) noexcept; | |||
| //============================================================================== | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() <= getNumChannels()); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| @@ -99,35 +104,36 @@ public: | |||
| protected: | |||
| //============================================================================== | |||
| Type processSample (Type inputValue, size_t channelToUse) noexcept; | |||
| SampleType processSample (SampleType inputValue, size_t channelToUse) noexcept; | |||
| void updateSmoothers() noexcept; | |||
| private: | |||
| //============================================================================== | |||
| Type drive, drive2, gain, gain2, comp; | |||
| void setSampleRate (SampleType newValue) noexcept; | |||
| void setNumChannels (size_t newValue) { state.resize (newValue); } | |||
| void updateCutoffFreq() noexcept { cutoffTransformSmoother.setTargetValue (std::exp (cutoffFreqHz * cutoffFreqScaler)); } | |||
| void updateResonance() noexcept { scaledResonanceSmoother.setTargetValue (jmap (resonance, SampleType (0.1), SampleType (1.0))); } | |||
| //============================================================================== | |||
| SampleType drive, drive2, gain, gain2, comp; | |||
| static constexpr size_t numStates = 5; | |||
| std::vector<std::array<Type, numStates>> state; | |||
| std::array<Type, numStates> A; | |||
| std::vector<std::array<SampleType, numStates>> state; | |||
| std::array<SampleType, numStates> A; | |||
| SmoothedValue<Type> cutoffTransformSmoother, scaledResonanceSmoother; | |||
| Type cutoffTransformValue, scaledResonanceValue; | |||
| SmoothedValue<SampleType> cutoffTransformSmoother, scaledResonanceSmoother; | |||
| SampleType cutoffTransformValue, scaledResonanceValue; | |||
| LookupTableTransform<Type> saturationLUT { [] (Type x) { return std::tanh (x); }, Type (-5), Type (5), 128 }; | |||
| LookupTableTransform<SampleType> saturationLUT { [] (SampleType x) { return std::tanh (x); }, | |||
| SampleType (-5), SampleType (5), 128 }; | |||
| Type cutoffFreqHz { Type (200) }; | |||
| Type resonance; | |||
| SampleType cutoffFreqHz { SampleType (200) }; | |||
| SampleType resonance; | |||
| Type cutoffFreqScaler; | |||
| SampleType cutoffFreqScaler; | |||
| Mode mode; | |||
| bool enabled = true; | |||
| //============================================================================== | |||
| void setSampleRate (Type newValue) noexcept; | |||
| void setNumChannels (size_t newValue) { state.resize (newValue); } | |||
| void updateCutoffFreq() noexcept { cutoffTransformSmoother.setTargetValue (std::exp (cutoffFreqHz * cutoffFreqScaler)); } | |||
| void updateResonance() noexcept { scaledResonanceSmoother.setTargetValue (jmap (resonance, Type (0.1), Type (1.0))); } | |||
| }; | |||
| } // namespace dsp | |||
| @@ -0,0 +1,91 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Limiter<SampleType>::setThreshold (SampleType newThreshold) | |||
| { | |||
| thresholddB = newThreshold; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Limiter<SampleType>::setRelease (SampleType newRelease) | |||
| { | |||
| releaseTime = newRelease; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Limiter<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| firstStageCompressor.prepare (spec); | |||
| secondStageCompressor.prepare (spec); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void Limiter<SampleType>::reset() | |||
| { | |||
| firstStageCompressor.reset(); | |||
| secondStageCompressor.reset(); | |||
| outputVolume.reset (sampleRate, 0.001); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Limiter<SampleType>::update() | |||
| { | |||
| firstStageCompressor.setThreshold ((SampleType) -10.0); | |||
| firstStageCompressor.setRatio ((SampleType) 4.0); | |||
| firstStageCompressor.setAttack ((SampleType) 2.0); | |||
| firstStageCompressor.setRelease ((SampleType) 200.0); | |||
| secondStageCompressor.setThreshold (thresholddB); | |||
| secondStageCompressor.setRatio ((SampleType) 1000.0); | |||
| secondStageCompressor.setAttack ((SampleType) 0.001); | |||
| secondStageCompressor.setRelease (releaseTime); | |||
| auto ratioInverse = (SampleType) (1.0 / 4.0); | |||
| auto gain = (SampleType) std::pow (10.0, 10.0 * (1.0 - ratioInverse) / 40.0); | |||
| gain *= Decibels::decibelsToGain (-thresholddB, (SampleType) -100.0); | |||
| outputVolume.setTargetValue (gain); | |||
| } | |||
| //============================================================================== | |||
| template class Limiter<float>; | |||
| template class Limiter<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,98 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| /** | |||
| A simple limiter with standard threshold and release time controls, featuring | |||
| two compressors and a hard clipper at 0 dB. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class Limiter | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| Limiter() = default; | |||
| //============================================================================== | |||
| /** Sets the threshold in dB of the limiter.*/ | |||
| void setThreshold (SampleType newThreshold); | |||
| /** Sets the release time in milliseconds of the limiter.*/ | |||
| void setRelease (SampleType newRelease); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| firstStageCompressor.process (context); | |||
| auto secondContext = ProcessContextReplacing<SampleType> (outputBlock); | |||
| secondStageCompressor.process (secondContext); | |||
| outputBlock.multiplyBy (outputVolume); | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| FloatVectorOperations::clip (outputBlock.getChannelPointer (channel), outputBlock.getChannelPointer (channel), | |||
| (SampleType) -1.0, (SampleType) 1.0, (int) numSamples); | |||
| } | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| Compressor<SampleType> firstStageCompressor, secondStageCompressor; | |||
| SmoothedValue<SampleType, ValueSmoothingTypes::Linear> outputVolume; | |||
| double sampleRate = 44100.0; | |||
| SampleType thresholddB = -10.0, releaseTime = 100.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,122 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| NoiseGate<SampleType>::NoiseGate() | |||
| { | |||
| update(); | |||
| RMSFilter.setLevelCalculationType (BallisticsFilterLevelCalculationType::RMS); | |||
| RMSFilter.setAttackTime (static_cast<SampleType> (0.0)); | |||
| RMSFilter.setReleaseTime (static_cast<SampleType> (50.0)); | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::setThreshold (SampleType newValue) | |||
| { | |||
| thresholddB = newValue; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::setRatio (SampleType newRatio) | |||
| { | |||
| jassert (newRatio >= static_cast<SampleType> (1.0)); | |||
| ratio = newRatio; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::setAttack (SampleType newAttack) | |||
| { | |||
| attackTime = newAttack; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::setRelease (SampleType newRelease) | |||
| { | |||
| releaseTime = newRelease; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| RMSFilter.prepare (spec); | |||
| envelopeFilter.prepare (spec); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::reset() | |||
| { | |||
| RMSFilter.reset(); | |||
| envelopeFilter.reset(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| SampleType NoiseGate<SampleType>::processSample (int channel, SampleType sample) | |||
| { | |||
| // RMS ballistics filter | |||
| auto env = RMSFilter.processSample (channel, sample); | |||
| // Ballistics filter | |||
| env = envelopeFilter.processSample (channel, env); | |||
| // VCA | |||
| auto gain = (env > threshold) ? static_cast<SampleType> (1.0) | |||
| : std::pow (env * thresholdInverse, currentRatio - static_cast<SampleType> (1.0)); | |||
| // Output | |||
| return gain * sample; | |||
| } | |||
| template <typename SampleType> | |||
| void NoiseGate<SampleType>::update() | |||
| { | |||
| threshold = Decibels::decibelsToGain (thresholddB, static_cast<SampleType> (-200.0)); | |||
| thresholdInverse = static_cast<SampleType> (1.0) / threshold; | |||
| currentRatio = ratio; | |||
| envelopeFilter.setAttackTime (attackTime); | |||
| envelopeFilter.setReleaseTime (releaseTime); | |||
| } | |||
| //============================================================================== | |||
| template class NoiseGate<float>; | |||
| template class NoiseGate<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,103 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| /** | |||
| A simple noise gate with standard threshold, ratio, attack time and | |||
| release time controls. Can be used as an expander if the ratio is low. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class NoiseGate | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| NoiseGate(); | |||
| //============================================================================== | |||
| /** Sets the threshold in dB of the noise-gate.*/ | |||
| void setThreshold (SampleType newThreshold); | |||
| /** Sets the ratio of the noise-gate (must be higher or equal to 1).*/ | |||
| void setRatio (SampleType newRatio); | |||
| /** Sets the attack time in milliseconds of the noise-gate.*/ | |||
| void setAttack (SampleType newAttack); | |||
| /** Sets the release time in milliseconds of the noise-gate.*/ | |||
| void setRelease (SampleType newRelease); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| outputSamples[i] = processSample ((int) channel, inputSamples[i]); | |||
| } | |||
| } | |||
| /** Performs the processing operation on a single sample at a time. */ | |||
| SampleType processSample (int channel, SampleType inputValue); | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| SampleType threshold, thresholdInverse, currentRatio; | |||
| BallisticsFilter<SampleType> envelopeFilter, RMSFilter; | |||
| double sampleRate = 44100.0; | |||
| SampleType thresholddB = -100, ratio = 10.0, attackTime = 1.0, releaseTime = 100.0; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,147 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| Phaser<SampleType>::Phaser() | |||
| { | |||
| auto oscFunction = [] (SampleType x) { return std::sin (x); }; | |||
| osc.initialise (oscFunction); | |||
| for (auto n = 0; n < numStages; ++n) | |||
| { | |||
| filters.add (new FirstOrderTPTFilter<SampleType>()); | |||
| filters[n]->setType (FirstOrderTPTFilterType::allpass); | |||
| } | |||
| dryWet.setMixingRule (DryWetMixingRule::linear); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::setRate (SampleType newRateHz) | |||
| { | |||
| jassert (isPositiveAndBelow (newRateHz, static_cast<SampleType> (100.0))); | |||
| rate = newRateHz; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::setDepth (SampleType newDepth) | |||
| { | |||
| jassert (isPositiveAndNotGreaterThan (newDepth, static_cast<SampleType> (1.0))); | |||
| depth = newDepth; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::setCentreFrequency (SampleType newCentreHz) | |||
| { | |||
| jassert (isPositiveAndBelow (newCentreHz, static_cast<SampleType> (sampleRate * 0.5))); | |||
| centreFrequency = newCentreHz; | |||
| normCentreFrequency = mapToLog10 (centreFrequency, static_cast<SampleType> (20.0), static_cast<SampleType> (jmin (20000.0, 0.49 * sampleRate))); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::setFeedback (SampleType newFeedback) | |||
| { | |||
| jassert (newFeedback >= static_cast<SampleType> (-1.0) && newFeedback <= static_cast<SampleType> (1.0)); | |||
| feedback = newFeedback; | |||
| update(); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::setMix (SampleType newMix) | |||
| { | |||
| jassert (isPositiveAndNotGreaterThan (newMix, static_cast<SampleType> (1.0))); | |||
| mix = newMix; | |||
| update(); | |||
| } | |||
| //============================================================================== | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::prepare (const ProcessSpec& spec) | |||
| { | |||
| jassert (spec.sampleRate > 0); | |||
| jassert (spec.numChannels > 0); | |||
| sampleRate = spec.sampleRate; | |||
| for (auto n = 0; n < numStages; ++n) | |||
| filters[n]->prepare (spec); | |||
| dryWet.prepare (spec); | |||
| feedbackVolume.resize (spec.numChannels); | |||
| lastOutput.resize (spec.numChannels); | |||
| auto specDown = spec; | |||
| specDown.sampleRate /= (double) maxUpdateCounter; | |||
| specDown.maximumBlockSize = specDown.maximumBlockSize / (uint32) maxUpdateCounter + 1; | |||
| osc.prepare (specDown); | |||
| bufferFrequency.setSize (1, (int) specDown.maximumBlockSize, false, false, true); | |||
| update(); | |||
| reset(); | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::reset() | |||
| { | |||
| std::fill (lastOutput.begin(), lastOutput.end(), static_cast<SampleType> (0)); | |||
| for (auto n = 0; n < numStages; ++n) | |||
| filters[n]->reset(); | |||
| osc.reset(); | |||
| dryWet.reset(); | |||
| oscVolume.reset (sampleRate / (double) maxUpdateCounter, 0.05); | |||
| for (auto& vol : feedbackVolume) | |||
| vol.reset (sampleRate, 0.05); | |||
| updateCounter = 0; | |||
| } | |||
| template <typename SampleType> | |||
| void Phaser<SampleType>::update() | |||
| { | |||
| osc.setFrequency (rate); | |||
| oscVolume.setTargetValue (depth * (SampleType) 0.5); | |||
| dryWet.setWetMixProportion (mix); | |||
| for (auto& vol : feedbackVolume) | |||
| vol.setTargetValue (feedback); | |||
| } | |||
| //============================================================================== | |||
| template class Phaser<float>; | |||
| template class Phaser<double>; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -0,0 +1,199 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE 6 technical preview. | |||
| Copyright (c) 2020 - Raw Material Software Limited | |||
| You may use this code under the terms of the GPL v3 | |||
| (see www.gnu.org/licenses). | |||
| For this technical preview, this file is not subject to commercial licensing. | |||
| 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 | |||
| { | |||
| namespace dsp | |||
| { | |||
| /** | |||
| A 6 stage phaser that modulates first order all-pass filters to create sweeping | |||
| notches in the magnitude frequency response. | |||
| This audio effect can be controlled with standard phaser parameters: the speed | |||
| and depth of the LFO controlling the frequency response, a mix control, a | |||
| feedback control, and the centre frequency of the modulation. | |||
| @tags{DSP} | |||
| */ | |||
| template <typename SampleType> | |||
| class Phaser | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** Constructor. */ | |||
| Phaser(); | |||
| //============================================================================== | |||
| /** Sets the rate (in Hz) of the LFO modulating the phaser all-pass filters. This | |||
| rate must be lower than 100 Hz. | |||
| */ | |||
| void setRate (SampleType newRateHz); | |||
| /** Sets the volume (between 0 and 1) of the LFO modulating the phaser all-pass | |||
| filters. | |||
| */ | |||
| void setDepth (SampleType newDepth); | |||
| /** Sets the centre frequency (in Hz) of the phaser all-pass filters modulation. | |||
| */ | |||
| void setCentreFrequency (SampleType newCentreHz); | |||
| /** Sets the feedback volume (between -1 and 1) of the phaser. Negative can be | |||
| used to get specific phaser sounds. | |||
| */ | |||
| void setFeedback (SampleType newFeedback); | |||
| /** Sets the amount of dry and wet signal in the output of the phaser (between 0 | |||
| for full dry and 1 for full wet). | |||
| */ | |||
| void setMix (SampleType newMix); | |||
| //============================================================================== | |||
| /** Initialises the processor. */ | |||
| void prepare (const ProcessSpec& spec); | |||
| /** Resets the internal state variables of the processor. */ | |||
| void reset(); | |||
| //============================================================================== | |||
| /** Processes the input and output samples supplied in the processing context. */ | |||
| template <typename ProcessContext> | |||
| void process (const ProcessContext& context) noexcept | |||
| { | |||
| const auto& inputBlock = context.getInputBlock(); | |||
| auto& outputBlock = context.getOutputBlock(); | |||
| const auto numChannels = outputBlock.getNumChannels(); | |||
| const auto numSamples = outputBlock.getNumSamples(); | |||
| jassert (inputBlock.getNumChannels() == numChannels); | |||
| jassert (inputBlock.getNumChannels() == lastOutput.size()); | |||
| jassert (inputBlock.getNumSamples() == numSamples); | |||
| if (context.isBypassed) | |||
| { | |||
| outputBlock.copyFrom (inputBlock); | |||
| return; | |||
| } | |||
| int numSamplesDown = 0; | |||
| auto counter = updateCounter; | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| { | |||
| if (counter == 0) | |||
| numSamplesDown++; | |||
| counter++; | |||
| if (counter == maxUpdateCounter) | |||
| counter = 0; | |||
| } | |||
| if (numSamplesDown > 0) | |||
| { | |||
| auto freqBlock = AudioBlock<SampleType>(bufferFrequency).getSubBlock (0, (size_t) numSamplesDown); | |||
| auto contextFreq = ProcessContextReplacing<SampleType> (freqBlock); | |||
| freqBlock.clear(); | |||
| osc.process (contextFreq); | |||
| freqBlock.multiplyBy (oscVolume); | |||
| } | |||
| auto* freqSamples = bufferFrequency.getWritePointer (0); | |||
| for (int i = 0; i < numSamplesDown; ++i) | |||
| { | |||
| auto lfo = jlimit (static_cast<SampleType> (0.0), | |||
| static_cast<SampleType> (1.0), | |||
| freqSamples[i] + normCentreFrequency); | |||
| freqSamples[i] = mapToLog10 (lfo, static_cast<SampleType> (20.0), | |||
| static_cast<SampleType> (jmin (20000.0, 0.49 * sampleRate))); | |||
| } | |||
| auto currentFrequency = filters[0]->getCutoffFrequency(); | |||
| dryWet.pushDrySamples (inputBlock); | |||
| for (size_t channel = 0; channel < numChannels; ++channel) | |||
| { | |||
| counter = updateCounter; | |||
| int k = 0; | |||
| auto* inputSamples = inputBlock .getChannelPointer (channel); | |||
| auto* outputSamples = outputBlock.getChannelPointer (channel); | |||
| for (size_t i = 0; i < numSamples; ++i) | |||
| { | |||
| auto input = inputSamples[i]; | |||
| auto output = input - lastOutput[channel]; | |||
| if (i == 0 && counter != 0) | |||
| for (int n = 0; n < numStages; ++n) | |||
| filters[n]->setCutoffFrequency (currentFrequency); | |||
| if (counter == 0) | |||
| { | |||
| for (int n = 0; n < numStages; ++n) | |||
| filters[n]->setCutoffFrequency (freqSamples[k]); | |||
| k++; | |||
| } | |||
| for (int n = 0; n < numStages; ++n) | |||
| output = filters[n]->processSample ((int) channel, output); | |||
| outputSamples[i] = output; | |||
| lastOutput[channel] = output * feedbackVolume[channel].getNextValue(); | |||
| counter++; | |||
| if (counter == maxUpdateCounter) | |||
| counter = 0; | |||
| } | |||
| } | |||
| dryWet.mixWetSamples (outputBlock); | |||
| updateCounter = (updateCounter + (int) numSamples) % maxUpdateCounter; | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| void update(); | |||
| //============================================================================== | |||
| Oscillator<SampleType> osc; | |||
| OwnedArray<FirstOrderTPTFilter<SampleType>> filters; | |||
| SmoothedValue<SampleType, ValueSmoothingTypes::Linear> oscVolume; | |||
| std::vector<SmoothedValue<SampleType, ValueSmoothingTypes::Linear>> feedbackVolume { 2 }; | |||
| DryWetMixer<SampleType> dryWet; | |||
| std::vector<SampleType> lastOutput { 2 }; | |||
| AudioBuffer<SampleType> bufferFrequency; | |||
| SampleType normCentreFrequency = 0.5; | |||
| double sampleRate = 44100.0; | |||
| int updateCounter = 0; | |||
| static constexpr int maxUpdateCounter = 4; | |||
| SampleType rate = 1.0, depth = 0.5, feedback = 0.0, mix = 0.5; | |||
| SampleType centreFrequency = 1300.0; | |||
| static constexpr int numStages = 6; | |||
| }; | |||
| } // namespace dsp | |||
| } // namespace juce | |||
| @@ -53,7 +53,7 @@ public: | |||
| //============================================================================== | |||
| /** Initialises the reverb. */ | |||
| void prepare (const juce::dsp::ProcessSpec& spec) | |||
| void prepare (const ProcessSpec& spec) | |||
| { | |||
| reverb.setSampleRate (spec.sampleRate); | |||
| } | |||