/
reds
/
OpenDAW
Обзор
Документация
Войти
/
reds
/
OpenDAW
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/plugin/PluginHost.cpp
125 строк
4 KB
OpenDAW Developer
feat(v0.6.0): Add Plugin Support (CLAP + VST3)
21 фев 2026, 04:44
21 фев 2026, 04:44
ad86a0b
Код
Авторство
О чём код?
#include <opendaw/plugin/PluginHost.h> #include <iostream> #include <algorithm> namespace opendaw { void PluginHost::scanAllPlugins() { std::cout << "[PluginHost] Scanning all plugins..." << std::endl; discoveredPlugins_.clear(); // Scan CLAP if (enableCLAP_) { auto clapPlugins = clapScanner_.scanStandardPaths(); discoveredPlugins_.insert(discoveredPlugins_.end(), clapPlugins.begin(), clapPlugins.end()); } // Scan VST3 if (enableVST3_) { auto vst3Plugins = vst3Scanner_.scanStandardPaths(); discoveredPlugins_.insert(discoveredPlugins_.end(), vst3Plugins.begin(), vst3Plugins.end()); } std::cout << "[PluginHost] Found " << discoveredPlugins_.size() << " total plugins" << std::endl; } void PluginHost::scanPath(const std::string& path) { std::cout << "[PluginHost] Scanning path: " << path << std::endl; // Scan CLAP if (enableCLAP_) { auto plugins = clapScanner_.scanDirectory(path); discoveredPlugins_.insert(discoveredPlugins_.end(), plugins.begin(), plugins.end()); } // Scan VST3 if (enableVST3_) { auto plugins = vst3Scanner_.scanDirectory(path); discoveredPlugins_.insert(discoveredPlugins_.end(), plugins.begin(), plugins.end()); } } Plugin* PluginHost::loadPlugin(const std::string& pluginId) { std::cout << "[PluginHost] Loading plugin: " << pluginId << std::endl; // Найти плагин в списке auto it = std::find_if(discoveredPlugins_.begin(), discoveredPlugins_.end(), [&pluginId](const PluginInfo& info) { return info.id == pluginId; }); if (it == discoveredPlugins_.end()) { std::cerr << "[PluginHost] Plugin not found: " << pluginId << std::endl; return nullptr; } // Загрузить в зависимости от формата std::unique_ptr<Plugin> plugin; for (const auto& format : it->supportedFormats) { if (format == "CLAP") { plugin = ClapPlugin::loadFromFile(it->path); } else if (format == "VST3") { plugin = VST3Plugin::loadFromFile(it->path); } if (plugin) { break; } } if (plugin) { loadedPlugins_.push_back(std::move(plugin)); return loadedPlugins_.back().get(); } return nullptr; } void PluginHost::unloadPlugin(Plugin* plugin) { if (!plugin) return; auto it = std::find_if(loadedPlugins_.begin(), loadedPlugins_.end(), [plugin](const std::unique_ptr<Plugin>& p) { return p.get() == plugin; }); if (it != loadedPlugins_.end()) { loadedPlugins_.erase(it); } } std::vector<std::string> PluginHost::getSupportedFormats() const { std::vector<std::string> formats; if (enableCLAP_) formats.push_back("CLAP"); if (enableVST3_) formats.push_back("VST3"); return formats; } void PluginHost::scanCLAP(const std::string& path) { if (!enableCLAP_) return; auto plugins = clapScanner_.scanDirectory(path); for (const auto& plugin : plugins) { discoveredPlugins_.push_back(plugin); } } void PluginHost::scanVST3(const std::string& path) { if (!enableVST3_) return; auto plugins = vst3Scanner_.scanDirectory(path); for (const auto& plugin : plugins) { discoveredPlugins_.push_back(plugin); } } } // namespace opendaw