diff --git a/CMakeLists.txt b/CMakeLists.txt index 1639f77..9bbe619 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.3) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -mavx -msse -msse2 -msse3 -msse4") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++") SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7" CACHE STRING "Minimum OS X deployment version") diff --git a/release-packaging/Classes/FluidSliceTransients.sc b/release-packaging/Classes/FluidTransientSlice.sc similarity index 89% rename from release-packaging/Classes/FluidSliceTransients.sc rename to release-packaging/Classes/FluidTransientSlice.sc index 4861870..39aca04 100644 --- a/release-packaging/Classes/FluidSliceTransients.sc +++ b/release-packaging/Classes/FluidTransientSlice.sc @@ -1,4 +1,4 @@ -FluidSliceTransients : UGen { +FluidTransientSlice : UGen { *ar { arg in = 0, order = 20, blocksize = 256, padding = 128, skew = 0.0, threshFwd = 3.0, threshBack = 1.1, winSize=14, debounce=25; ^this.multiNew('audio', in.asAudioRateInput(this), order, blocksize, padding, skew,threshFwd ,threshBack, winSize, debounce) } diff --git a/scripts/target_post.cmake b/scripts/target_post.cmake index 5d727c2..c644d70 100644 --- a/scripts/target_post.cmake +++ b/scripts/target_post.cmake @@ -28,12 +28,12 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) CHECK_CXX_COMPILER_FLAG(-mfpmath=sse HAS_CXX_FPMATH_SSE) CHECK_CXX_COMPILER_FLAG(-mavx HAS_AVX) CHECK_CXX_COMPILER_FLAG(-mavx2 HAS_AVX2) - target_compile_definitions( - ${PLUGIN} - PRIVATE - "$<$>:-O3" - "-mavx" - ) + # target_compile_features( + # ${PLUGIN} + # PUBLIC + # "$<$>: -mavx -msse -msse2 -msse3 -msse4>" + # + # ) # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") # endif() diff --git a/src/FluidGain/FluidGain.cpp b/src/FluidGain/FluidGain.cpp index f74506b..5e4d763 100644 --- a/src/FluidGain/FluidGain.cpp +++ b/src/FluidGain/FluidGain.cpp @@ -1,4 +1,3 @@ -// FD_BufNMF, an NRT buffer NMF Processor // A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 725899) #include "SC_PlugIn.hpp" @@ -7,98 +6,55 @@ #include "clients/common/FluidParams.hpp" -//Using statements for fluidtensor -using fluid::FluidTensor; -using fluid::FluidTensorView; -using fluid::audio::GainAudioClient; - - static InterfaceTable *ft; -using client_type = GainAudioClient; -using signal_type = client_type::signal_type; -using audio_signal= client_type::audio_signal; -using scalar_signal = client_type::scalar_signal; - class FDGain: public SCUnit { + using AudioClient = fluid::audio::GainAudioClient; + using ClientPointer = std::unique_ptr; + using SignalWrapper = AudioClient::Signal; + using AudioSignal= AudioClient::AudioSignal; + using ControlSignal = AudioClient::ScalarSignal; + using SignalPointer = std::unique_ptr; + template + using SignalArray = std::array; public: - FDGain() - { - //Same calc function, all day, every day - - //Get the chunk size, as we need that set buffers - const float chunk_size = in0(1); - - //Oh NO! Heap allocation! Make client object -// if(chunk_size) - m_client = new client_type(65536); -// else -// m_client = new client_type(1024,1024); - - fluid::parameter::lookupParam("winsize", m_client->getParams()).setLong(in0(1)); - fluid::parameter::lookupParam("hopsize", m_client->getParams()).setLong(in0(1)); - fluid::parameter::lookupParam("gain", m_client->getParams()).setFloat(1); - - m_client->set_host_buffer_size(bufferSize()); - m_client->reset(); - - //Work out what signals we need. For now keep it simple: - //in 0 => only audio - //out 0 => only audio - //in 1 => a or k - input_signals[0] = new audio_signal(); - output_signals[0] = new audio_signal(); - - if(isAudioRateIn(2)) - input_signals[1] = new audio_signal(); - else - input_signals[1] = new scalar_signal(); - - -// set_calc_function(); - mCalcFunc = make_calc_function(); - -// - Unit* unit = this; - ClearUnitOutputs(unit,1); - - } + FDGain() + { + mClient = ClientPointer(new AudioClient(65536)); + mClient->set_host_buffer_size(bufferSize()); + mClient->reset(); - ~FDGain() - { - delete input_signals[0]; - delete input_signals[1]; - delete output_signals[0]; - delete m_client; - } + inputSignals[0] = SignalPointer(new AudioSignal()); + outputSignals[0] = SignalPointer(new AudioSignal()); -private: - - + if(isAudioRateIn(2)) + inputSignals[1] = SignalPointer(new AudioSignal()); + else + inputSignals[1] = SignalPointer(new ControlSignal()); + + mCalcFunc = make_calc_function(); + Unit* unit = this; + ClearUnitOutputs(unit,1); + } + ~FDGain() {} +private: + void next(int numsamples) + { + //TODO: Remove const_cast code smell by making input_signal type for const + inputSignals[0]->set(const_cast(in(0)), in0(0)); + inputSignals[1]->set(const_cast(in(2)), in0(2)); + outputSignals[0]->set(out(0), out0(0)); + mClient->do_process(inputSignals.begin(),inputSignals.end(),outputSignals.begin(),outputSignals.end(),numsamples,2,1); + } - void next(int numsamples) - { - - //TODO: Remove const_cast code smell by making input_signal type for const - input_signals[0]->set(const_cast(in(0)), in0(0)); - input_signals[1]->set(const_cast(in(2)), in0(2)); - output_signals[0]->set(out(0), out0(0)); - - m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals),std::end(output_signals),numsamples,2,1); - } - - client_type* m_client; - signal_type* input_signals[2]; - signal_type* output_signals[1]; + ClientPointer mClient; + SignalArray<2> inputSignals; + SignalArray<1> outputSignals; }; PluginLoad(BoringMixer2UGens) { - ft = inTable; - registerUnit(ft, "FluidGain"); + ft = inTable; + registerUnit(ft, "FluidGain"); } - - - -