/* ============================================================================== 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. By using JUCE, you agree to the terms of both the JUCE 6 End-User License Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). End User License Agreement: www.juce.com/juce-6-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). 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 { PluginDescription AudioPluginInstance::getPluginDescription() const { PluginDescription desc; fillInPluginDescription (desc); return desc; } void* AudioPluginInstance::getPlatformSpecificData() { return nullptr; } void AudioPluginInstance::getExtensions (ExtensionsVisitor& visitor) const { visitor.visitUnknown ({}); } String AudioPluginInstance::getParameterID (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); // Currently there is no corresponding method available in the // AudioProcessorParameter class, and the previous behaviour of JUCE's // plug-in hosting code simply returns a string version of the index; to // maintain backwards compatibility you should perform the operation below // this comment. However the caveat is that for plug-ins which change their // number of parameters dynamically at runtime you cannot rely upon the // returned parameter ID mapping to the correct parameter. A comprehensive // solution to this problem requires some additional work in JUCE's hosting // code. return String (parameterIndex); } float AudioPluginInstance::getParameter (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getValue(); return 0.0f; } void AudioPluginInstance::setParameter (int parameterIndex, float newValue) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) param->setValue (newValue); } const String AudioPluginInstance::getParameterName (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getName (1024); return {}; } String AudioPluginInstance::getParameterName (int parameterIndex, int maximumStringLength) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getName (maximumStringLength); return {}; } const String AudioPluginInstance::getParameterText (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getCurrentValueAsText(); return {}; } String AudioPluginInstance::getParameterText (int parameterIndex, int maximumStringLength) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getCurrentValueAsText().substring (0, maximumStringLength); return {}; } float AudioPluginInstance::getParameterDefaultValue (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getDefaultValue(); return 0.0f; } int AudioPluginInstance::getParameterNumSteps (int parameterIndex) { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getNumSteps(); return AudioProcessor::getDefaultNumParameterSteps(); } bool AudioPluginInstance::isParameterDiscrete (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->isDiscrete(); return false; } bool AudioPluginInstance::isParameterAutomatable (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->isAutomatable(); return true; } String AudioPluginInstance::getParameterLabel (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getLabel(); return {}; } bool AudioPluginInstance::isParameterOrientationInverted (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->isOrientationInverted(); return false; } bool AudioPluginInstance::isMetaParameter (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->isMetaParameter(); return false; } AudioProcessorParameter::Category AudioPluginInstance::getParameterCategory (int parameterIndex) const { assertOnceOnDeprecatedMethodUse(); if (auto* param = getParameters()[parameterIndex]) return param->getCategory(); return AudioProcessorParameter::genericParameter; } void AudioPluginInstance::assertOnceOnDeprecatedMethodUse() const noexcept { if (! deprecationAssertiontriggered) { // If you hit this assertion then you are using at least one of the // methods marked as deprecated in this class. For now you can simply // continue past this point and subsequent uses of deprecated methods // will not trigger additional assertions. However, we will shortly be // removing these methods so you are strongly advised to look at the // implementation of the corresponding method in this class and use // that approach instead. jassertfalse; } deprecationAssertiontriggered = true; } bool AudioPluginInstance::deprecationAssertiontriggered = false; AudioPluginInstance::Parameter::Parameter() { onStrings.add (TRANS("on")); onStrings.add (TRANS("yes")); onStrings.add (TRANS("true")); offStrings.add (TRANS("off")); offStrings.add (TRANS("no")); offStrings.add (TRANS("false")); } AudioPluginInstance::Parameter::~Parameter() = default; String AudioPluginInstance::Parameter::getText (float value, int maximumStringLength) const { if (isBoolean()) return value < 0.5f ? TRANS("Off") : TRANS("On"); return String (value).substring (0, maximumStringLength); } float AudioPluginInstance::Parameter::getValueForText (const String& text) const { auto floatValue = text.retainCharacters ("-0123456789.").getFloatValue(); if (isBoolean()) { if (onStrings.contains (text, true)) return 1.0f; if (offStrings.contains (text, true)) return 0.0f; return floatValue < 0.5f ? 0.0f : 1.0f; } return floatValue; } void AudioPluginInstance::addHostedParameter (std::unique_ptr param) { addParameter (param.release()); } void AudioPluginInstance::addHostedParameterGroup (std::unique_ptr group) { #if JUCE_DEBUG // All parameters *must* be HostedParameters, otherwise getHostedParameter will return // garbage and your host will crash and burn for (auto* param : group->getParameters (true)) { jassert (dynamic_cast (param) != nullptr); } #endif addParameterGroup (std::move (group)); } void AudioPluginInstance::setHostedParameterTree (AudioProcessorParameterGroup group) { #if JUCE_DEBUG // All parameters *must* be HostedParameters, otherwise getHostedParameter will return // garbage and your host will crash and burn for (auto* param : group.getParameters (true)) { jassert (dynamic_cast (param) != nullptr); } #endif setParameterTree (std::move (group)); } AudioPluginInstance::HostedParameter* AudioPluginInstance::getHostedParameter (int index) const { // It's important that all AudioPluginInstance implementations // only ever own HostedParameters! return static_cast (getParameters()[index]); } } // namespace juce