diff --git a/CMakeLists.txt b/CMakeLists.txt index eb471dc..0391687 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,14 +22,32 @@ set(FLUID_PATH "" CACHE PATH "Optional path to the Fluid Decomposition repo") set(FLUID_M_PATH "" CACHE PATH "Optional path to the Fluid fluid_manipulation repo") if (APPLE) - set(CMAKE_OSX_ARCHITECTURES x86_64) set(CMAKE_XCODE_GENERATE_SCHEME ON) - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8) + set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "") + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.8" CACHE STRING "") + #A consequence of targetting 10.8. Needs to be set globally from 10.15 onwards in order for the test program to compile successfully during configure + string(APPEND CMAKE_CXX_FLAGS " -stdlib=libc++") endif() ################################################################################ # Main project project (flucoma-sc LANGUAGES CXX) + +if(NOT MSVC) + add_compile_options(-fdiagnostics-color=always) +endif() + +#set correct std lib linking for Windows (in CMake 3.15 this has a native function) +if(MSVC) #needs to be after project() + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif() + endforeach() +endif() + set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY ON) @@ -86,7 +104,36 @@ endif() #needed for complaint-free static linking with GCC if(CMAKE_COMPILER_IS_GNUCXX) target_compile_options( HISSTools_FFT PUBLIC -fPIC ) -ENDIF() +endif() + +#sandbox regrettable dependency on SC internals for SendReply() +add_library(FLUID_SC_COPYREPLYADDR STATIC + "${CMAKE_SOURCE_DIR}/include/wrapper/CopyReplyAddress.cpp" + "${SC_PATH}/common/SC_Reply.cpp" + "${SC_PATH}/external_libraries/boost/libs/system/src/error_code.cpp" +) + +target_include_directories(FLUID_SC_COPYREPLYADDR SYSTEM PRIVATE + "${SC_PATH}/include/plugin_interface" + "${SC_PATH}/include/common" + "${SC_PATH}/common" + "${SC_PATH}/external_libraries/boost" +) +set_target_properties(FLUID_SC_COPYREPLYADDR PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO +) + +if(CMAKE_COMPILER_IS_GNUCXX) + target_compile_options(FLUID_SC_COPYREPLYADDR PUBLIC -fPIC ) +endif() + +if(APPLE) + target_compile_options(FLUID_SC_COPYREPLYADDR PRIVATE -stdlib=libc++) +endif() + +target_compile_definitions(FLUID_SC_COPYREPLYADDR PRIVATE BOOST_ALL_NO_LIB BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE) add_library(FLUID_SC_WRAPPER INTERFACE) target_include_directories(FLUID_SC_WRAPPER @@ -100,6 +147,8 @@ target_sources(FLUID_SC_WRAPPER "${CMAKE_CURRENT_SOURCE_DIR}/include/SCBufferAdaptor.hpp" ) +target_link_libraries(FLUID_SC_WRAPPER INTERFACE FLUID_SC_COPYREPLYADDR) + SUBDIRLIST(PROJECT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src") foreach (project_dir ${PROJECT_DIRS}) if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/${project_dir}/CMakeLists.txt") @@ -108,6 +157,8 @@ foreach (project_dir ${PROJECT_DIRS}) endif () endforeach () + + #install bits. set(SC_INSTALL_PREFIX "." CACHE PATH "Prefix for assembling SC packages") diff --git a/include/wrapper/ArgsToClient.hpp b/include/wrapper/ArgsToClient.hpp index bed811d..c9bb1c4 100644 --- a/include/wrapper/ArgsToClient.hpp +++ b/include/wrapper/ArgsToClient.hpp @@ -39,7 +39,7 @@ namespace client { { return allocSizeImpl(std::forward(t), std::index_sequence_for()); - }; + } template static std::tuple, index> @@ -53,11 +53,11 @@ namespace client { return std::make_tuple(res, size); // array of offsets into allocated buffer & // total number of floats to alloc - }; + } static void convert(float* f, typename BufferT::type buf) { - f[0] = static_cast(buf.get())->bufnum(); + f[0] = static_cast(static_cast(buf.get())->bufnum()); } template @@ -129,8 +129,7 @@ namespace client { static index numTags(std::tuple&&) { return std::tuple_size>::value; - }; - + } static void getTag(Packet& p, typename BufferT::type) { p.addtag('i'); } @@ -152,7 +151,7 @@ namespace client { getTag(p, dummy); } - template + template static void getTag(Packet& p, std::tuple&& t) { ForEach(t,[&p](auto& x){getTag(p,x);}); @@ -161,21 +160,21 @@ namespace client { static void convert(Packet& p, typename BufferT::type buf) { - p.addi(static_cast(buf.get())->bufnum()); + p.addi(static_cast(static_cast(buf.get())->bufnum())); } template static std::enable_if_t::value> convert(Packet& p, T x) { - p.addi(x); + p.addi(static_cast(x)); } template static std::enable_if_t::value> convert(Packet& p, T x) { - p.addf(x); + p.addf(static_cast(x)); } static void convert(Packet& p, std::string s) @@ -189,7 +188,7 @@ namespace client { for(auto& x: s) convert(p,x); } - template + template static void convert(Packet& p, std::tuple&& t) { ForEach(t,[&p](auto& x){ convert(p,x);}); diff --git a/include/wrapper/CopyReplyAddress.cpp b/include/wrapper/CopyReplyAddress.cpp new file mode 100644 index 0000000..0346b23 --- /dev/null +++ b/include/wrapper/CopyReplyAddress.cpp @@ -0,0 +1,51 @@ + +#include "CopyReplyAddress.hpp" +#include +#include + +namespace fluid{ +namespace client{ + +void* copyReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply) +{ + + if(! inreply) return nullptr; + + ReplyAddress* reply = (ReplyAddress*)ft->fRTAlloc(inWorld, sizeof(ReplyAddress)); + + *reply = *(static_cast(inreply)); + + return reply; +} + +void deleteReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply) +{ + if(! inreply) return; + ft->fRTFree(inWorld,(ReplyAddress*)inreply); +} + +void* copyReplyAddress(void* inreply) +{ + + if(! inreply) return nullptr; + + ReplyAddress* reply = new ReplyAddress(); + + *reply = *(static_cast(inreply)); + + return reply; +} + +void deleteReplyAddress(void* inreply) +{ + if(! inreply) return; + delete (ReplyAddress*)inreply; +} + +void SendReply(void* inReplyAddr, char* inBuf, int inSize) { + SendReply(static_cast(inReplyAddr),inBuf,inSize); +} + + +} +} diff --git a/include/wrapper/CopyReplyAddress.hpp b/include/wrapper/CopyReplyAddress.hpp index 6506779..fcc6ba8 100644 --- a/include/wrapper/CopyReplyAddress.hpp +++ b/include/wrapper/CopyReplyAddress.hpp @@ -1,46 +1,15 @@ #pragma once -#include +#include namespace fluid{ namespace client{ -void* copyReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply) -{ - - if(! inreply) return nullptr; - - ReplyAddress* reply = (ReplyAddress*)ft->fRTAlloc(inWorld, sizeof(ReplyAddress)); - - *reply = *(static_cast(inreply)); - - return reply; -} - -void deleteReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply) -{ - if(! inreply) return; - ft->fRTFree(inWorld,(ReplyAddress*)inreply); -} - -void* copyReplyAddress(void* inreply) -{ - - if(! inreply) return nullptr; - - ReplyAddress* reply = new ReplyAddress(); - - *reply = *(static_cast(inreply)); - - return reply; -} - -void deleteReplyAddress(void* inreply) -{ - if(! inreply) return; - delete (ReplyAddress*)inreply; -} - +void* copyReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply); +void deleteReplyAddress(InterfaceTable* ft, World* inWorld, void* inreply); +void* copyReplyAddress(void* inreply); +void deleteReplyAddress(void* inreply); +void SendReply(void* inReplyAddr, char* inBuf, int inSize); } diff --git a/include/wrapper/DeriveBaseClass.hpp b/include/wrapper/DeriveBaseClass.hpp index 9f59348..e0f3e94 100644 --- a/include/wrapper/DeriveBaseClass.hpp +++ b/include/wrapper/DeriveBaseClass.hpp @@ -9,28 +9,35 @@ namespace client { template class FluidSCWrapper; namespace impl { - + +template struct ChooseRTOrNRT; + +template<> +struct ChooseRTOrNRT +{ + template + using type = NonRealTime; +}; + +template<> +struct ChooseRTOrNRT +{ + template + using type = RealTime; +}; + + template struct BaseChooser { - templatestruct Choose - { - using type = NonRealTime; - }; - - template<> - struct Choose - { - using type = RealTime; - }; - using RT = typename Client::isRealTime; static constexpr bool UseRealTime = RT::value && !IsModel_t::value; - using type = typename Choose::type; + using type = typename ChooseRTOrNRT::template type; }; + template using BaseChooser_t = typename BaseChooser::type; diff --git a/include/wrapper/Messaging.hpp b/include/wrapper/Messaging.hpp index ed40cb1..cf7b4c3 100644 --- a/include/wrapper/Messaging.hpp +++ b/include/wrapper/Messaging.hpp @@ -2,6 +2,7 @@ #include "ArgsFromClient.hpp" #include "ArgsToClient.hpp" +#include "CopyReplyAddress.hpp" #include namespace fluid { @@ -225,7 +226,7 @@ struct FluidSCMessaging{ ToOSCTypes::convert(packet, static_cast(result)); if(replyAddr) - ::SendReply(static_cast(replyAddr),packet.data(),static_cast(packet.size())); + SendReply(replyAddr,packet.data(),static_cast(packet.size())); } static void messageOutput(const std::string& s,index id, MessageResult&, void* replyAddr) @@ -238,7 +239,7 @@ struct FluidSCMessaging{ packet.addi(static_cast(id)); if(replyAddr) - ::SendReply(static_cast(replyAddr),packet.data(),static_cast(packet.size())); + SendReply(replyAddr,packet.data(),static_cast(packet.size())); } template @@ -264,7 +265,7 @@ struct FluidSCMessaging{ ToOSCTypes::convert(packet, static_cast(result)); if(replyAddr) - ::SendReply(static_cast(replyAddr),packet.data(),static_cast(packet.size())); + SendReply(replyAddr,packet.data(),static_cast(packet.size())); } }; diff --git a/include/wrapper/NonRealtime.hpp b/include/wrapper/NonRealtime.hpp index db77f09..2e19d7a 100644 --- a/include/wrapper/NonRealtime.hpp +++ b/include/wrapper/NonRealtime.hpp @@ -1,15 +1,14 @@ #pragma once #include "BufferFuncs.hpp" -#include "Meta.hpp" -#include "SCBufferAdaptor.hpp" #include "CopyReplyAddress.hpp" #include "Messaging.hpp" +#include "Meta.hpp" #include "RealTimeBase.hpp" - +#include "SCBufferAdaptor.hpp" #include +#include #include -#include #include #include @@ -45,13 +44,16 @@ namespace impl { using CacheEntryPointer = std::shared_ptr; using WeakCacheEntryPointer = std::weak_ptr; //could use weak_type in 17 + + public: using Cache = std::map; - + static Cache mCache; + private: static bool isNull(WeakCacheEntryPointer const& weak) { return !weak.owner_before(WeakCacheEntryPointer{}) && !WeakCacheEntryPointer{}.owner_before(weak); } - static Cache mCache; + public: static WeakCacheEntryPointer get(index id) @@ -143,7 +145,7 @@ namespace impl { packet.addi(success); packet.addi(static_cast(mID)); - ::SendReply(static_cast(mReplyAddress),packet.data(), static_cast(packet.size())); + SendReply(mReplyAddress,packet.data(), static_cast(packet.size())); } } // protected: @@ -173,9 +175,15 @@ namespace impl { return cmd.c_str(); } - bool stage2(World*) + bool stage2(World* w) { // auto entry = ; + + + Result constraintsRes = validateParameters(mParams); + + if(!constraintsRes.ok()) Wrapper::printResult(w,constraintsRes); + mResult = (!isNull(add(NRTCommand::mID, mParams))); //Sigh. The cache entry above has both the client instance and main params instance. @@ -202,27 +210,20 @@ namespace impl { { using NRTCommand::NRTCommand; - - template - struct CancelCheck{ - void operator()(index id) + void cancelCheck(std::false_type, index id) + { + if(auto ptr = get(id).lock()) { - if(auto ptr = get(id).lock()) - { - auto& client = ptr->mClient; - if(!client.synchronous() && client.state() == ProcessState::kProcessing) - std::cout << Wrapper::getName() - << ": Processing cancelled" - << std::endl; - } + auto& client = ptr->mClient; + if(!client.synchronous() && client.state() == ProcessState::kProcessing) + std::cout << Wrapper::getName() + << ": Processing cancelled" + << std::endl; } - }; + } + + void cancelCheck(std::true_type, index){} - template<> - struct CancelCheck{ - void operator()(index) - {} - }; static const char* name() { @@ -232,7 +233,7 @@ namespace impl { bool stage2(World*) { - CancelCheck()(NRTCommand::mID); + cancelCheck(IsRTQueryModel_t(),NRTCommand::mID); remove(NRTCommand::mID); NRTCommand::sendReply(name(), true); return true; @@ -766,7 +767,7 @@ namespace impl { if(auto ptr = get(mID).lock()) { - bool trigger = (mPreviousTrigger <= 0) && mTrigger > 0; + bool trigger = (!mPreviousTrigger) && mTrigger; mPreviousTrigger = mTrigger; mTrigger = 0; auto& client = ptr->mClient; @@ -791,8 +792,8 @@ namespace impl { } private: - bool mPreviousTrigger{0}; - bool mTrigger{0}; + bool mPreviousTrigger{false}; + bool mTrigger{false}; Result mResult; impl::FloatControlsIter mControlsIterator; index mID; @@ -813,7 +814,7 @@ namespace impl { static const char* name() { - static std::string n = std::string(Wrapper::getName()) + "/query"; + static std::string n = std::string(Wrapper::getName()) + "Query"; return n.c_str(); } @@ -948,25 +949,19 @@ namespace impl { } }; - FifoMsg mFifoMsg; - char* mCompletionMessage = nullptr; - void* mReplyAddr = nullptr; - const char* mName = nullptr; - index checkThreadInterval; - index pollCounter{0}; - index mPreviousTrigger{0}; - + FifoMsg mFifoMsg; + char* mCompletionMessage = nullptr; + void* mReplyAddr = nullptr; + const char* mName = nullptr; + index checkThreadInterval; + index pollCounter{0}; + index mPreviousTrigger{0}; bool mSynchronous{true}; - Wrapper* mWrapper{static_cast(this)}; Result mResult; }; - //initialize static cache - template - using Cache = typename NonRealTime::Cache; - template - Cache NonRealTime::mCache{}; + typename NonRealTime::Cache NonRealTime::mCache{}; } } diff --git a/include/wrapper/RealTimeBase.hpp b/include/wrapper/RealTimeBase.hpp index ab2cca7..88bcf3a 100644 --- a/include/wrapper/RealTimeBase.hpp +++ b/include/wrapper/RealTimeBase.hpp @@ -125,22 +125,17 @@ namespace impl{ void next(SCUnit& unit, Client& client,Params& params,FloatControlsIter& controls) { bool trig = IsModel_t::value ? !mPrevTrig && unit.in0(0) > 0 : false; - bool shouldProcess = IsModel_t::value ? trig : true; + mPrevTrig = trig; -// if(shouldProcess) -// { - // controls.reset(unit.mInBuf + unit.mSpecialIndex + 1); - Wrapper::setParams(&unit, params, controls); - params.constrainParameterValues(); -// } + Wrapper::setParams(&unit, params, controls); + params.constrainParameterValues(); for (index i = 0; i < client.audioChannelsIn(); ++i) { assert(i <= std::numeric_limits::max()); if (mInputConnections[asUnsigned(i)]) - mAudioInputs[asUnsigned(i)].reset(const_cast(unit.in(static_cast(i))), 0, - unit.fullBufferSize()); + mAudioInputs[asUnsigned(i)].reset(const_cast(unit.in(static_cast(i))), 0,unit.fullBufferSize()); } for (index i = 0; i < client.audioChannelsOut(); ++i) diff --git a/release-packaging/Classes/FluidBufAmpGate.sc b/release-packaging/Classes/FluidBufAmpGate.sc index 0063f3c..c644b8d 100644 --- a/release-packaging/Classes/FluidBufAmpGate.sc +++ b/release-packaging/Classes/FluidBufAmpGate.sc @@ -41,3 +41,4 @@ FluidBufAmpGate : FluidBufProcessor { } } +FluidBufAmpGateTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufAmpSlice.sc b/release-packaging/Classes/FluidBufAmpSlice.sc index 0e20f07..2787176 100644 --- a/release-packaging/Classes/FluidBufAmpSlice.sc +++ b/release-packaging/Classes/FluidBufAmpSlice.sc @@ -37,3 +37,4 @@ FluidBufAmpSlice : FluidBufProcessor { ); } } +FluidBufAmpSliceTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufAudioTransport.sc b/release-packaging/Classes/FluidBufAudioTransport.sc index 66e5cb0..52a8182 100644 --- a/release-packaging/Classes/FluidBufAudioTransport.sc +++ b/release-packaging/Classes/FluidBufAudioTransport.sc @@ -56,3 +56,4 @@ FluidBufAudioTransport : FluidBufProcessor { ) } } +FluidBufAudioTransportTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufCompose.sc b/release-packaging/Classes/FluidBufCompose.sc index f35390d..d5d8cc5 100644 --- a/release-packaging/Classes/FluidBufCompose.sc +++ b/release-packaging/Classes/FluidBufCompose.sc @@ -36,3 +36,4 @@ FluidBufCompose : FluidBufProcessor { ).processList([source, startFrame, numFrames, startChan, numChans, gain, destination, destStartFrame, destStartChan, destGain, 1], freeWhenDone, action); } } +FluidBufComposeTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufFlatten.sc b/release-packaging/Classes/FluidBufFlatten.sc index e664290..60c70ce 100644 --- a/release-packaging/Classes/FluidBufFlatten.sc +++ b/release-packaging/Classes/FluidBufFlatten.sc @@ -44,3 +44,4 @@ FluidBufFlatten : FluidBufProcessor { } } +FluidBufFlattenTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufHPSS.sc b/release-packaging/Classes/FluidBufHPSS.sc index b7b0a9a..d8913ad 100644 --- a/release-packaging/Classes/FluidBufHPSS.sc +++ b/release-packaging/Classes/FluidBufHPSS.sc @@ -49,3 +49,4 @@ FluidBufHPSS : FluidBufProcessor { } } +FluidBufHPSSTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufLoudness.sc b/release-packaging/Classes/FluidBufLoudness.sc index c6c5568..0d3644e 100644 --- a/release-packaging/Classes/FluidBufLoudness.sc +++ b/release-packaging/Classes/FluidBufLoudness.sc @@ -46,3 +46,4 @@ FluidBufLoudness : FluidBufProcessor{ ); } } +FluidBufLoudnessTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufMFCC.sc b/release-packaging/Classes/FluidBufMFCC.sc index f7bd1c3..0d6360e 100644 --- a/release-packaging/Classes/FluidBufMFCC.sc +++ b/release-packaging/Classes/FluidBufMFCC.sc @@ -43,3 +43,4 @@ FluidBufMFCC : FluidBufProcessor{ ); } } +FluidBufMFCCTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufMelBands.sc b/release-packaging/Classes/FluidBufMelBands.sc index d238e61..cb5eb12 100644 --- a/release-packaging/Classes/FluidBufMelBands.sc +++ b/release-packaging/Classes/FluidBufMelBands.sc @@ -48,3 +48,4 @@ FluidBufMelBands : FluidBufProcessor { ); } } +FluidBufMelBandsTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufNMF.sc b/release-packaging/Classes/FluidBufNMF.sc index c21873b..97f6634 100644 --- a/release-packaging/Classes/FluidBufNMF.sc +++ b/release-packaging/Classes/FluidBufNMF.sc @@ -34,3 +34,4 @@ FluidBufNMF : FluidBufProcessor //: UGen { ).processList([source, startFrame, numFrames, startChan, numChans, resynth, bases, basesMode, activations, actMode, components,iterations, windowSize, hopSize, fftSize, 1],freeWhenDone,action); } } +FluidBufNMFTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufNMFCross.sc b/release-packaging/Classes/FluidBufNMFCross.sc index 22499b5..2a50fdc 100644 --- a/release-packaging/Classes/FluidBufNMFCross.sc +++ b/release-packaging/Classes/FluidBufNMFCross.sc @@ -46,3 +46,4 @@ FluidBufNMFCross : FluidBufProcessor { ); } } +FluidBufNMFCrossTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufNNDSVD.sc b/release-packaging/Classes/FluidBufNNDSVD.sc index 05d76ea..3aeb6ce 100644 --- a/release-packaging/Classes/FluidBufNNDSVD.sc +++ b/release-packaging/Classes/FluidBufNNDSVD.sc @@ -45,3 +45,4 @@ FluidBufNNDSVD : FluidBufProcessor{ ) } } +FluidBufNNDSVDTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufNoveltySlice.sc b/release-packaging/Classes/FluidBufNoveltySlice.sc index bae3651..b6c5dc9 100644 --- a/release-packaging/Classes/FluidBufNoveltySlice.sc +++ b/release-packaging/Classes/FluidBufNoveltySlice.sc @@ -48,3 +48,4 @@ FluidBufNoveltySlice : FluidBufProcessor { ); } } +FluidBufNoveltySliceTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufOnsetSlice.sc b/release-packaging/Classes/FluidBufOnsetSlice.sc index 77f6f38..2f9a754 100644 --- a/release-packaging/Classes/FluidBufOnsetSlice.sc +++ b/release-packaging/Classes/FluidBufOnsetSlice.sc @@ -46,3 +46,4 @@ FluidBufOnsetSlice : FluidBufProcessor { ); } } +FluidBufOnsetSliceTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufPitch.sc b/release-packaging/Classes/FluidBufPitch.sc index 3092496..608a404 100644 --- a/release-packaging/Classes/FluidBufPitch.sc +++ b/release-packaging/Classes/FluidBufPitch.sc @@ -48,3 +48,4 @@ FluidBufPitch : FluidBufProcessor{ ); } } +FluidBufPitchTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufScale.sc b/release-packaging/Classes/FluidBufScale.sc index a36425d..62c47e7 100644 --- a/release-packaging/Classes/FluidBufScale.sc +++ b/release-packaging/Classes/FluidBufScale.sc @@ -41,3 +41,4 @@ FluidBufScale : FluidBufProcessor { ); } } +FluidBufScaleTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufSines.sc b/release-packaging/Classes/FluidBufSines.sc index c4056db..781ed64 100644 --- a/release-packaging/Classes/FluidBufSines.sc +++ b/release-packaging/Classes/FluidBufSines.sc @@ -48,3 +48,4 @@ FluidBufSines : FluidBufProcessor { } } +FluidBufSinesTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufSpectralShape.sc b/release-packaging/Classes/FluidBufSpectralShape.sc index 837522a..4a28417 100644 --- a/release-packaging/Classes/FluidBufSpectralShape.sc +++ b/release-packaging/Classes/FluidBufSpectralShape.sc @@ -52,3 +52,4 @@ FluidBufSpectralShape : FluidBufProcessor { ); } } +FluidBufSpectralShapeTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufStats.sc b/release-packaging/Classes/FluidBufStats.sc index e29f5d4..c181c9a 100644 --- a/release-packaging/Classes/FluidBufStats.sc +++ b/release-packaging/Classes/FluidBufStats.sc @@ -49,3 +49,4 @@ FluidBufStats : FluidBufProcessor { } +FluidBufStatsTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufThreadDemo.sc b/release-packaging/Classes/FluidBufThreadDemo.sc index 03f5c3d..393920b 100644 --- a/release-packaging/Classes/FluidBufThreadDemo.sc +++ b/release-packaging/Classes/FluidBufThreadDemo.sc @@ -31,3 +31,4 @@ FluidBufThreadDemo : FluidBufProcessor{ ); } } +FluidBufThreadDemoTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufThresh.sc b/release-packaging/Classes/FluidBufThresh.sc index 47ecaff..9e3f6ca 100644 --- a/release-packaging/Classes/FluidBufThresh.sc +++ b/release-packaging/Classes/FluidBufThresh.sc @@ -43,3 +43,4 @@ FluidBufThresh : FluidBufProcessor { } } +FluidBufThreshTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufTransientSlice.sc b/release-packaging/Classes/FluidBufTransientSlice.sc index 7329236..38ff7a7 100644 --- a/release-packaging/Classes/FluidBufTransientSlice.sc +++ b/release-packaging/Classes/FluidBufTransientSlice.sc @@ -41,3 +41,4 @@ FluidBufTransientSlice : FluidBufProcessor { ); } } +FluidBufTransientSliceTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidBufTransients.sc b/release-packaging/Classes/FluidBufTransients.sc index c20f73a..1b71414 100644 --- a/release-packaging/Classes/FluidBufTransients.sc +++ b/release-packaging/Classes/FluidBufTransients.sc @@ -41,3 +41,4 @@ FluidBufTransients : FluidBufProcessor { ); } } +FluidBufTransientsTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidDataSetWr.sc b/release-packaging/Classes/FluidDataSetWr.sc index 1d93c88..db4f79d 100644 --- a/release-packaging/Classes/FluidDataSetWr.sc +++ b/release-packaging/Classes/FluidDataSetWr.sc @@ -9,3 +9,5 @@ FluidDataSetWr : FluidBufProcessor { ^FluidProxyUgen.kr(\FluidDataSetWrTrigger,*args); } } + +FluidDataSetWrTrigger : FluidProxyUgen {} diff --git a/release-packaging/Classes/FluidKDTree.sc b/release-packaging/Classes/FluidKDTree.sc index c3fe972..57ef743 100644 --- a/release-packaging/Classes/FluidKDTree.sc +++ b/release-packaging/Classes/FluidKDTree.sc @@ -50,11 +50,13 @@ FluidKDTree : FluidRealTimeModel this.numNeighbours_(numNeighbours); lookupDataSet = lookupDataSet ? -1; this.lookupDataSet_(lookupDataSet); - this.lookupDataSet.asUGenInput.postln; - ^FluidProxyUgen.kr('FluidKDTree/query', K2A.ar(trig), - id, this.numNeighbours, this.radius, this.lookupDataSet.asUGenInput, + + ^FluidKDTreeQuery.kr(K2A.ar(trig), + this, this.numNeighbours, this.radius, this.lookupDataSet.asUGenInput, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidKDTreeQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidKMeans.sc b/release-packaging/Classes/FluidKMeans.sc index 892bd27..a38d613 100644 --- a/release-packaging/Classes/FluidKMeans.sc +++ b/release-packaging/Classes/FluidKMeans.sc @@ -60,9 +60,11 @@ FluidKMeans : FluidRealTimeModel { } kr{|trig, inputBuffer,outputBuffer| - ^FluidProxyUgen.kr('FluidKMeans/query', K2A.ar(trig), - id, clusters, maxiter, + ^FluidKMeansQuery.kr(K2A.ar(trig), + this, clusters, maxiter, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidKMeansQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidKNNClassifier.sc b/release-packaging/Classes/FluidKNNClassifier.sc index 014a0cc..0161bb1 100644 --- a/release-packaging/Classes/FluidKNNClassifier.sc +++ b/release-packaging/Classes/FluidKNNClassifier.sc @@ -38,10 +38,12 @@ FluidKNNClassifier : FluidRealTimeModel { } kr{|trig, inputBuffer,outputBuffer| - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.numNeighbours, this.weight, + ^FluidKNNClassifierQuery.kr(K2A.ar(trig), + this, this.numNeighbours, this.weight, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidKNNClassifierQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidKNNRegressor.sc b/release-packaging/Classes/FluidKNNRegressor.sc index a6a7cad..8c622a5 100644 --- a/release-packaging/Classes/FluidKNNRegressor.sc +++ b/release-packaging/Classes/FluidKNNRegressor.sc @@ -38,9 +38,11 @@ FluidKNNRegressor : FluidRealTimeModel { } kr{|trig, inputBuffer,outputBuffer| - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.numNeighbours, this.weight, + ^FluidKNNRegressorQuery.kr(K2A.ar(trig), + this, this.numNeighbours, this.weight, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidKNNRegressorQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidMLP.sc b/release-packaging/Classes/FluidMLP.sc index d459d1f..23e5624 100644 --- a/release-packaging/Classes/FluidMLP.sc +++ b/release-packaging/Classes/FluidMLP.sc @@ -75,12 +75,12 @@ FluidMLPRegressor : FluidRealTimeModel { params = this.prGetParams.drop(-2) ++ [this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)]; - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, *params); + ^FluidMLPRegressorQuery.kr(K2A.ar(trig),this, *params); } } +FluidMLPRegressorQuery : FluidRTQuery {} FluidMLPClassifier : FluidRealTimeModel { @@ -145,7 +145,8 @@ FluidMLPClassifier : FluidRealTimeModel { var params = this.prGetParams.drop(-2) ++ [this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)]; - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, *params); + ^FluidMLPClassifierQuery.kr(K2A.ar(trig),this, *params); } } + +FluidMLPClassifierQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidNormalize.sc b/release-packaging/Classes/FluidNormalize.sc index 17d5c5a..94eb422 100644 --- a/release-packaging/Classes/FluidNormalize.sc +++ b/release-packaging/Classes/FluidNormalize.sc @@ -60,9 +60,11 @@ FluidNormalize : FluidRealTimeModel { this.min_(min).max_(max).invert_(invert); - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.min, this.max, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); + ^FluidNormalizeQuery.kr( K2A.ar(trig), + this, this.min, this.max, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidNormalizeQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidPCA.sc b/release-packaging/Classes/FluidPCA.sc index 94c7df3..20190c5 100644 --- a/release-packaging/Classes/FluidPCA.sc +++ b/release-packaging/Classes/FluidPCA.sc @@ -55,8 +55,9 @@ FluidPCA : FluidRealTimeModel{ numDimensions = numDimensions ? this.numDimensions; this.numDimensions_(numDimensions); - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.numDimensions, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); + ^FluidPCAQuery.kr(K2A.ar(trig),this, this.numDimensions, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidPCAQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidRobustScale.sc b/release-packaging/Classes/FluidRobustScale.sc index db53de9..963745b 100644 --- a/release-packaging/Classes/FluidRobustScale.sc +++ b/release-packaging/Classes/FluidRobustScale.sc @@ -60,9 +60,10 @@ FluidRobustScale : FluidRealTimeModel { this.low_(low).high_(high).invert_(invert); - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.low, this.high, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); + ^FluidRobustScaleQuery.kr(K2A.ar(trig),this, this.low, this.high, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidRobustScaleQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index d831413..06ce7c1 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -6,16 +6,21 @@ FluidServerObject var ",2.1) +~joiner.filter(0,">",2.1) ~joiner.and(1,"<", 40) ~joiner.addColumn(0) ~joiner.transformJoin(~dsA,~dsB,~dsC) diff --git a/release-packaging/HelpSource/Classes/FluidKDTree.schelp b/release-packaging/HelpSource/Classes/FluidKDTree.schelp index 7c037c7..14100e6 100644 --- a/release-packaging/HelpSource/Classes/FluidKDTree.schelp +++ b/release-packaging/HelpSource/Classes/FluidKDTree.schelp @@ -92,15 +92,17 @@ fork{ // Explore changing the number of neighbourgs ~tree.numNeighbours = 11; // note that this value needs to be sent to the server -~tree.kNearest(~tmpbuf,{ |a|a.postln;~nearest = a;}); +~tree.kNearest(~tmpbuf,{ |a|a.postln;}); ~tree.numNeighbours = 0; // 0 will return all items in order of distance +~tree.kNearest(~tmpbuf,{ |a|a.postln;}); // Limit the search to an acceptable distance in a radius // Define a point, and observe typical distance values ~p = [ 0.4,0.4]; ( ~tmpbuf = Buffer.loadCollection(s, ~p, 1, { - ~tree.kNearestDist(~tmpbuf,{ |a|a.postln;~nearest = a;}); + ~tree.kNearest(~tmpbuf,{ |a|a.postln;}); + ~tree.kNearestDist(~tmpbuf,{ |a|a.postln;}); }); ) @@ -109,7 +111,7 @@ fork{ // FluidKDTree will return only values that are within that radius, up to numNeighbours values ( ~tmpbuf = Buffer.loadCollection(s, ~p, 1, { - ~tree.kNearest(~tmpbuf,{ |a|a.postln;~nearest = a;}); + ~tree.kNearest(~tmpbuf,{ |a|a.postln;}); }); ) :: diff --git a/scripts/target_post.cmake b/scripts/target_post.cmake index 48da1e6..cdc0910 100644 --- a/scripts/target_post.cmake +++ b/scripts/target_post.cmake @@ -7,23 +7,18 @@ target_compile_features(${PLUGIN} PRIVATE cxx_std_14) -if(MSVC) - foreach(flag_var - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${flag_var} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - endif() - endforeach() -endif() - if(MSVC) target_compile_options(${PLUGIN} PRIVATE /W3) else() target_compile_options(${PLUGIN} PRIVATE - -Wall -Wextra -Wpedantic -Wreturn-type -Wconversion -Wno-c++11-narrowing + -Wall -Wextra -Wpedantic -Wreturn-type -Wconversion ) -endif() + + #GCC doesn't have Wno-c++11-narrowing + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(${PLUGIN} PRIVATE -Wno-c++11-narrowing) + endif() +endif() set_target_properties(${PLUGIN} PROPERTIES CXX_STANDARD 14 @@ -43,10 +38,8 @@ target_link_libraries( ${PLUGIN} PRIVATE FLUID_DECOMPOSITION - # FLUID_MANIP FLUID_SC_WRAPPER HISSTools_FFT - # FLUID_SC_COPYREPLYADDR ) target_include_directories( @@ -64,11 +57,7 @@ file(GLOB_RECURSE FLUID_SC_HEADERS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/includ target_sources( ${PLUGIN} PUBLIC ${FLUID_MANIPULATION_HEADERS} - ${FLUID_SC_HEADERS} - #bah. We need to know how big a ReplyAddress struct is, and so this nonsense: - "${SC_PATH}/common/SC_Reply.cpp" - "${SC_PATH}/external_libraries/boost/libs/system/src/error_code.cpp" - # $ + ${FLUID_SC_HEADERS} ) target_include_directories( diff --git a/src/FluidManipulation/CMakeLists.txt b/src/FluidManipulation/CMakeLists.txt index 3693881..cd88c0a 100644 --- a/src/FluidManipulation/CMakeLists.txt +++ b/src/FluidManipulation/CMakeLists.txt @@ -18,3 +18,7 @@ target_link_libraries( ) include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake) + +if(MSVC) + target_compile_options(${PLUGIN} PRIVATE /bigobj) +endif()