From 0fc7272c389ca07834e87511fe328211e3fa341c Mon Sep 17 00:00:00 2001 From: Owen Green Date: Mon, 4 Jan 2021 10:39:27 +0000 Subject: [PATCH 01/21] Remove unused index packs MSVC doesn't like them, and they're not longer needed --- include/wrapper/ArgsToClient.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/wrapper/ArgsToClient.hpp b/include/wrapper/ArgsToClient.hpp index bed811d..2538a5c 100644 --- a/include/wrapper/ArgsToClient.hpp +++ b/include/wrapper/ArgsToClient.hpp @@ -152,7 +152,7 @@ namespace client { getTag(p, dummy); } - template + template static void getTag(Packet& p, std::tuple&& t) { ForEach(t,[&p](auto& x){getTag(p,x);}); @@ -189,7 +189,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);}); From 8b37813b43450be83696d17e884c2231c289e336 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 6 Jan 2021 11:39:23 +0000 Subject: [PATCH 02/21] Fix windows build errors by sandboxing new SendReply dependency Deals with macro name clashes, and also better enacapsulates unfortunate dep on SC internals, as well as improving build times --- CMakeLists.txt | 51 +++++++++++++++++++++++++++- include/wrapper/CopyReplyAddress.cpp | 51 ++++++++++++++++++++++++++++ include/wrapper/CopyReplyAddress.hpp | 43 ++++------------------- include/wrapper/Messaging.hpp | 7 ++-- include/wrapper/NonRealtime.hpp | 9 +++-- scripts/target_post.cmake | 27 +++++---------- 6 files changed, 123 insertions(+), 65 deletions(-) create mode 100644 include/wrapper/CopyReplyAddress.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index eb471dc..7be5fea 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,22 @@ 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 +102,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 +145,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 +155,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/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/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 254f19b..7eaca7a 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 @@ -143,7 +142,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: 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( From aba27956444de3d62e3bcfcca32993361a103944 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 6 Jan 2021 11:40:02 +0000 Subject: [PATCH 03/21] Fix Windows FluidManipulation object size build error --- src/FluidManipulation/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) 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() From 3e31a4dcb446bcb98ab7271157e883a28b8ad25d Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 6 Jan 2021 13:58:18 +0000 Subject: [PATCH 04/21] Fix arcana that made MSVC / GCC sad GCC doesn't like specializations of inner classes declared inline, or using a shorthand type alias for static template member variable initialisation. MSVC doesn't like using a private type alias --- include/wrapper/DeriveBaseClass.hpp | 33 +++++++++------ include/wrapper/NonRealtime.hpp | 66 ++++++++++++----------------- 2 files changed, 48 insertions(+), 51 deletions(-) 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/NonRealtime.hpp b/include/wrapper/NonRealtime.hpp index 7eaca7a..90b75a2 100644 --- a/include/wrapper/NonRealtime.hpp +++ b/include/wrapper/NonRealtime.hpp @@ -44,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) @@ -201,27 +204,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() { @@ -231,7 +227,7 @@ namespace impl { bool stage2(World*) { - CancelCheck()(NRTCommand::mID); + cancelCheck(IsRTQueryModel_t(),NRTCommand::mID); remove(NRTCommand::mID); NRTCommand::sendReply(name(), true); return true; @@ -759,7 +755,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; @@ -784,8 +780,8 @@ namespace impl { } private: - bool mPreviousTrigger{0}; - bool mTrigger{0}; + bool mPreviousTrigger{false}; + bool mTrigger{false}; Result mResult; impl::FloatControlsIter mControlsIterator; index mID; @@ -941,25 +937,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{}; } } From 1fc8b2a3da2ea12a58809a915f25f8fee75f13f8 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 6 Jan 2021 13:59:08 +0000 Subject: [PATCH 05/21] Fix various warnings from MSVC / GCC --- include/wrapper/ArgsToClient.hpp | 15 +++++++-------- include/wrapper/RealTimeBase.hpp | 13 ++++--------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/include/wrapper/ArgsToClient.hpp b/include/wrapper/ArgsToClient.hpp index 2538a5c..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'); } @@ -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) 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) From 4a6959c1042c92d7aac962300f48e01ce04e1774 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Sat, 9 Jan 2021 12:49:36 +0000 Subject: [PATCH 06/21] Add alias UGen classes for FluidBuf*Trigger to enable use in SynthDefs --- release-packaging/Classes/FluidBufAmpGate.sc | 1 + release-packaging/Classes/FluidBufAmpSlice.sc | 1 + release-packaging/Classes/FluidBufAudioTransport.sc | 1 + release-packaging/Classes/FluidBufCompose.sc | 1 + release-packaging/Classes/FluidBufFlatten.sc | 1 + release-packaging/Classes/FluidBufHPSS.sc | 1 + release-packaging/Classes/FluidBufLoudness.sc | 1 + release-packaging/Classes/FluidBufMFCC.sc | 1 + release-packaging/Classes/FluidBufMelBands.sc | 1 + release-packaging/Classes/FluidBufNMF.sc | 1 + release-packaging/Classes/FluidBufNMFCross.sc | 1 + release-packaging/Classes/FluidBufNNDSVD.sc | 1 + release-packaging/Classes/FluidBufNoveltySlice.sc | 1 + release-packaging/Classes/FluidBufOnsetSlice.sc | 1 + release-packaging/Classes/FluidBufPitch.sc | 1 + release-packaging/Classes/FluidBufScale.sc | 1 + release-packaging/Classes/FluidBufSines.sc | 1 + release-packaging/Classes/FluidBufSpectralShape.sc | 1 + release-packaging/Classes/FluidBufStats.sc | 1 + release-packaging/Classes/FluidBufThreadDemo.sc | 1 + release-packaging/Classes/FluidBufThresh.sc | 1 + release-packaging/Classes/FluidBufTransientSlice.sc | 1 + release-packaging/Classes/FluidBufTransients.sc | 1 + 23 files changed, 23 insertions(+) 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 {} From e4fb058bdefcc8a66c20ffc928056871fc664ebd Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 12 Jan 2021 11:31:49 +0000 Subject: [PATCH 07/21] Add FluidDataSetWrTrigger --- release-packaging/Classes/FluidDataSetWr.sc | 2 ++ 1 file changed, 2 insertions(+) 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 {} From 4da973c25b53cf990f65aa8e678ff9d5eb18128f Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 12 Jan 2021 11:32:44 +0000 Subject: [PATCH 08/21] Amend server side RT query Unit name So that it can be a legal sclang class name --- include/wrapper/NonRealtime.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/wrapper/NonRealtime.hpp b/include/wrapper/NonRealtime.hpp index 254f19b..2695cd2 100644 --- a/include/wrapper/NonRealtime.hpp +++ b/include/wrapper/NonRealtime.hpp @@ -807,7 +807,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(); } From 4c277baf6045278fedf5de15138606b7e3690c70 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 12 Jan 2021 11:33:28 +0000 Subject: [PATCH 09/21] Add explicit *Query UGen classes for RT model objects Enables use in SynthDefs --- release-packaging/Classes/FluidKDTree.sc | 6 ++++-- release-packaging/Classes/FluidKMeans.sc | 6 ++++-- release-packaging/Classes/FluidKNNClassifier.sc | 6 ++++-- release-packaging/Classes/FluidKNNRegressor.sc | 6 ++++-- release-packaging/Classes/FluidMLP.sc | 9 +++++---- release-packaging/Classes/FluidNormalize.sc | 6 ++++-- release-packaging/Classes/FluidPCA.sc | 5 +++-- release-packaging/Classes/FluidRobustScale.sc | 5 +++-- release-packaging/Classes/FluidServerObject.sc | 7 +++++++ release-packaging/Classes/FluidStandardize.sc | 5 +++-- release-packaging/Classes/FluidUMAP.sc | 6 ++++-- 11 files changed, 45 insertions(+), 22 deletions(-) diff --git a/release-packaging/Classes/FluidKDTree.sc b/release-packaging/Classes/FluidKDTree.sc index c3fe972..2d22181 100644 --- a/release-packaging/Classes/FluidKDTree.sc +++ b/release-packaging/Classes/FluidKDTree.sc @@ -51,10 +51,12 @@ FluidKDTree : FluidRealTimeModel 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..1a76d3b 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -308,3 +308,10 @@ FluidRealTimeModel : FluidModelObject ^super.new(server,params++[-1,-1]); } } + +FluidRTQuery : FluidProxyUgen +{ + *kr{ |trig, obj, args| + ^super.kr(this.name,trig, obj.asUGenInput, *args) + } +} diff --git a/release-packaging/Classes/FluidStandardize.sc b/release-packaging/Classes/FluidStandardize.sc index 360fd07..dca033c 100644 --- a/release-packaging/Classes/FluidStandardize.sc +++ b/release-packaging/Classes/FluidStandardize.sc @@ -52,7 +52,8 @@ FluidStandardize : FluidRealTimeModel { invert = invert ? this.invert; this.invert_(invert); - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); + ^FluidStandardizeQuery.kr(K2A.ar(trig),this, this.invert, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer)); } } + +FluidStandardizeQuery : FluidRTQuery {} diff --git a/release-packaging/Classes/FluidUMAP.sc b/release-packaging/Classes/FluidUMAP.sc index 9a2835d..5b183f9 100644 --- a/release-packaging/Classes/FluidUMAP.sc +++ b/release-packaging/Classes/FluidUMAP.sc @@ -68,8 +68,8 @@ FluidUMAP : FluidRealTimeModel { numDimensions = numDimensions ? this.numDimensions; this.numDimensions_(numDimensions); - ^FluidProxyUgen.kr(this.class.name.asString++'/query', K2A.ar(trig), - id, + ^FluidUMAPQuery.kr(K2A.ar(trig), + this, this.numDimensions, this.numNeighbours, this.minDist, @@ -83,3 +83,5 @@ FluidUMAP : FluidRealTimeModel { cols {|action|} size { |action|} } + +FluidUMAPQuery : FluidRTQuery {} From 0d5f0246d56e56b692d393ed30362007398a8b14 Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Tue, 12 Jan 2021 17:28:28 +0000 Subject: [PATCH 10/21] fix typo help ampslice --- release-packaging/HelpSource/Classes/FluidBufAmpSlice.schelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-packaging/HelpSource/Classes/FluidBufAmpSlice.schelp b/release-packaging/HelpSource/Classes/FluidBufAmpSlice.schelp index 68226c3..0dcca74 100644 --- a/release-packaging/HelpSource/Classes/FluidBufAmpSlice.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufAmpSlice.schelp @@ -117,7 +117,7 @@ FluidBufAmpSlice.process(s,b,indices:c,fastRampUp: 10,fastRampDown: 2205,slowRam c.query c.getn(0,c.numFrames,{|item|item.postln;}) -//loops over a splice with the MouseX, taking the respective onset and offset of a given slice +//loops over a splice with the MouseX ( { BufRd.ar(1, b, From 0521c25bf331f731253e38222a8cc9fd2e82e879 Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Wed, 13 Jan 2021 16:00:58 +0000 Subject: [PATCH 11/21] typo --- release-packaging/HelpSource/Classes/FluidBufOnsetSlice.schelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-packaging/HelpSource/Classes/FluidBufOnsetSlice.schelp b/release-packaging/HelpSource/Classes/FluidBufOnsetSlice.schelp index 9533d90..e3228f8 100644 --- a/release-packaging/HelpSource/Classes/FluidBufOnsetSlice.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufOnsetSlice.schelp @@ -63,7 +63,7 @@ ARGUMENT:: filterSize The size of a smoothing filter that is applied on the novelty curve. A larger filter filter size allows for cleaner cuts on very sharp changes. ARGUMENT:: frameDelta - For certain metrics (HFC, SpectralFlux, MKL, Cosine), the distance does not have to be computed between consecutive frames. By default (0) it is, otherwise this sets the distane between the comparison window in samples. + For certain metrics (HFC, SpectralFlux, MKL, Cosine), the distance does not have to be computed between consecutive frames. By default (0) it is, otherwise this sets the distance between the comparison window in samples. ARGUMENT:: windowSize The window size. As spectral differencing relies on spectral frames, we need to decide what precision we give it spectrally and temporally, in line with Gabor Uncertainty principles. http://www.subsurfwiki.org/wiki/Gabor_uncertainty From c21e835e71b6cd2248af07076c8338a81a6db144 Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Sun, 17 Jan 2021 15:02:59 +0000 Subject: [PATCH 12/21] removed doublewait in bufcompose --- release-packaging/HelpSource/Classes/FluidBufCompose.schelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release-packaging/HelpSource/Classes/FluidBufCompose.schelp b/release-packaging/HelpSource/Classes/FluidBufCompose.schelp index e28bb58..d9c2f2c 100644 --- a/release-packaging/HelpSource/Classes/FluidBufCompose.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufCompose.schelp @@ -83,7 +83,7 @@ Routine{ ( Routine{ d.free; d = Buffer.new(s); - FluidBufCompose.process(s, source: b, numFrames: 9000, gain: 0.5, destination: d).wait; + FluidBufCompose.process(s, source: b, numFrames: 9000, gain: 0.5, destination: d); FluidBufCompose.process(s, source: c, startFrame:30000, numFrames:44100, numChans:1, gain:0.9, destination: d, destGain: 1.0).wait; d.query; d.play; @@ -93,7 +93,7 @@ Routine{ ( Routine{ d.free; d = Buffer.new(s); - FluidBufCompose.process(s, source: b, startFrame: 441000, numChans: 2, gain: 0.6, destination: d).wait; + FluidBufCompose.process(s, source: b, startFrame: 441000, numChans: 2, gain: 0.6, destination: d); FluidBufCompose.process(s, source: c, numFrames: 78000, startChan: 1, numChans: 2, gain: 0.5, destStartFrame: 22050, destination: d, destGain: 1.0).wait; d.query; d.play; @@ -103,7 +103,7 @@ Routine{ ( Routine{ d.free; d = Buffer.new(s); - FluidBufCompose.process(s, source: b, numFrames: 44100, numChans: 1, destStartChan: 1, destination: d).wait; + FluidBufCompose.process(s, source: b, numFrames: 44100, numChans: 1, destStartChan: 1, destination: d); FluidBufCompose.process(s, source: c, numFrames:44100, numChans:1, destination: d, destGain: 1.0).wait; d.query; d.play; From 964dc4984ac67dac655af39e2b01939c4c3106ac Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Tue, 19 Jan 2021 09:01:36 +0000 Subject: [PATCH 13/21] typos corrections pre-release --- release-packaging/HelpSource/Classes/FluidBufNMF.schelp | 2 +- .../HelpSource/Classes/FluidBufThreadDemo.schelp | 2 +- .../HelpSource/Classes/FluidDataSetQuery.schelp | 2 +- release-packaging/HelpSource/Classes/FluidKDTree.schelp | 8 +++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/release-packaging/HelpSource/Classes/FluidBufNMF.schelp b/release-packaging/HelpSource/Classes/FluidBufNMF.schelp index 8d27b7d..cb00040 100644 --- a/release-packaging/HelpSource/Classes/FluidBufNMF.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufNMF.schelp @@ -175,7 +175,7 @@ y = Buffer.new(s); ~fft_size = 1024; ~frame_size = 512; ~hop_size = 256; -~which_component = 1; +~which_component = 4; ) // matrix factorisation, requesting everything - wait for the computation time to appear. diff --git a/release-packaging/HelpSource/Classes/FluidBufThreadDemo.schelp b/release-packaging/HelpSource/Classes/FluidBufThreadDemo.schelp index d8e6f22..da2bcda 100644 --- a/release-packaging/HelpSource/Classes/FluidBufThreadDemo.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufThreadDemo.schelp @@ -63,6 +63,6 @@ FluidBufThreadDemo.process(s, b, 1000, action:{|x|x.get(0,{|y|y.postln});}); c = FluidBufThreadDemo.process(s, b, 100000, action: {|x|x.get(0,{|y|y.postln});}); c.cancel; -// if a simple call to the UGen is used, the progress can be monitored. The usual cmd. will cancel the job by freeing the synth. +// if a simple call to the UGen is used, the progress can be monitored. The usual cmd-period will cancel the job by freeing the synth. {c = FluidBufThreadDemo.kr(b,10000, Done.freeSelf); Poll.kr(Impulse.kr(2),c);}.scope; :: diff --git a/release-packaging/HelpSource/Classes/FluidDataSetQuery.schelp b/release-packaging/HelpSource/Classes/FluidDataSetQuery.schelp index 80f0336..e41bc26 100644 --- a/release-packaging/HelpSource/Classes/FluidDataSetQuery.schelp +++ b/release-packaging/HelpSource/Classes/FluidDataSetQuery.schelp @@ -177,7 +177,7 @@ code:: ~dsC.print // all the sophisticated conditions applicable to 'transform' can be done on the first dataset too. Selected columns of the first source are appended to matching items in the second source. -~joiner.filter(1,">",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;}); }); ) :: From 7a0fdecc98325d79b5d95e24432efaabccc8458f Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 19 Jan 2021 11:08:16 +0000 Subject: [PATCH 14/21] Fix args passing for RT query UGens --- release-packaging/Classes/FluidServerObject.sc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index 1a76d3b..902c441 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -311,7 +311,7 @@ FluidRealTimeModel : FluidModelObject FluidRTQuery : FluidProxyUgen { - *kr{ |trig, obj, args| - ^super.kr(this.name,trig, obj.asUGenInput, *args) + *kr{ |trig,obj...args| + ^super.kr(this.name,trig,obj.asUGenInput, *args) } } From f94898816775551ac36c96b99b50a273ff00ed66 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 19 Jan 2021 11:09:40 +0000 Subject: [PATCH 15/21] Remove spurious postln in FluidKDTree.kr --- release-packaging/Classes/FluidKDTree.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-packaging/Classes/FluidKDTree.sc b/release-packaging/Classes/FluidKDTree.sc index 2d22181..57ef743 100644 --- a/release-packaging/Classes/FluidKDTree.sc +++ b/release-packaging/Classes/FluidKDTree.sc @@ -50,7 +50,7 @@ FluidKDTree : FluidRealTimeModel this.numNeighbours_(numNeighbours); lookupDataSet = lookupDataSet ? -1; this.lookupDataSet_(lookupDataSet); - this.lookupDataSet.asUGenInput.postln; + ^FluidKDTreeQuery.kr(K2A.ar(trig), this, this.numNeighbours, this.radius, this.lookupDataSet.asUGenInput, this.prEncodeBuffer(inputBuffer), From b24701daa1f55b2427bb445f83d39127577bc666 Mon Sep 17 00:00:00 2001 From: Pierre Alexandre Tremblay Date: Tue, 19 Jan 2021 16:21:47 +0000 Subject: [PATCH 16/21] pre release typos and new examples --- .../4-regressor-example.scd | 15 +++++++++++++++ .../HelpSource/Classes/FluidAmpGate.schelp | 18 +++++++++--------- .../HelpSource/Classes/FluidBufAmpGate.schelp | 18 +++++++++--------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/release-packaging/Examples/dataset/1-learning examples/4-regressor-example.scd b/release-packaging/Examples/dataset/1-learning examples/4-regressor-example.scd index 2d6b92d..e7f2b38 100644 --- a/release-packaging/Examples/dataset/1-learning examples/4-regressor-example.scd +++ b/release-packaging/Examples/dataset/1-learning examples/4-regressor-example.scd @@ -57,3 +57,18 @@ Routine{ // look at the interpolated values ~mappingresult.plot + +// change the number of neighbours to regress on +~knn.numNeighbours_(5) +~knn.fit(~simpleInput, ~simpleOutput, action:{"fitting done".postln}) + +// instead of doing the mapping per point, let's do a dataset of 512 points +~target = FluidDataSet(s) +~target.load(Dictionary.newFrom([\cols, 1, \data, Dictionary.newFrom(512.collect{|i|[i.asString, [i.asFloat * 61]]}.flatten)])) +~regressed = FluidDataSet(s) +~knn.predict(~target, ~regressed, action:{"prediction done".postln}) + +//dump the regressed values +~outputArray = Array.newClear(512); +~regressed.dump{|x| x["data"].keysValuesDo{|key,val|~outputArray[key.asInteger] = val[0]}} +~outputArray.plot \ No newline at end of file diff --git a/release-packaging/HelpSource/Classes/FluidAmpGate.schelp b/release-packaging/HelpSource/Classes/FluidAmpGate.schelp index 8fdee5f..2f61f63 100644 --- a/release-packaging/HelpSource/Classes/FluidAmpGate.schelp +++ b/release-packaging/HelpSource/Classes/FluidAmpGate.schelp @@ -60,63 +60,63 @@ RETURNS:: EXAMPLES:: code:: -//basic tests: absThresh sanity +//basic tests: threshold sanity ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12); [source, env] }.plot(0.1); ) -//basic tests: absThresh hysteresis +//basic tests: threshold hysteresis ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -16); [source, env] }.plot(0.1); ) -//basic tests: absThresh min slice +//basic tests: threshold min slice ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minSliceLength:441); [source, env] }.plot(0.1); ) -//basic tests: absThresh min silence +//basic tests: threshold min silence ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minSilenceLength:441); [source, env] }.plot(0.1); ) -//mid tests: absThresh time hysteresis on +//mid tests: threshold time hysteresis on ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minLengthAbove:441); [DelayN.ar(source,0.1,441/44100), env] }.plot(0.1); ) -//mid tests: absThresh time hysteresis off +//mid tests: threshold time hysteresis off ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minLengthBelow:441); [DelayN.ar(source,0.1,441/44100), env] }.plot(0.1); ) -//mid tests: absThresh with lookBack +//mid tests: threshold with lookBack ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookBack:441); [DelayN.ar(source,0.1,441/44100), env] }.plot(0.1); ) -//mid tests: absThresh with lookAhead +//mid tests: threshold with lookAhead ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookAhead:441); [DelayN.ar(source,0.1,441/44100), env] }.plot(0.1); ) -//mid tests: absThresh with asymetrical lookBack and lookAhead +//mid tests: threshold with asymetrical lookBack and lookAhead ( {var env, source = SinOsc.ar(320,0,LFTri.ar(10).abs); env = FluidAmpGate.ar(source, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookBack:221, lookAhead:441); diff --git a/release-packaging/HelpSource/Classes/FluidBufAmpGate.schelp b/release-packaging/HelpSource/Classes/FluidBufAmpGate.schelp index b2add49..c654ee6 100644 --- a/release-packaging/HelpSource/Classes/FluidBufAmpGate.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufAmpGate.schelp @@ -91,47 +91,47 @@ code:: ) b.play b.plot -//basic tests: absThresh sanity +//basic tests: threshold sanity FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//basic tests: absThresh hysteresis +//basic tests: threshold hysteresis FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -16) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//basic tests: absThresh min slice +//basic tests: threshold min slice FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minSliceLength:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//basic tests: absThresh min silence +//basic tests: threshold min silence FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minSilenceLength:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//mid tests: absThresh time hysteresis on +//mid tests: threshold time hysteresis on FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minLengthAbove:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//mid tests: absThresh time hysteresis off +//mid tests: threshold time hysteresis off FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, minLengthBelow:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//mid tests: absThresh with lookBack +//mid tests: threshold with lookBack FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookBack:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//mid tests: absThresh with lookAhead +//mid tests: threshold with lookAhead FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookAhead:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) -//mid tests: absThresh with asymetrical lookBack and lookAhead +//mid tests: threshold with asymetrical lookBack and lookAhead FluidBufAmpGate.process(s, b, indices:c, rampUp:5, rampDown:25, onThreshold:-12, offThreshold: -12, lookBack:221, lookAhead:441) c.query c.getn(0,c.numFrames*2,{|item|item.postln;}) From 605e16cadc47f331291c9ca2bdaab502c084e1d8 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Fri, 22 Jan 2021 09:29:34 +0000 Subject: [PATCH 17/21] Fix setting of CMAKE_OSX_DEPLOYMENT_TAGRET --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7be5fea..8168920 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,9 +22,9 @@ 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 "") endif() ################################################################################ From 8aa4184bcd1db2f51cb2f5fb4e6c81b5ecd86037 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 28 Jan 2021 09:58:19 +0000 Subject: [PATCH 18/21] Fix standard library selection on OS X For test program compile during configure stage when targeting 10.8 from >=10.15 --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8168920..0391687 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,8 @@ if (APPLE) set(CMAKE_XCODE_GENERATE_SCHEME ON) 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() ################################################################################ From b6980903d9ae3afaedbbcca4093dfca1817cd0a6 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 17 Feb 2021 01:47:18 +0000 Subject: [PATCH 19/21] Run parameter constraints first before NRT client is created. Resolves #80 --- include/wrapper/NonRealtime.hpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/include/wrapper/NonRealtime.hpp b/include/wrapper/NonRealtime.hpp index 2d2787c..2e19d7a 100644 --- a/include/wrapper/NonRealtime.hpp +++ b/include/wrapper/NonRealtime.hpp @@ -175,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. From 00b8fb4a4f04449413f8d380f3cfc8cabcf08c54 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 2 Mar 2021 11:44:18 +0000 Subject: [PATCH 20/21] Workaround ServerBoot firing before server is truly ready, for Server.internal cache flush resolves #81 --- release-packaging/Classes/FluidServerObject.sc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index 902c441..cbaeeac 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -6,16 +6,21 @@ FluidServerObject var Date: Mon, 15 Mar 2021 20:10:10 +0000 Subject: [PATCH 21/21] FluidOSCPatternInversion: Coerce message to symbol https://discourse.flucoma.org/t/matchoscaddresspattern/836 --- release-packaging/Classes/FluidServerObject.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index cbaeeac..06ce7c1 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -194,7 +194,7 @@ FluidBufProcessor : FluidServerObject FluidOSCPatternInversion : OSCMessageDispatcher { value {|msg, time, addr, recvPort| - var msgpath = msg[0]; + var msgpath = msg[0].asSymbol; active.keysValuesDo({|key, func| if(msgpath.matchOSCAddressPattern(key), {func.value(msg, time, addr, recvPort);}); })