From 0ae62c450306dc59a88d434a64e7f997671fed9f Mon Sep 17 00:00:00 2001 From: Owen Green Date: Sun, 16 Sep 2018 11:40:21 +0100 Subject: [PATCH] Tidy up FluidGain --- src/FluidGain/FluidGain.cpp | 122 ++++++++++++------------------------ 1 file changed, 39 insertions(+), 83 deletions(-) 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"); } - - - -