mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
DSP: Revamp DSP module
This commit is contained in:
parent
c419bc516d
commit
c138bf91b4
93 changed files with 17992 additions and 1828 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
BIN
examples/Assets/reverb_ir.wav
Normal file
BIN
examples/Assets/reverb_ir.wav
Normal file
Binary file not shown.
|
|
@ -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.setCutoffFrequency (static_cast<float> (cutoffParam.getCurrentValue()));
|
||||
filter.setResonance (static_cast<float> (qParam.getCurrentValue()));
|
||||
|
||||
filter.state->type = type;
|
||||
filter.state->setCutOffFrequency (sampleRate, cutoff, resonance);
|
||||
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)
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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,15 +4794,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4794,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4794,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -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,15 +4215,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4215,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4215,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4440,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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,15 +4440,15 @@
|
|||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.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_Oversampling.h">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
<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">
|
||||
<Filter>JUCE Modules\juce_dsp\processors</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -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
|
||||
493
modules/juce_audio_basics/utilities/juce_GenericInterpolator.h
Normal file
493
modules/juce_audio_basics/utilities/juce_GenericInterpolator.h
Normal file
|
|
@ -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
|
||||
184
modules/juce_audio_basics/utilities/juce_Interpolators.cpp
Normal file
184
modules/juce_audio_basics/utilities/juce_Interpolators.cpp
Normal file
|
|
@ -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
|
||||
228
modules/juce_audio_basics/utilities/juce_Interpolators.h
Normal file
228
modules/juce_audio_basics/utilities/juce_Interpolators.h
Normal file
|
|
@ -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
|
||||
template <int k>
|
||||
static float calcCoefficient (float input, float offset) noexcept
|
||||
{
|
||||
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;
|
||||
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, int available, int wrap) noexcept
|
||||
float Interpolators::LagrangeTraits::valueAtOffset (const float* inputs, float offset, int index) noexcept
|
||||
{
|
||||
return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap);
|
||||
}
|
||||
float result = 0.0f;
|
||||
|
||||
int LagrangeInterpolator::process (double actualRatio, const float* in, float* out, int numOut) noexcept
|
||||
{
|
||||
return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut);
|
||||
}
|
||||
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, int available, int wrap, float gain) noexcept
|
||||
{
|
||||
return interpolateAdding<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap, gain);
|
||||
}
|
||||
|
||||
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
|
||||
10026
modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp
Normal file
10026
modules/juce_audio_basics/utilities/juce_WindowedSincInterpolator.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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"
|
||||
|
|
|
|||
121
modules/juce_dsp/processors/juce_BallisticsFilter.cpp
Normal file
121
modules/juce_dsp/processors/juce_BallisticsFilter.cpp
Normal file
|
|
@ -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
|
||||
142
modules/juce_dsp/processors/juce_BallisticsFilter.h
Normal file
142
modules/juce_dsp/processors/juce_BallisticsFilter.h
Normal file
|
|
@ -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
|
||||
121
modules/juce_dsp/processors/juce_DelayLine.cpp
Normal file
121
modules/juce_dsp/processors/juce_DelayLine.cpp
Normal file
|
|
@ -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
|
||||
309
modules/juce_dsp/processors/juce_DelayLine.h
Normal file
309
modules/juce_dsp/processors/juce_DelayLine.h
Normal file
|
|
@ -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
|
||||
172
modules/juce_dsp/processors/juce_DryWetMixer.cpp
Normal file
172
modules/juce_dsp/processors/juce_DryWetMixer.cpp
Normal file
|
|
@ -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
|
||||
110
modules/juce_dsp/processors/juce_DryWetMixer.h
Normal file
110
modules/juce_dsp/processors/juce_DryWetMixer.h
Normal file
|
|
@ -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
|
||||
114
modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp
Normal file
114
modules/juce_dsp/processors/juce_FirstOrderTPTFilter.cpp
Normal file
|
|
@ -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
|
||||
144
modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h
Normal file
144
modules/juce_dsp/processors/juce_FirstOrderTPTFilter.h
Normal file
|
|
@ -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
|
||||
142
modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp
Normal file
142
modules/juce_dsp/processors/juce_LinkwitzRileyFilter.cpp
Normal file
|
|
@ -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
|
||||
136
modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h
Normal file
136
modules/juce_dsp/processors/juce_LinkwitzRileyFilter.h
Normal file
|
|
@ -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.
|
||||
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 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
|
||||
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.
|
||||
//===============================================================================
|
||||
/** The default 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,
|
||||
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 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;
|
||||
|
||||
Note: The latency might not be integer, so you might need to round its value
|
||||
or to compensate it properly in your processing code.
|
||||
/** 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: 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:
|
||||
//==============================================================================
|
||||
OwnedArray<OversamplingStage> stages;
|
||||
bool isReady = false;
|
||||
//===============================================================================
|
||||
void updateDelayLine();
|
||||
SampleType getUncompensatedLatency() const noexcept;
|
||||
|
||||
//==============================================================================
|
||||
//===============================================================================
|
||||
OwnedArray<OversamplingStage> stages;
|
||||
bool isReady = false, shouldUseIntegerLatency = false;
|
||||
DelayLine<SampleType, DelayLineInterpolationTypes::Thiran> delay { 8 };
|
||||
SampleType fractionalDelay = 0;
|
||||
|
||||
//===============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Oversampling)
|
||||
};
|
||||
|
||||
|
|
|
|||
136
modules/juce_dsp/processors/juce_Panner.cpp
Normal file
136
modules/juce_dsp/processors/juce_Panner.cpp
Normal file
|
|
@ -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
|
||||
112
modules/juce_dsp/processors/juce_Panner.h
Normal file
112
modules/juce_dsp/processors/juce_Panner.h
Normal file
|
|
@ -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.
|
||||
|
||||
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(), : parameters (new Parameters<NumericType>) { reset(); })
|
||||
|
||||
/** Creates a filter using some parameters.
|
||||
|
||||
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 */
|
||||
|
|
|
|||
130
modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp
Normal file
130
modules/juce_dsp/processors/juce_StateVariableTPTFilter.cpp
Normal file
|
|
@ -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
|
||||
159
modules/juce_dsp/processors/juce_StateVariableTPTFilter.h
Normal file
159
modules/juce_dsp/processors/juce_StateVariableTPTFilter.h
Normal file
|
|
@ -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();
|
||||
131
modules/juce_dsp/widgets/juce_Chorus.cpp
Normal file
131
modules/juce_dsp/widgets/juce_Chorus.cpp
Normal file
|
|
@ -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
|
||||
157
modules/juce_dsp/widgets/juce_Chorus.h
Normal file
157
modules/juce_dsp/widgets/juce_Chorus.h
Normal file
|
|
@ -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
|
||||
117
modules/juce_dsp/widgets/juce_Compressor.cpp
Normal file
117
modules/juce_dsp/widgets/juce_Compressor.cpp
Normal file
|
|
@ -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
|
||||
103
modules/juce_dsp/widgets/juce_Compressor.h
Normal file
103
modules/juce_dsp/widgets/juce_Compressor.h
Normal file
|
|
@ -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
|
||||
169
modules/juce_dsp/widgets/juce_LadderFilter.cpp
Normal file
169
modules/juce_dsp/widgets/juce_LadderFilter.cpp
Normal file
|
|
@ -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
|
||||
91
modules/juce_dsp/widgets/juce_Limiter.cpp
Normal file
91
modules/juce_dsp/widgets/juce_Limiter.cpp
Normal file
|
|
@ -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
|
||||
98
modules/juce_dsp/widgets/juce_Limiter.h
Normal file
98
modules/juce_dsp/widgets/juce_Limiter.h
Normal file
|
|
@ -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
|
||||
122
modules/juce_dsp/widgets/juce_NoiseGate.cpp
Normal file
122
modules/juce_dsp/widgets/juce_NoiseGate.cpp
Normal file
|
|
@ -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
|
||||
103
modules/juce_dsp/widgets/juce_NoiseGate.h
Normal file
103
modules/juce_dsp/widgets/juce_NoiseGate.h
Normal file
|
|
@ -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
|
||||
147
modules/juce_dsp/widgets/juce_Phaser.cpp
Normal file
147
modules/juce_dsp/widgets/juce_Phaser.cpp
Normal file
|
|
@ -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
|
||||
199
modules/juce_dsp/widgets/juce_Phaser.h
Normal file
199
modules/juce_dsp/widgets/juce_Phaser.h
Normal file
|
|
@ -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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue