diff --git a/fdTransients/CMakeLists.txt b/fdTransients/CMakeLists.txt new file mode 100755 index 0000000..7bcd101 --- /dev/null +++ b/fdTransients/CMakeLists.txt @@ -0,0 +1,118 @@ +####### added the eingenmf +set(FLUID_DECOMP_DIR ../../fluid_decomposition) + +include_directories( + "${FLUID_DECOMP_DIR}" + "${FLUID_DECOMP_DIR}/include" + "${FLUID_DECOMP_DIR}/3rdparty" + "${CMAKE_CURRENT_SOURCE_DIR}/../include" +) + +####### original SC Cmake file starts here +set(FILENAME "fdTransients.cpp") #specify the .cpp file here +cmake_minimum_required (VERSION 2.8) +get_filename_component(PROJECT ${FILENAME} NAME_WE) #automatically sets project name from the filename +message(STATUS "Project name is ${PROJECT}") +project (${PROJECT}) + +include_directories(${SC_PATH}/include/plugin_interface) +include_directories(${SC_PATH}/include/common) +include_directories(${SC_PATH}/common) +include_directories(${SC_PATH}/common) +include_directories(${SC_PATH}/external_libraries/boost) + + +set(CMAKE_SHARED_MODULE_PREFIX "") +if(APPLE OR WIN32) +set(CMAKE_SHARED_MODULE_SUFFIX ".scx") +endif() + +option(SUPERNOVA "Build plugins for supernova" OFF) +if (SUPERNOVA) + include_directories(${SC_PATH}/external_libraries/nova-tt) + # actually just boost.atomic + include_directories(${SC_PATH}/external_libraries/boost) + include_directories(${SC_PATH}/external_libraries/boost_lockfree) + include_directories(${SC_PATH}/external_libraries/boost-lockfree) +endif() + +option(CPP11 "Build with c++11." ON) + +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_COMPILER_IS_CLANG 1) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) + add_definitions(-fvisibility=hidden) + + include (CheckCCompilerFlag) + include (CheckCXXCompilerFlag) + + CHECK_C_COMPILER_FLAG(-msse HAS_SSE) + CHECK_CXX_COMPILER_FLAG(-msse HAS_CXX_SSE) + + if (HAS_SSE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse") + endif() + if (HAS_CXX_SSE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") + endif() + + CHECK_C_COMPILER_FLAG(-msse2 HAS_SSE2) + CHECK_CXX_COMPILER_FLAG(-msse2 HAS_CXX_SSE2) + + if (HAS_SSE2) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2") + endif() + if (HAS_CXX_SSE2) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") + endif() + + CHECK_C_COMPILER_FLAG(-mfpmath=sse HAS_FPMATH_SSE) + CHECK_CXX_COMPILER_FLAG(-mfpmath=sse HAS_CXX_FPMATH_SSE) + + if (HAS_FPMATH_SSE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse") + endif() + if (HAS_CXX_FPMATH_SSE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=sse") + endif() + + if(NATIVE) + add_definitions(-march=native) + endif() + + if(CPP11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + if(CMAKE_COMPILER_IS_CLANG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() + endif() +endif() +if(MINGW) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mstackrealign") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mstackrealign") +endif() + +####### added the fluid_decomposition +add_library( +${PROJECT} +MODULE +${FILENAME} +"${FLUID_DECOMP_DIR}/3rdparty/HISSTools_FFT/HISSTools_FFT.cpp" +) +if(SUPERNOVA) + add_library(${PROJECT}_supernova MODULE ${FILENAME}) + set_property(TARGET ${PROJECT}_supernova + PROPERTY COMPILE_DEFINITIONS SUPERNOVA) +endif() + +add_custom_command( + TARGET + ${PROJECT} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "../../release-packaging/${PROJECT}/plugins" + COMMAND ${CMAKE_COMMAND} -E copy $ "../../release-packaging/${PROJECT}/plugins" +) + +target_link_libraries (${PROJECT} "-framework Accelerate") diff --git a/fdTransients/fdTransients.cpp b/fdTransients/fdTransients.cpp new file mode 100644 index 0000000..6a2ff00 --- /dev/null +++ b/fdTransients/fdTransients.cpp @@ -0,0 +1,72 @@ + // FD_BufNMF, an NRT buffer NMF Processor +// A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 725899) + +#include "clients/nrt/TransientNRTClient.hpp" +#include "fdNRTBase.hpp" +#include "data/FluidTensor.hpp" +#include "clients/common/FluidParams.hpp" +#include "SC_PlugIn.h" +#include +#include + +static InterfaceTable *ft; + +namespace fluid { + namespace sc{ + + class BufTransients: public NRTCommandBase + { + public: + using client_type = str::TransientNRTClient; + using NRTCommandBase::NRTCommandBase; + + ~BufTransients() {} + + void runCommand(World* world, void* replyAddr, char* completionMsgData, size_t completionMsgSize) + { + cmd(world, "AsyncTransients", replyAddr, completionMsgData, completionMsgSize); + } + + bool process(World* world) + { + //sanity check the parameters + bool parametersOk; + client_type::ProcessModel processModel; + std::string whatHappened;//this will give us a message to pass back if param check fails + std::tie(parametersOk,whatHappened,processModel) = trans.sanityCheck(); + if(!parametersOk) + { + Print("fdTransients: %s \n", whatHappened.c_str()); + return false; + } + trans.process(processModel); + mModel = processModel; + return true; + } + + bool postProcess(World* world) + { + if(mModel.returnTransients) + static_cast(mModel.trans)->assignToRT(world); + if(mModel.returnResidual) + static_cast(mModel.res)->assignToRT(world); + return true; + } + + bool postComplete(World* w) { return true; } + std::vector& parameters() + { + return trans.getParams(); + } + private: + client_type trans; + client_type::ProcessModel mModel; + };//class + } //namespace sc +}//namespace fluid + + +PluginLoad(OfflineFluidDecompositionUGens) { + ft = inTable; + registerCommand(ft, "BufTransients"); +}