From 718f8b5bc6cc7a4cb15d2b409986b50c7e8ff1e9 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Sun, 1 Dec 2019 22:19:52 +0000 Subject: [PATCH] Add NMFCross --- release-packaging/Classes/FluidBufNMFCross.sc | 34 +++++++++++++++++++ src/FluidNMFCross/CMakeLists.txt | 20 +++++++++++ src/FluidNMFCross/FluidNMFCross.cpp | 12 +++++++ 3 files changed, 66 insertions(+) create mode 100644 release-packaging/Classes/FluidBufNMFCross.sc create mode 100644 src/FluidNMFCross/CMakeLists.txt create mode 100644 src/FluidNMFCross/FluidNMFCross.cpp diff --git a/release-packaging/Classes/FluidBufNMFCross.sc b/release-packaging/Classes/FluidBufNMFCross.sc new file mode 100644 index 0000000..628be69 --- /dev/null +++ b/release-packaging/Classes/FluidBufNMFCross.sc @@ -0,0 +1,34 @@ +FluidBufNMFCross : UGen{ + + *new1 { |rate, source, target, output , timeSparsity = 10, polyphony = 7, iterations = 50, windowSize = 1024, hopSize = -1, fftSize = -1, doneAction = 0, blocking = 0| + + source = source.asUGenInput; + target = target.asUGenInput; + output = output.asUGenInput; + source.isNil.if {"FluidBufNMFCross: Invalid source buffer".throw}; + target.isNil.if {"FluidBufNMFCross: Invalid target buffer".throw}; + output.isNil.if {"FluidBufNMFCross: Invalid output buffer".throw}; + + ^super.new1(rate, source, target, output, timeSparsity, polyphony, iterations, windowSize, hopSize, fftSize, doneAction, blocking); + } + + *kr { |source, target, output , timeSparsity = 10, polyphony = 7, iterations = 50, windowSize = 1024, hopSize = -1, fftSize = -1, doneAction = 0| + ^this.multiNew(\control, source, target, output, timeSparsity, polyphony, iterations, windowSize, hopSize, fftSize, doneAction); + } + + *process { |server, source, target, output , timeSparsity = 10, polyphony = 7, iterations = 50, windowSize = 1024, hopSize = -1, fftSize = -1, action| + ^FluidNRTProcess.new( + server, this, action, [output].select{|x| x!= -1} + ).process( + source, target, output, timeSparsity, polyphony, iterations, windowSize, hopSize, fftSize + ); + } + + *processBlocking { |server, source, target, output , timeSparsity = 10, polyphony = 7, iterations = 50, windowSize = 1024, hopSize = -1, fftSize = -1, action| + ^FluidNRTProcess.new( + server, this, action, [output].select{|x| x!= -1}, blocking: 1 + ).process( + source, target, output, timeSparsity, polyphony, iterations, windowSize, hopSize, fftSize + ); + } +} diff --git a/src/FluidNMFCross/CMakeLists.txt b/src/FluidNMFCross/CMakeLists.txt new file mode 100644 index 0000000..3693881 --- /dev/null +++ b/src/FluidNMFCross/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.3) +get_filename_component(PLUGIN ${CMAKE_CURRENT_LIST_DIR} NAME_WE) +message("Configuring ${PLUGIN}") +set(FILENAME ${PLUGIN}.cpp) + +add_library( + ${PLUGIN} + MODULE + ${FILENAME} +) + +target_include_directories( + ${PLUGIN} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../../include +) + +target_link_libraries( + ${PLUGIN} PRIVATE FLUID_DECOMPOSITION +) + +include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake) diff --git a/src/FluidNMFCross/FluidNMFCross.cpp b/src/FluidNMFCross/FluidNMFCross.cpp new file mode 100644 index 0000000..5749fa5 --- /dev/null +++ b/src/FluidNMFCross/FluidNMFCross.cpp @@ -0,0 +1,12 @@ + +#include +#include + +static InterfaceTable *ft; + +PluginLoad(OfflineFluidDecompositionUGens) +{ + ft = inTable; + using namespace fluid::client; + makeSCWrapper("FluidBufNMFCross", ft); +}