diff --git a/fdGain/fdGain.cpp b/fdGain/fdGain.cpp index 2802b85..fb2b219 100644 --- a/fdGain/fdGain.cpp +++ b/fdGain/fdGain.cpp @@ -76,7 +76,7 @@ private: input_signals[1]->set(const_cast(in(2)), in0(2)); output_signals[0]->set(out(0), out0(0)); - m_client->do_process(input_signals,output_signals,numsamples,2,1); + 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; diff --git a/fdSTFTPass/fdSTFTPass.cpp b/fdSTFTPass/fdSTFTPass.cpp index 6a5d2a1..a3a8460 100644 --- a/fdSTFTPass/fdSTFTPass.cpp +++ b/fdSTFTPass/fdSTFTPass.cpp @@ -5,24 +5,20 @@ #include "data/FluidTensor.hpp" #include "clients/rt/BaseSTFTClient.hpp" -//Using statements for fluidtensor -using fluid::FluidTensor; -using fluid::FluidTensorView; -using fluid::audio::BaseSTFTClient; - - static InterfaceTable *ft; +namespace fluid { + namespace stft{ -using audio_client = BaseSTFTClient; -using audio_signal_wrapper = audio_client::AudioSignal; -using scalar_signal_wrapper = audio_client::ScalarSignal; -using signal_wrapper = audio_client::Signal; class FDSTFTPass: public SCUnit { + using AudioSignalWrapper = audio::BaseSTFTClient::AudioSignal; + using SignalWrapper = audio::BaseSTFTClient::Signal; + +// using SignalPointer = std::unique_ptr; public: FDSTFTPass() - { + { //Order of args //Window size, Hop size, FFT Size @@ -32,80 +28,48 @@ public: const float fft_size = in0(3); //Oh NO! Heap allocation! Make client object - //This will do argument checking - m_client = new audio_client(window_size, hop_size, fft_size); - - //and we can post strings back about the argument checking - //Params get checked and adjusted during construction, we can pass on warning messages: - std::istringstream param_feedback(m_client->getFeedbackString()); - std::string message; - - while(std::getline(param_feedback, message, '\n')) - Print(message.c_str()); - + m_client = new audio::BaseSTFTClient(window_size,hop_size,fft_size); 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 - //out 1 => only audio (and only internal, used for OLA gain compensation) - input_signals[0] = new audio_signal_wrapper(); - output_signals[0] = new audio_signal_wrapper(); - output_signals[1] = new audio_signal_wrapper(); - - m_normalise = new float[bufferSize()]; - - -// set_calc_function(); + input_signals[0] = new AudioSignalWrapper(); + output_signals[0] = new AudioSignalWrapper(); + mCalcFunc = make_calc_function(); - Unit* unit = this; ClearUnitOutputs(unit,1); - } ~FDSTFTPass() { - delete[] m_normalise; delete input_signals[0]; - delete output_signals[0]; - delete output_signals[1]; - - delete m_client; + delete m_client; } private: - void next(int numsamples) { - //TODO: Remove const_cast code smell by making input_signal type for const const float* input = in(0); const float inscalar = in0(0); - float* output = out(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - output_signals[1]->set(m_normalise,0); - - m_client->do_process(input_signals,output_signals,numsamples,1,2); - - //We need to normalise *after* the overlap add, because of the way we do it - std::transform(output, output + numsamples, m_normalise, output, std::divides()); - + m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,1); } - audio_client* m_client; - signal_wrapper* input_signals[1]; - signal_wrapper* output_signals[2]; - float* m_normalise; + audio::BaseSTFTClient* m_client; + SignalWrapper* input_signals[1]; + SignalWrapper* output_signals[1]; }; +} +} -PluginLoad(BoringMixer2UGens) { +PluginLoad(FluidSTFTUGen) { ft = inTable; - registerUnit(ft, "FDSTFTPass"); + registerUnit(ft, "FDSTFTPass"); }