| 
							- /*
 -  * Carla JSFX utils
 -  * Copyright (C) 2021 Jean Pierre Cimalando
 -  * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
 -  *
 -  * This program is free software; you can redistribute it and/or
 -  * modify it under the terms of the GNU General Public License as
 -  * published by the Free Software Foundation; either version 2 of
 -  * the License, or any later version.
 -  *
 -  * This program is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 -  * GNU General Public License for more details.
 -  *
 -  * For a full copy of the GNU General Public License see the doc/GPL.txt file.
 -  */
 - 
 - #ifndef CARLA_JSFX_UTILS_HPP_INCLUDED
 - #define CARLA_JSFX_UTILS_HPP_INCLUDED
 - 
 - #include "CarlaDefines.h"
 - #include "CarlaBackend.h"
 - #include "CarlaUtils.hpp"
 - #include "CarlaJuceUtils.hpp"
 - 
 - #include "water/files/File.h"
 - #include "water/text/String.h"
 - 
 - #ifdef YSFX_API
 - # error YSFX_API is not private
 - #endif
 - #include "ysfx/include/ysfx.h"
 - 
 - #include <memory>
 - 
 - CARLA_BACKEND_START_NAMESPACE
 - 
 - // --------------------------------------------------------------------------------------------------------------------
 - 
 - struct CarlaJsfxLogging
 - {
 -     static void logAll(intptr_t, const ysfx_log_level level, const char* const message)
 -     {
 -         switch (level)
 -         {
 -         case ysfx_log_info:
 -             carla_stdout("%s: %s", ysfx_log_level_string(level), message);
 -             break;
 -         case ysfx_log_warning:
 -             carla_stderr("%s: %s", ysfx_log_level_string(level), message);
 -             break;
 -         case ysfx_log_error:
 -             carla_stderr2("%s: %s", ysfx_log_level_string(level), message);
 -             break;
 -         }
 -     };
 - 
 -     static void logErrorsOnly(intptr_t, const ysfx_log_level level, const char* const message)
 -     {
 -         switch (level)
 -         {
 -         case ysfx_log_info:
 -             break;
 -         case ysfx_log_warning:
 -             carla_stderr("%s: %s", ysfx_log_level_string(level), message);
 -             break;
 -         case ysfx_log_error:
 -             carla_stderr2("%s: %s", ysfx_log_level_string(level), message);
 -             break;
 -         }
 -     };
 - };
 - 
 - // --------------------------------------------------------------------------------------------------------------------
 - 
 - struct CarlaJsfxCategories
 - {
 -     static PluginCategory getFromEffect(ysfx_t* effect)
 -     {
 -         PluginCategory category = PLUGIN_CATEGORY_OTHER;
 - 
 -         if (const uint32_t tagCount = ysfx_get_tags(effect, nullptr, 0))
 -         {
 -             std::vector<const char*> tags;
 -             tags.resize(tagCount);
 -             ysfx_get_tags(effect, tags.data(), tagCount);
 - 
 -             for (uint32_t i=0; i<tagCount && category == PLUGIN_CATEGORY_OTHER; ++i)
 -             {
 -                 water::CharPointer_UTF8 tag(tags[i]);
 -                 PluginCategory current = getFromTag(tag);
 -                 if (current != PLUGIN_CATEGORY_NONE)
 -                     category = current;
 -             }
 -         }
 - 
 -         return category;
 -     }
 - 
 -     static PluginCategory getFromTag(const water::CharPointer_UTF8 tag)
 -     {
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("synthesis")) == 0)
 -             return PLUGIN_CATEGORY_SYNTH;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("delay")) == 0)
 -             return PLUGIN_CATEGORY_DELAY;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("equalizer")) == 0)
 -             return PLUGIN_CATEGORY_EQ;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("filter")) == 0)
 -             return PLUGIN_CATEGORY_FILTER;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("distortion")) == 0)
 -             return PLUGIN_CATEGORY_DISTORTION;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("dynamics")) == 0)
 -             return PLUGIN_CATEGORY_DYNAMICS;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("modulation")) == 0)
 -             return PLUGIN_CATEGORY_MODULATOR;
 - 
 -         if (tag.compareIgnoreCase(water::CharPointer_UTF8("utility")) == 0)
 -             return PLUGIN_CATEGORY_UTILITY;
 - 
 -         return PLUGIN_CATEGORY_NONE;
 -     }
 - };
 - 
 - // --------------------------------------------------------------------------------------------------------------------
 - 
 - class CarlaJsfxUnit
 - {
 -     static water::String createFileId(const water::File& rootPath, const water::File& filePath)
 -     {
 -         water::String fileId(filePath.getRelativePathFrom(rootPath));
 - #ifdef CARLA_OS_WIN
 -         fileId.replaceCharacter('\\', '/');
 - #endif
 -         return fileId;
 -     }
 - 
 - public:
 -     CarlaJsfxUnit() noexcept
 -         : fFileId(),
 -           fFilePath(),
 -           fRootPath() {}
 - 
 -     CarlaJsfxUnit(const water::File& rootPath, const water::File& filePath)
 -         : fFileId(createFileId(rootPath, filePath)),
 -           fFilePath(rootPath.getChildFile(fFileId).getFullPathName()),
 -           fRootPath(rootPath.getFullPathName()) {}
 - 
 -     explicit operator bool() const noexcept
 -     {
 -         return fFileId.isNotEmpty();
 -     }
 - 
 -     const water::String& getFileId() const noexcept
 -     {
 -         return fFileId;
 -     }
 - 
 -     const water::String& getFilePath() const noexcept
 -     {
 -         return fFilePath;
 -     }
 - 
 -     const water::String& getRootPath() const noexcept
 -     {
 -         return fRootPath;
 -     }
 - 
 - private:
 -     water::String fFileId;
 -     water::String fFilePath;
 -     water::String fRootPath;
 - };
 - 
 - // --------------------------------------------------------------------------------------------------------------------
 - 
 - CARLA_BACKEND_END_NAMESPACE
 - 
 - #endif // CARLA_JSFX_UTILS_HPP_INCLUDED
 
 
  |