Pierre Alexandre Tremblay 7 years ago
commit 926f7c943f

@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.3)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11) 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_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++")
SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7" CACHE STRING "Minimum OS X deployment version") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7" CACHE STRING "Minimum OS X deployment version")

@ -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; *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) ^this.multiNew('audio', in.asAudioRateInput(this), order, blocksize, padding, skew,threshFwd ,threshBack, winSize, debounce)
} }

@ -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(-mfpmath=sse HAS_CXX_FPMATH_SSE)
CHECK_CXX_COMPILER_FLAG(-mavx HAS_AVX) CHECK_CXX_COMPILER_FLAG(-mavx HAS_AVX)
CHECK_CXX_COMPILER_FLAG(-mavx2 HAS_AVX2) CHECK_CXX_COMPILER_FLAG(-mavx2 HAS_AVX2)
target_compile_definitions( # target_compile_features(
${PLUGIN} # ${PLUGIN}
PRIVATE # PUBLIC
"$<$<NOT:$<CONFIG:DEBUG>>:-O3" # "$<$<NOT:$<CONFIG:DEBUG>>: -mavx -msse -msse2 -msse3 -msse4>"
"-mavx" #
) # )
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
# endif() # endif()

@ -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 Unions Horizon 2020 research and innovation programme (grant agreement No 725899) // A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Unions Horizon 2020 research and innovation programme (grant agreement No 725899)
#include "SC_PlugIn.hpp" #include "SC_PlugIn.hpp"
@ -7,98 +6,55 @@
#include "clients/common/FluidParams.hpp" #include "clients/common/FluidParams.hpp"
//Using statements for fluidtensor
using fluid::FluidTensor;
using fluid::FluidTensorView;
using fluid::audio::GainAudioClient;
static InterfaceTable *ft; static InterfaceTable *ft;
using client_type = GainAudioClient<double, float>;
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 class FDGain: public SCUnit
{ {
using AudioClient = fluid::audio::GainAudioClient<double, float>;
using ClientPointer = std::unique_ptr<AudioClient>;
using SignalWrapper = AudioClient::Signal;
using AudioSignal= AudioClient::AudioSignal;
using ControlSignal = AudioClient::ScalarSignal;
using SignalPointer = std::unique_ptr<SignalWrapper>;
template <size_t N>
using SignalArray = std::array<SignalPointer, N>;
public: public:
FDGain() FDGain()
{ {
//Same calc function, all day, every day mClient = ClientPointer(new AudioClient(65536));
mClient->set_host_buffer_size(bufferSize());
//Get the chunk size, as we need that set buffers mClient->reset();
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<FDGain,&FDGain::next>();
mCalcFunc = make_calc_function<FDGain,&FDGain::next>();
//
Unit* unit = this;
ClearUnitOutputs(unit,1);
}
~FDGain() inputSignals[0] = SignalPointer(new AudioSignal());
{ outputSignals[0] = SignalPointer(new AudioSignal());
delete input_signals[0];
delete input_signals[1];
delete output_signals[0];
delete m_client;
}
private: if(isAudioRateIn(2))
inputSignals[1] = SignalPointer(new AudioSignal());
else
inputSignals[1] = SignalPointer(new ControlSignal());
mCalcFunc = make_calc_function<FDGain,&FDGain::next>();
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<float*>(in(0)), in0(0));
inputSignals[1]->set(const_cast<float*>(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) ClientPointer mClient;
{ SignalArray<2> inputSignals;
SignalArray<1> outputSignals;
//TODO: Remove const_cast code smell by making input_signal type for const
input_signals[0]->set(const_cast<float*>(in(0)), in0(0));
input_signals[1]->set(const_cast<float*>(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];
}; };
PluginLoad(BoringMixer2UGens) { PluginLoad(BoringMixer2UGens) {
ft = inTable; ft = inTable;
registerUnit<FDGain>(ft, "FluidGain"); registerUnit<FDGain>(ft, "FluidGain");
} }

Loading…
Cancel
Save