From 1623b63889817fb1197cfdc14928f5f13cb6d51c Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 7 Aug 2025 16:21:54 +0100 Subject: [PATCH] AudioProcessorParameter: Move impl to dedicated file --- .../Builds/Android/app/CMakeLists.txt | 2 + .../VisualStudio2019/DemoRunner_App.vcxproj | 3 + .../DemoRunner_App.vcxproj.filters | 3 + .../VisualStudio2022/DemoRunner_App.vcxproj | 3 + .../DemoRunner_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../AudioPerformanceTest_App.vcxproj | 3 + .../AudioPerformanceTest_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../AudioPluginHost_App.vcxproj | 3 + .../AudioPluginHost_App.vcxproj.filters | 3 + .../AudioPluginHost_App.vcxproj | 3 + .../AudioPluginHost_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../NetworkGraphicsDemo_App.vcxproj | 3 + .../NetworkGraphicsDemo_App.vcxproj.filters | 3 + .../UnitTestRunner_ConsoleApp.vcxproj | 3 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 + .../UnitTestRunner_ConsoleApp.vcxproj | 3 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 + .../WindowsDLL_DynamicLibrary.vcxproj | 3 + .../WindowsDLL_DynamicLibrary.vcxproj.filters | 3 + .../juce_audio_processors.cpp | 1 + .../processors/juce_AudioProcessor.cpp | 135 -------------- .../juce_AudioProcessorParameter.cpp | 172 ++++++++++++++++++ 25 files changed, 235 insertions(+), 135 deletions(-) create mode 100644 modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index 53405c352d..3ed4365d7d 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -812,6 +812,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" @@ -3474,6 +3475,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index ca973b4fb1..952fefe56a 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -1029,6 +1029,9 @@ true + + true + true diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index a36e352160..b31b55b228 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -1732,6 +1732,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index 0537755935..41c71aee0f 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -1029,6 +1029,9 @@ true + + true + true diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index 47e2dbfa05..199a536b52 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -1732,6 +1732,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index e7a3dabda5..9f25515615 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -767,6 +767,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" @@ -3043,6 +3044,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 16c03c9fb1..02e9187d3e 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -987,6 +987,9 @@ true + + true + true diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index 9c5168a180..20f2802f08 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -1513,6 +1513,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index c166794e68..ee5c610d23 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -800,6 +800,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" @@ -3229,6 +3230,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index a7be3d1522..a16b9084e1 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -995,6 +995,9 @@ true + + true + true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 12a2459b27..ad264c4143 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -1588,6 +1588,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 37a8c9fe26..f118e5e5ae 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -995,6 +995,9 @@ true + + true + true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 2683798e1b..d47bbe62ef 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -1588,6 +1588,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index 9ae92f19d5..97e3496b4a 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -771,6 +771,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" @@ -3127,6 +3128,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index fc0e97f1c0..7c7d21ec99 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -987,6 +987,9 @@ true + + true + true diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index f0e9149811..6c0fbc226e 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -1543,6 +1543,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index a12918abd7..4258f0bac0 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -1003,6 +1003,9 @@ true + + true + true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index f0fc8fb7f6..168542acff 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1636,6 +1636,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index 3124bc734f..8baa176922 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -1003,6 +1003,9 @@ true + + true + true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index bbca4ac57b..4c8fc70387 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1636,6 +1636,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj index 16a1068990..5ec98a412f 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj @@ -986,6 +986,9 @@ true + + true + true diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters index 89db1c617d..7029ea85c7 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters @@ -1540,6 +1540,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp index 0a9eaedfef..a8ff26282b 100644 --- a/modules/juce_audio_processors/juce_audio_processors.cpp +++ b/modules/juce_audio_processors/juce_audio_processors.cpp @@ -184,6 +184,7 @@ private: #include "format/juce_AudioPluginFormat.cpp" #include "format/juce_AudioPluginFormatManager.cpp" #include "format_types/juce_LegacyAudioParameter.cpp" +#include "processors/juce_AudioProcessorParameter.cpp" #include "processors/juce_AudioProcessor.cpp" #include "processors/juce_AudioPluginInstance.cpp" #include "processors/juce_AudioProcessorEditor.cpp" diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp index 37eb89016a..48b8d5904d 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp @@ -1429,139 +1429,4 @@ JUCE_END_IGNORE_DEPRECATION_WARNINGS void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {} void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) {} -//============================================================================== -AudioProcessorParameter::~AudioProcessorParameter() -{ - #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING - // This will fail if you've called beginChangeGesture() without having made - // a corresponding call to endChangeGesture... - jassert (! isPerformingGesture); - #endif -} - -void AudioProcessorParameter::setValueNotifyingHost (float newValue) -{ - setValue (newValue); - sendValueChangedMessageToListeners (newValue); -} - -void AudioProcessorParameter::beginChangeGesture() -{ - // This method can't be used until the parameter has been attached to a processor! - jassert (processor != nullptr && parameterIndex >= 0); - - #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING - // This means you've called beginChangeGesture twice in succession without - // a matching call to endChangeGesture. That might be fine in most hosts, - // but it would be better to avoid doing it. - jassert (! isPerformingGesture); - isPerformingGesture = true; - #endif - - ScopedLock lock (listenerLock); - - for (int i = listeners.size(); --i >= 0;) - if (auto* l = listeners[i]) - l->parameterGestureChanged (getParameterIndex(), true); - - if (processor != nullptr && parameterIndex >= 0) - { - // audioProcessorParameterChangeGestureBegin callbacks will shortly be deprecated and - // this code will be removed. - for (int i = processor->listeners.size(); --i >= 0;) - if (auto* l = processor->listeners[i]) - l->audioProcessorParameterChangeGestureBegin (processor, getParameterIndex()); - } -} - -void AudioProcessorParameter::endChangeGesture() -{ - // This method can't be used until the parameter has been attached to a processor! - jassert (processor != nullptr && parameterIndex >= 0); - - #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING - // This means you've called endChangeGesture without having previously - // called beginChangeGesture. That might be fine in most hosts, but it - // would be better to keep the calls matched correctly. - jassert (isPerformingGesture); - isPerformingGesture = false; - #endif - - ScopedLock lock (listenerLock); - - for (int i = listeners.size(); --i >= 0;) - if (auto* l = listeners[i]) - l->parameterGestureChanged (getParameterIndex(), false); - - if (processor != nullptr && parameterIndex >= 0) - { - // audioProcessorParameterChangeGestureEnd callbacks will shortly be deprecated and - // this code will be removed. - for (int i = processor->listeners.size(); --i >= 0;) - if (auto* l = processor->listeners[i]) - l->audioProcessorParameterChangeGestureEnd (processor, getParameterIndex()); - } -} - -void AudioProcessorParameter::sendValueChangedMessageToListeners (float newValue) -{ - ScopedLock lock (listenerLock); - - for (int i = listeners.size(); --i >= 0;) - if (auto* l = listeners [i]) - l->parameterValueChanged (getParameterIndex(), newValue); - - if (processor != nullptr && parameterIndex >= 0) - { - // audioProcessorParameterChanged callbacks will shortly be deprecated and - // this code will be removed. - for (int i = processor->listeners.size(); --i >= 0;) - if (auto* l = processor->listeners[i]) - l->audioProcessorParameterChanged (processor, getParameterIndex(), newValue); - } -} - -bool AudioProcessorParameter::isOrientationInverted() const { return false; } -bool AudioProcessorParameter::isAutomatable() const { return true; } -bool AudioProcessorParameter::isMetaParameter() const { return false; } -AudioProcessorParameter::Category AudioProcessorParameter::getCategory() const { return genericParameter; } -int AudioProcessorParameter::getNumSteps() const { return AudioProcessor::getDefaultNumParameterSteps(); } -bool AudioProcessorParameter::isDiscrete() const { return false; } -bool AudioProcessorParameter::isBoolean() const { return false; } - -String AudioProcessorParameter::getText (float value, int /*maximumStringLength*/) const -{ - return String (value, 2); -} - -String AudioProcessorParameter::getCurrentValueAsText() const -{ - return getText (getValue(), 1024); -} - -StringArray AudioProcessorParameter::getAllValueStrings() const -{ - if (isDiscrete() && valueStrings.isEmpty()) - { - auto maxIndex = getNumSteps() - 1; - - for (int i = 0; i < getNumSteps(); ++i) - valueStrings.add (getText ((float) i / (float) maxIndex, 1024)); - } - - return valueStrings; -} - -void AudioProcessorParameter::addListener (AudioProcessorParameter::Listener* newListener) -{ - const ScopedLock sl (listenerLock); - listeners.addIfNotAlreadyThere (newListener); -} - -void AudioProcessorParameter::removeListener (AudioProcessorParameter::Listener* listenerToRemove) -{ - const ScopedLock sl (listenerLock); - listeners.removeFirstMatchingValue (listenerToRemove); -} - } // namespace juce diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp new file mode 100644 index 0000000000..259e9d014e --- /dev/null +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorParameter.cpp @@ -0,0 +1,172 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +AudioProcessorParameter::~AudioProcessorParameter() +{ + #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING + // This will fail if you've called beginChangeGesture() without having made + // a corresponding call to endChangeGesture... + jassert (! isPerformingGesture); + #endif +} + +void AudioProcessorParameter::setValueNotifyingHost (float newValue) +{ + setValue (newValue); + sendValueChangedMessageToListeners (newValue); +} + +void AudioProcessorParameter::beginChangeGesture() +{ + // This method can't be used until the parameter has been attached to a processor! + jassert (processor != nullptr && parameterIndex >= 0); + + #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING + // This means you've called beginChangeGesture twice in succession without + // a matching call to endChangeGesture. That might be fine in most hosts, + // but it would be better to avoid doing it. + jassert (! isPerformingGesture); + isPerformingGesture = true; + #endif + + ScopedLock lock (listenerLock); + + for (int i = listeners.size(); --i >= 0;) + if (auto* l = listeners[i]) + l->parameterGestureChanged (getParameterIndex(), true); + + if (processor != nullptr && parameterIndex >= 0) + { + // audioProcessorParameterChangeGestureBegin callbacks will shortly be deprecated and + // this code will be removed. + for (int i = processor->listeners.size(); --i >= 0;) + if (auto* l = processor->listeners[i]) + l->audioProcessorParameterChangeGestureBegin (processor, getParameterIndex()); + } +} + +void AudioProcessorParameter::endChangeGesture() +{ + // This method can't be used until the parameter has been attached to a processor! + jassert (processor != nullptr && parameterIndex >= 0); + + #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING + // This means you've called endChangeGesture without having previously + // called beginChangeGesture. That might be fine in most hosts, but it + // would be better to keep the calls matched correctly. + jassert (isPerformingGesture); + isPerformingGesture = false; + #endif + + ScopedLock lock (listenerLock); + + for (int i = listeners.size(); --i >= 0;) + if (auto* l = listeners[i]) + l->parameterGestureChanged (getParameterIndex(), false); + + if (processor != nullptr && parameterIndex >= 0) + { + // audioProcessorParameterChangeGestureEnd callbacks will shortly be deprecated and + // this code will be removed. + for (int i = processor->listeners.size(); --i >= 0;) + if (auto* l = processor->listeners[i]) + l->audioProcessorParameterChangeGestureEnd (processor, getParameterIndex()); + } +} + +void AudioProcessorParameter::sendValueChangedMessageToListeners (float newValue) +{ + ScopedLock lock (listenerLock); + + for (int i = listeners.size(); --i >= 0;) + if (auto* l = listeners [i]) + l->parameterValueChanged (getParameterIndex(), newValue); + + if (processor != nullptr && parameterIndex >= 0) + { + // audioProcessorParameterChanged callbacks will shortly be deprecated and + // this code will be removed. + for (int i = processor->listeners.size(); --i >= 0;) + if (auto* l = processor->listeners[i]) + l->audioProcessorParameterChanged (processor, getParameterIndex(), newValue); + } +} + +bool AudioProcessorParameter::isOrientationInverted() const { return false; } +bool AudioProcessorParameter::isAutomatable() const { return true; } +bool AudioProcessorParameter::isMetaParameter() const { return false; } +AudioProcessorParameter::Category AudioProcessorParameter::getCategory() const { return genericParameter; } +int AudioProcessorParameter::getNumSteps() const { return AudioProcessor::getDefaultNumParameterSteps(); } +bool AudioProcessorParameter::isDiscrete() const { return false; } +bool AudioProcessorParameter::isBoolean() const { return false; } + +String AudioProcessorParameter::getText (float value, int /*maximumStringLength*/) const +{ + return String (value, 2); +} + +String AudioProcessorParameter::getCurrentValueAsText() const +{ + return getText (getValue(), 1024); +} + +StringArray AudioProcessorParameter::getAllValueStrings() const +{ + if (isDiscrete() && valueStrings.isEmpty()) + { + auto maxIndex = getNumSteps() - 1; + + for (int i = 0; i < getNumSteps(); ++i) + valueStrings.add (getText ((float) i / (float) maxIndex, 1024)); + } + + return valueStrings; +} + +void AudioProcessorParameter::addListener (AudioProcessorParameter::Listener* newListener) +{ + const ScopedLock sl (listenerLock); + listeners.addIfNotAlreadyThere (newListener); +} + +void AudioProcessorParameter::removeListener (AudioProcessorParameter::Listener* listenerToRemove) +{ + const ScopedLock sl (listenerLock); + listeners.removeFirstMatchingValue (listenerToRemove); +} + +} // namespace juce