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 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")

@ -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)
}

@ -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
"$<$<NOT:$<CONFIG:DEBUG>>:-O3"
"-mavx"
)
# target_compile_features(
# ${PLUGIN}
# PUBLIC
# "$<$<NOT:$<CONFIG:DEBUG>>: -mavx -msse -msse2 -msse3 -msse4>"
#
# )
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
# 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)
#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<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
{
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:
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<FDGain,&FDGain::next>();
mCalcFunc = make_calc_function<FDGain,&FDGain::next>();
//
Unit* unit = this;
ClearUnitOutputs(unit,1);
}
~FDGain()
{
delete input_signals[0];
delete input_signals[1];
delete output_signals[0];
delete m_client;
}
FDGain()
{
mClient = ClientPointer(new AudioClient(65536));
mClient->set_host_buffer_size(bufferSize());
mClient->reset();
inputSignals[0] = SignalPointer(new AudioSignal());
outputSignals[0] = SignalPointer(new AudioSignal());
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
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];
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);
}
ClientPointer mClient;
SignalArray<2> inputSignals;
SignalArray<1> outputSignals;
};
PluginLoad(BoringMixer2UGens) {
ft = inTable;
registerUnit<FDGain>(ft, "FluidGain");
ft = inTable;
registerUnit<FDGain>(ft, "FluidGain");
}

Loading…
Cancel
Save