From 05ce4af859f4547841629f98a966d206af281287 Mon Sep 17 00:00:00 2001 From: Paul Walker Date: Sun, 19 Jun 2022 20:13:44 -0400 Subject: [PATCH] All thats left is everything --- CMakeLists.txt | 24 ++++---- README | 6 ++ ...ect-x.plist.in => airwin-to-clap.plist.in} | 0 src/{claudio.cpp => airwin-to-clap.cpp} | 59 +++++++++++++++---- ...laudio.in.cpp => individual_airwin.in.cpp} | 4 +- src/individual_airwin.in.h | 15 +++++ src/individual_claudio.in.h | 15 ----- 7 files changed, 82 insertions(+), 41 deletions(-) create mode 100644 README rename cmake/{claudio-effect-x.plist.in => airwin-to-clap.plist.in} (100%) rename src/{claudio.cpp => airwin-to-clap.cpp} (79%) rename src/{individual_claudio.in.cpp => individual_airwin.in.cpp} (84%) create mode 100644 src/individual_airwin.in.h delete mode 100644 src/individual_claudio.in.h diff --git a/CMakeLists.txt b/CMakeLists.txt index bfc1661..6ed0288 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE) endif() -project(claudio-effect-x VERSION 0.9.0 LANGUAGES C CXX) +project(airwin-to-clap VERSION 0.9.0 LANGUAGES C CXX) set(CMAKE_CXX_EXTENSIONS OFF) @@ -33,7 +33,7 @@ if(NOT EXISTS "${CMAKE_BINARY_DIR}/individuals") endif() add_library(${PROJECT_NAME} MODULE - src/claudio.cpp + src/airwin-to-clap.cpp ) target_include_directories(${PROJECT_NAME} PRIVATE include ${CMAKE_BINARY_DIR}/individuals) target_link_libraries(${PROJECT_NAME} clap-core clap-helpers) @@ -41,7 +41,7 @@ set_property(TARGET ${PROJECT_NAME} PROPERTY AIRWIN_INCLUDES "") set_property(TARGET ${PROJECT_NAME} PROPERTY AIRWIN_COUNT 0) function (addAirwin airwin) - set(awt claudio_${airwin}) + set(awt aw2c_${airwin}) set(aw_src libs/airwindows/plugins/MacVST/${airwin}/source) add_library(${awt} STATIC ${aw_src}/${airwin}.cpp ${aw_src}/${airwin}Proc.cpp) target_include_directories(${awt} PRIVATE include) @@ -53,8 +53,8 @@ function (addAirwin airwin) set(CREATE_FN "${awt}CreateEffectInstance") set(AIRWIN_NAME "${airwin}") - configure_file(src/individual_claudio.in.h individuals/${awt}.h) - configure_file(src/individual_claudio.in.cpp individuals/${awt}.cpp) + configure_file(src/individual_airwin.in.h individuals/${awt}.h) + configure_file(src/individual_airwin.in.cpp individuals/${awt}.cpp) target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/individuals/${awt}.cpp) @@ -79,33 +79,33 @@ addAirwin(DeBess) get_target_property(AWC ${PROJECT_NAME} AIRWIN_COUNT) message(STATUS "Generating ${AWC} plugins" ) -set(sumfn "${CMAKE_BINARY_DIR}/individuals/claudio_configured.hxx") +set(sumfn "${CMAKE_BINARY_DIR}/individuals/aw2c_configured.hxx") file(WRITE ${sumfn} "// machine generated. Include once\n") get_target_property(AW ${PROJECT_NAME} AIRWIN_INCLUDES) foreach(awt ${AW}) message(STATUS "Airwindow: ${awt}") - file(APPEND ${sumfn} "#include \"claudio_${awt}.h\"\n") + file(APPEND ${sumfn} "#include \"aw2c_${awt}.h\"\n") endforeach() -file(APPEND ${sumfn} "uint32_t claudio_get_plugin_count(const clap_plugin_factory *f) { return ${AWC}; }\n") -file(APPEND ${sumfn} "const clap_plugin_descriptor *claudio_get_plugin_descriptor(const clap_plugin_factory *f, uint32_t w)\n") +file(APPEND ${sumfn} "uint32_t aw2c_get_plugin_count(const clap_plugin_factory *f) { return ${AWC}; }\n") +file(APPEND ${sumfn} "const clap_plugin_descriptor *aw2c_get_plugin_descriptor(const clap_plugin_factory *f, uint32_t w)\n") file(APPEND ${sumfn} "{ switch(w) {\n") set(CASEW 0) foreach(awt ${AW}) file(APPEND ${sumfn} "case ${CASEW}:\n") - file(APPEND ${sumfn} " return &claudio_${awt}_desc;\n") + file(APPEND ${sumfn} " return &aw2c_${awt}_desc;\n") file(APPEND ${sumfn} " break;\n") math(EXPR CASEW "${CASEW} + 1") endforeach() file(APPEND ${sumfn} "} return nullptr; } \n") -file(APPEND ${sumfn} "std::pair claudio_get_aeffInstance(audioMasterCallback c, const char* plugin_id)\n") +file(APPEND ${sumfn} "std::pair aw2c_get_aeffInstance(audioMasterCallback c, const char* plugin_id)\n") file(APPEND ${sumfn} "{") set(CASEW 0) foreach(awt ${AW}) - file(APPEND ${sumfn} "if (strcmp(plugin_id, \"unofficial.com.airwindows.${awt}\") == 0) return { claudio_${awt}CreateEffectInstance(c), &claudio_${awt}_desc};\n") + file(APPEND ${sumfn} "if (strcmp(plugin_id, \"unofficial.com.airwindows.${awt}\") == 0) return { aw2c_${awt}CreateEffectInstance(c), &aw2c_${awt}_desc};\n") endforeach() file(APPEND ${sumfn} "return {nullptr, nullptr}; } \n") diff --git a/README b/README new file mode 100644 index 0000000..3f997bf --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +# Unofficial Airwindows Support + +ToDo + +1. All of em +3. Push to github. \ No newline at end of file diff --git a/cmake/claudio-effect-x.plist.in b/cmake/airwin-to-clap.plist.in similarity index 100% rename from cmake/claudio-effect-x.plist.in rename to cmake/airwin-to-clap.plist.in diff --git a/src/claudio.cpp b/src/airwin-to-clap.cpp similarity index 79% rename from src/claudio.cpp rename to src/airwin-to-clap.cpp index db00644..31ed668 100644 --- a/src/claudio.cpp +++ b/src/airwin-to-clap.cpp @@ -9,23 +9,23 @@ #include "clap/helpers/host-proxy.hh" #include "clap/helpers/host-proxy.hxx" -#include "claudio_configured.hxx" +#include "aw2c_configured.hxx" #include #include -struct ClaudioWrapper : public clap::helpers::Plugin { AudioEffect *underlyer{nullptr}; - ClaudioWrapper(const clap_host *host, const clap_plugin_descriptor *desc, AudioEffect *effect) + aw2cWrapper(const clap_host *host, const clap_plugin_descriptor *desc, AudioEffect *effect) : clap::helpers::Plugin(desc, host), underlyer(effect) { assert(underlyer); } - ~ClaudioWrapper() = default; + ~aw2cWrapper() = default; bool activate(double sampleRate, uint32_t minFrameCount, uint32_t maxFrameCount) noexcept override @@ -146,25 +146,60 @@ struct ClaudioWrapper : public clap::helpers::PlugingetChunk((void**)&data, false); + + auto c = data; + while (s > 0) + { + auto r = stream->write(stream, c, s); + if (r < 0) + return false; + s -= r; + c += r; + } + free(data); + + return true; + } + bool stateLoad(const clap_istream *stream) noexcept override + { + char buffer[4096 * 16]; + char *bp = &(buffer[0]); + int64_t rd; + int total = 0; + while ((rd = stream->read(stream, bp, 256)) > 0) + { + total += rd; + bp += rd; + if (total > 4096*16) + return false; + } + + underlyer->setChunk(buffer, total, false); + return true; + } }; static const clap_plugin *clap_create_plugin(const clap_plugin_factory *f, const clap_host *host, const char *plugin_id) { - auto [fx, desc] = claudio_get_aeffInstance(host, plugin_id); - std::cout << "FX = " << fx << " plugin_id = " << plugin_id << std::endl; - - auto wr = new ClaudioWrapper(host, desc, fx); + auto [fx, desc] = aw2c_get_aeffInstance(host, plugin_id); + auto wr = new aw2cWrapper(host, desc, fx); return wr->clapPlugin(); } -const CLAP_EXPORT struct clap_plugin_factory claudio_factory = { - claudio_get_plugin_count, - claudio_get_plugin_descriptor, +const CLAP_EXPORT struct clap_plugin_factory aw2c_factory = { + aw2c_get_plugin_count, + aw2c_get_plugin_descriptor, clap_create_plugin, }; -static const void *get_factory(const char *factory_id) { return &claudio_factory; } +static const void *get_factory(const char *factory_id) { return &aw2c_factory; } // clap_init and clap_deinit are required to be fast, but we have nothing we need to do here bool clap_init(const char *p) { return true; } diff --git a/src/individual_claudio.in.cpp b/src/individual_airwin.in.cpp similarity index 84% rename from src/individual_claudio.in.cpp rename to src/individual_airwin.in.cpp index 6d00adf..8731d6a 100644 --- a/src/individual_claudio.in.cpp +++ b/src/individual_airwin.in.cpp @@ -4,10 +4,10 @@ // clang-format off #include "audioeffectx.h" -#include "claudio_@AIRWIN_NAME@.h" +#include "aw2c_@AIRWIN_NAME@.h" const char *@AIRWIN_NAME@_features[] = {CLAP_PLUGIN_FEATURE_AUDIO_EFFECT, nullptr}; -clap_plugin_descriptor claudio_@AIRWIN_NAME@_desc = { +clap_plugin_descriptor aw2c_@AIRWIN_NAME@_desc = { CLAP_VERSION, "unofficial.com.airwindows.@AIRWIN_NAME@", // change this change the cmake generatortoo "Airwindows @AIRWIN_NAME@ (Unofficial)", diff --git a/src/individual_airwin.in.h b/src/individual_airwin.in.h new file mode 100644 index 0000000..f6a090f --- /dev/null +++ b/src/individual_airwin.in.h @@ -0,0 +1,15 @@ +// +// Created by Paul Walker on 6/19/22. +// + +// clang-format off +#ifndef AW2C_@AIRWIN_NAME@_X_INDIVIDUAL_AW2C_IN_H +#define AW2C_@AIRWIN_NAME@_X_INDIVIDUAL_AW2C_IN_H + +#include "audioeffectx.h" +#include + +extern AudioEffect *@CREATE_FN@ (audioMasterCallback audioMaster); +extern clap_plugin_descriptor aw2c_@AIRWIN_NAME@_desc; + +#endif diff --git a/src/individual_claudio.in.h b/src/individual_claudio.in.h deleted file mode 100644 index 3f7248f..0000000 --- a/src/individual_claudio.in.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Created by Paul Walker on 6/19/22. -// - -// clang-format off -#ifndef CLAUDIO_EFFECT_@AIRWIN_NAME@_X_INDIVIDUAL_CLAUDIO_IN_H -#define CLAUDIO_EFFECT_@AIRWIN_NAME@_X_INDIVIDUAL_CLAUDIO_IN_H - -#include "audioeffectx.h" -#include - -extern AudioEffect *@CREATE_FN@ (audioMasterCallback audioMaster); -extern clap_plugin_descriptor claudio_@AIRWIN_NAME@_desc; - -#endif // CLAUDIO_EFFECT_X_INDIVIDUAL_CLAUDIO_IN_H