diff --git a/include/clients/rt/FluidDataSetWr.hpp b/include/clients/rt/FluidDataSetWr.hpp new file mode 100644 index 0000000..e700a4f --- /dev/null +++ b/include/clients/rt/FluidDataSetWr.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fluid { +namespace client { + +class DataSetWriterClient : public FluidBaseClient, OfflineIn, OfflineOut +{ +public: + FLUID_DECLARE_PARAMS(StringParam("label", "Label"), + BufferParam("buf", "Data Buffer"), + DataSetClientRef::makeParam("dataSet", "DataSet Name")); + + DataSetWriterClient(ParamSetViewType& p) : mParams(p) {} + + template + Result process(FluidContext&) + { + auto& idx = get<0>(); + auto buf = get<1>(); + auto dataset = get<2>().get(); + if (auto datasetPtr = dataset.lock()) + return datasetPtr->addPoint(idx, buf); + else + return {Result::Status::kError, "No dataset"}; + } +}; + +using NRTThreadedDataSetWriter = + NRTThreadingAdaptor>; +} // namespace client +} // namespace fluid diff --git a/release-packaging/Classes/FluidDataSetWr.sc b/release-packaging/Classes/FluidDataSetWr.sc new file mode 100644 index 0000000..bb239fa --- /dev/null +++ b/release-packaging/Classes/FluidDataSetWr.sc @@ -0,0 +1,12 @@ +FluidDataSetWr : UGen { + + *new1 { |rate,label,buf,dataset,trig,blocking| + buf ?? {"No input buffer provided".error}; + ^super.new1(rate,*(FluidManipulationClient.prServerString(label.asSymbol) + ++buf.asUGenInput++FluidDataSet.asUGenInput(dataset.asSymbol)++trig++blocking)); + } + + *kr { |index, buf, dataset,trig=1| + ^this.new1(\control,index,buf,dataset,trig,1) + } +} diff --git a/src/FluidManipulation/FluidManipulation.cpp b/src/FluidManipulation/FluidManipulation.cpp index 15f3448..4df8b6f 100644 --- a/src/FluidManipulation/FluidManipulation.cpp +++ b/src/FluidManipulation/FluidManipulation.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include static InterfaceTable *ft; @@ -34,4 +35,5 @@ PluginLoad(FluidSTFTUGen) makeSCWrapper("FluidMDS",ft); makeSCWrapper("FluidAudioTransport",ft); makeSCWrapper("FluidBufAudioTransport",ft); + makeSCWrapper("FluidDataSetWr", ft); }