Merge branch 'rt_wrapper': Adds FDGain class for real-time testig and updates gitignore

nix
Owen Green 7 years ago
commit 184d0d2890

4
.gitignore vendored

@ -1,4 +1,4 @@
build build
**/build/*
**/.DS_Store **/.DS_Store
release-packaging/fdNMF/classes release-packaging/*/plugins
release-packaging/fdNMF/plugins

@ -0,0 +1,119 @@
####### original SC Cmake file starts here
cmake_minimum_required (VERSION 3.1)
get_filename_component(PROJECT ${CMAKE_SOURCE_DIR} NAME_WE) #automatically sets project name from the filename
message(STATUS "Project name is ${PROJECT}")
project (${PROJECT})
####### added the eingenmf
set(FLUID_DECOMP_DIR ~/fluid_decomposition)
set(FILENAME "fdGain.cpp") #specify the .cpp file here
set(CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
add_library(
${PROJECT}
MODULE
${FILENAME}
"${FLUID_DECOMP_DIR}/3rdparty/HISSTools_FFT/HISSTools_FFT.cpp"
)
add_custom_command(
TARGET
${PROJECT}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT}> "../../release-packaging/${PROJECT}/plugins"
)
include_directories(
"${FLUID_DECOMP_DIR}"
"${FLUID_DECOMP_DIR}/include"
"${FLUID_DECOMP_DIR}/3rdparty"
)
include_directories(${SC_PATH}/include/plugin_interface)
include_directories(${SC_PATH}/include/common)
include_directories(${SC_PATH}/common)
set(CMAKE_SHARED_MODULE_PREFIX "")
if(APPLE OR WIN32)
set(CMAKE_SHARED_MODULE_SUFFIX ".scx")
endif()
option(SUPERNOVA "Build plugins for supernova" OFF)
if (SUPERNOVA)
include_directories(${SC_PATH}/external_libraries/nova-tt)
# actually just boost.atomic
include_directories(${SC_PATH}/external_libraries/boost)
include_directories(${SC_PATH}/external_libraries/boost_lockfree)
include_directories(${SC_PATH}/external_libraries/boost-lockfree)
endif()
option(CPP11 "Build with c++11." ON)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
add_definitions(-fvisibility=hidden)
include (CheckCCompilerFlag)
include (CheckCXXCompilerFlag)
CHECK_C_COMPILER_FLAG(-msse HAS_SSE)
CHECK_CXX_COMPILER_FLAG(-msse HAS_CXX_SSE)
if (HAS_SSE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse")
endif()
if (HAS_CXX_SSE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
endif()
CHECK_C_COMPILER_FLAG(-msse2 HAS_SSE2)
CHECK_CXX_COMPILER_FLAG(-msse2 HAS_CXX_SSE2)
if (HAS_SSE2)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
endif()
if (HAS_CXX_SSE2)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
endif()
CHECK_C_COMPILER_FLAG(-mfpmath=sse HAS_FPMATH_SSE)
CHECK_CXX_COMPILER_FLAG(-mfpmath=sse HAS_CXX_FPMATH_SSE)
if (HAS_FPMATH_SSE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse")
endif()
if (HAS_CXX_FPMATH_SSE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=sse")
endif()
if(NATIVE)
add_definitions(-march=native)
endif()
if(CPP11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(CMAKE_COMPILER_IS_CLANG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
endif()
endif()
if(MINGW)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mstackrealign")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mstackrealign")
endif()
####### added the fluid_decomposition
if(SUPERNOVA)
add_library(${PROJECT}_supernova MODULE ${FILENAME})
set_property(TARGET ${PROJECT}_supernova
PROPERTY COMPILE_DEFINITIONS SUPERNOVA)
endif()
target_link_libraries (${PROJECT} "-framework Accelerate")

@ -0,0 +1,94 @@
// 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"
#include "data/FluidTensor.hpp"
#include "clients/rt/GainClient.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
{
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(chunk_size);
else
m_client = new client_type(1024);
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;
}
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(input_signals,output_signals,numsamples,2,1);
}
client_type* m_client;
signal_type* input_signals[2];
signal_type* output_signals[1];
};
PluginLoad(BoringMixer2UGens) {
ft = inTable;
registerUnit<FDGain>(ft, "FDGain");
}

@ -0,0 +1,4 @@
//Ar modulator
{FDGain.ar(WhiteNoise.ar,64,SinOsc.ar(2))}.play
//Kr modulator
{FDGain.ar(WhiteNoise.ar,64,SinOsc.kr(2))}.play

@ -0,0 +1,6 @@
fdGain: UGen {
*ar { arg in = 0, framesize=64, gain=1.0;
^this.multiNew('audio', in.asAudioRateInput(this),framesize, gain)
}
}
Loading…
Cancel
Save