# HG changeset patch # User Chris Cannam # Date 1473860617 -3600 # Node ID 1a9ba1c08f9e92f8927e5e3bfb211256eacc234c # Parent 5e6ff69b420970301308c46df75a595185215019# Parent 604244038b8147429844bdc06679395c5a0d011c Merge from branch process-noparse diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.example --- a/Makefile.example Thu Sep 08 15:27:48 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ - -ADAPTER_HEADERS := VamPipeAdapter.h VamPipePluginLibrary.h -ADAPTER_SOURCES := VamPipePluginLibrary.cpp - -SDK_DIR := ../vamp-plugin-sdk - -PLUGIN_SOURCES := \ - $(SDK_DIR)/examples/ZeroCrossing.cpp \ - $(SDK_DIR)/examples/SpectralCentroid.cpp \ - $(SDK_DIR)/examples/PercussionOnsetDetector.cpp \ - $(SDK_DIR)/examples/FixedTempoEstimator.cpp \ - $(SDK_DIR)/examples/AmplitudeFollower.cpp \ - $(SDK_DIR)/examples/PowerSpectrum.cpp - -OTHER_SOURCES := \ - ../json/json11/json11.cpp - -SDK_LIBS := \ - $(SDK_DIR)/libvamp-hostsdk.a \ - $(SDK_DIR)/libvamp-sdk.a - -EXAMPLE_EXT := .so -EXAMPLE := example$(EXAMPLE_EXT) -EXAMPLE_SOURCE := example.cpp -EXAMPLE_SOURCES := $(EXAMPLE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES) -EXAMPLE_LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=example.so -Wl,-z,defs -Wl,--version-script=vampipe.map - -TEST := quick-test -TEST_SOURCE := quick-test.cpp -TEST_LDFLAGS := -ldl - -CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra -g -INCPATH := -I$(SDK_DIR) -I.. -I../json - -all: $(EXAMPLE) $(TEST) - ./$(TEST) - -$(EXAMPLE): $(EXAMPLE_SOURCES) $(ADAPTER_HEADERS) $(SDK_LIBS) - $(CXX) $(CXXFLAGS) $(INCPATH) -o $(EXAMPLE) \ - $(EXAMPLE_SOURCES) $(SDK_LIBS) $(EXAMPLE_LDFLAGS) - -$(TEST): $(TEST_SOURCE) - $(CXX) $(CXXFLAGS) -o $(TEST) $(TEST_SOURCE) $(TEST_LDFLAGS) - -clean: - rm -f $(EXAMPLE) $(TEST) diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.example.em --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.example.em Wed Sep 14 14:43:37 2016 +0100 @@ -0,0 +1,16 @@ + +MODULE_NAME := VampExamplePlugins + +EXAMPLE_DIR := ../vamp-plugin-sdk/examples + +PLUGIN_SOURCES := \ + $(EXAMPLE_DIR)/ZeroCrossing.cpp \ + $(EXAMPLE_DIR)/SpectralCentroid.cpp \ + $(EXAMPLE_DIR)/PercussionOnsetDetector.cpp \ + $(EXAMPLE_DIR)/FixedTempoEstimator.cpp \ + $(EXAMPLE_DIR)/AmplitudeFollower.cpp \ + $(EXAMPLE_DIR)/PowerSpectrum.cpp + +MODULE_SOURCE := example.cpp + +include Makefile.inc.em diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.example.emscripten --- a/Makefile.example.emscripten Thu Sep 08 15:27:48 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ - -ADAPTER_HEADERS := VamPipeAdapter.h VamPipePluginLibrary.h -ADAPTER_SOURCES := VamPipePluginLibrary.cpp - -SDK_DIR := ../vamp-plugin-sdk - -PLUGIN_SOURCES := \ - $(SDK_DIR)/examples/ZeroCrossing.cpp \ - $(SDK_DIR)/examples/SpectralCentroid.cpp \ - $(SDK_DIR)/examples/PercussionOnsetDetector.cpp \ - $(SDK_DIR)/examples/FixedTempoEstimator.cpp \ - $(SDK_DIR)/examples/AmplitudeFollower.cpp \ - $(SDK_DIR)/examples/PowerSpectrum.cpp - -SDK_SOURCES := \ - $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \ - $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \ - $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \ - $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \ - $(SDK_DIR)/src/vamp-sdk/FFT.cpp - -OTHER_SOURCES := \ - ../json/json11/json11.cpp - -EMFLAGS := \ - --memory-init-file 0 \ - -s MODULARIZE=1 \ - -s ERROR_ON_UNDEFINED_SYMBOLS=1 \ - -s DISABLE_EXCEPTION_CATCHING=0 \ - -s EXPORT_NAME="'ExampleModule'" \ - -s EXPORTED_FUNCTIONS="['_vampipeRequestJson','_vampipeFreeJson']" - -# -s NO_FILESYSTEM=1 \ -# no longer exists? -s NO_BROWSER=1 - -EXAMPLE_EXT := .js -EXAMPLE := example$(EXAMPLE_EXT) -EXAMPLE_SOURCE := example.cpp -EXAMPLE_SOURCES := $(EXAMPLE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES) -EXAMPLE_LDFLAGS := $(EMFLAGS) - -CXX := em++ - -#OPTFLAGS := -g3 -OPTFLAGS := -O3 -ffast-math - -DEFINES := -DSINGLE_PRECISION_FFT - -CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) - -INCPATH := -I$(SDK_DIR) -I.. -I../json - -all: $(EXAMPLE) - -$(EXAMPLE): $(EXAMPLE_SOURCES) $(ADAPTER_HEADERS) $(SDK_SOURCES) - $(CXX) $(CXXFLAGS) $(EMFLAGS) $(INCPATH) -o $(EXAMPLE) \ - $(EXAMPLE_SOURCES) $(SDK_SOURCES) $(EXAMPLE_LDFLAGS) && \ - ( echo "module.exports=ExampleModule;" >> $(EXAMPLE) ) - -clean: - rm -f $(EXAMPLE) $(EXAMPLE).map diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.example.linux --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.example.linux Wed Sep 14 14:43:37 2016 +0100 @@ -0,0 +1,46 @@ + +ADAPTER_HEADERS := VamPipeAdapter.h VamPipePluginLibrary.h +ADAPTER_SOURCES := VamPipePluginLibrary.cpp + +SDK_DIR := ../vamp-plugin-sdk + +PLUGIN_SOURCES := \ + $(SDK_DIR)/examples/ZeroCrossing.cpp \ + $(SDK_DIR)/examples/SpectralCentroid.cpp \ + $(SDK_DIR)/examples/PercussionOnsetDetector.cpp \ + $(SDK_DIR)/examples/FixedTempoEstimator.cpp \ + $(SDK_DIR)/examples/AmplitudeFollower.cpp \ + $(SDK_DIR)/examples/PowerSpectrum.cpp + +OTHER_SOURCES := \ + ../json/json11/json11.cpp + +SDK_LIBS := \ + $(SDK_DIR)/libvamp-hostsdk.a \ + $(SDK_DIR)/libvamp-sdk.a + +EXAMPLE_EXT := .so +EXAMPLE := example$(EXAMPLE_EXT) +EXAMPLE_SOURCE := example.cpp +EXAMPLE_SOURCES := $(EXAMPLE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES) +EXAMPLE_LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=example.so -Wl,-z,defs -Wl,--version-script=vampipe.map + +TEST := quick-test +TEST_SOURCE := quick-test.cpp +TEST_LDFLAGS := -ldl + +CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra -g +INCPATH := -I$(SDK_DIR) -I.. -I../json + +all: $(EXAMPLE) $(TEST) + ./$(TEST) + +$(EXAMPLE): $(EXAMPLE_SOURCES) $(ADAPTER_HEADERS) $(SDK_LIBS) + $(CXX) $(CXXFLAGS) $(INCPATH) -o $(EXAMPLE) \ + $(EXAMPLE_SOURCES) $(SDK_LIBS) $(EXAMPLE_LDFLAGS) + +$(TEST): $(TEST_SOURCE) + $(CXX) $(CXXFLAGS) -o $(TEST) $(TEST_SOURCE) $(TEST_LDFLAGS) + +clean: + rm -f $(EXAMPLE) $(TEST) diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.inc.em --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.inc.em Wed Sep 14 14:43:37 2016 +0100 @@ -0,0 +1,59 @@ + +ADAPTER_HEADERS := VamPipeAdapter.h VamPipePluginLibrary.h +ADAPTER_SOURCES := VamPipePluginLibrary.cpp + +SDK_DIR := ../vamp-plugin-sdk + +SDK_SOURCES := \ + $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \ + $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \ + $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \ + $(SDK_DIR)/src/vamp-sdk/FFT.cpp + +OTHER_SOURCES := \ + ../json/json11/json11.cpp + +MODULE_EXT := .js +MODULE := $(MODULE_NAME)$(MODULE_EXT) +MODULE_SYMBOL := $(MODULE_NAME)Module + +EMFLAGS := \ + --memory-init-file 0 \ + -s MODULARIZE=1 \ + -s NO_FILESYSTEM=1 \ + -s ERROR_ON_UNDEFINED_SYMBOLS=1 \ + -s DISABLE_EXCEPTION_CATCHING=0 \ + -s EXPORT_NAME="'$(MODULE_SYMBOL)'" \ + -s EXPORTED_FUNCTIONS="['_vampipeRequestJson','_vampipeProcessRaw','_vampipeFreeJson']" + +SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES) +LDFLAGS := $(EMFLAGS) + +CXX := em++ + +#OPTFLAGS := -g3 +OPTFLAGS := -O3 -ffast-math + +DEFINES := -DSINGLE_PRECISION_FFT $(DEFINES) + +CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) + +INCPATH := -I$(SDK_DIR) -I.. -I../json $(INCPATH) + +all: $(MODULE) + +$(MODULE): $(SOURCES) $(ADAPTER_HEADERS) $(SDK_SOURCES) + $(CXX) $(CXXFLAGS) $(EMFLAGS) $(INCPATH) -o $(MODULE) \ + $(SOURCES) $(SDK_SOURCES) $(MODULE_LDFLAGS) && \ + ( echo "module.exports=$(MODULE_SYMBOL);" >> $(MODULE) ) + +clean: + rm -f $(MODULE) diff -r 5e6ff69b4209 -r 1a9ba1c08f9e Makefile.silvet.em --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.silvet.em Wed Sep 14 14:43:37 2016 +0100 @@ -0,0 +1,48 @@ + +MODULE_NAME := Silvet + +SILVET_DIR := ../../silvet + +SRC_DIR := $(SILVET_DIR)/src +CQ_DIR := $(SILVET_DIR)/constant-q-cpp +CQSRC_DIR := $(SILVET_DIR)/constant-q-cpp/src +KFFT_DIR := $(SILVET_DIR)/constant-q-cpp/src/ext/kissfft +BQVEC_DIR := $(SILVET_DIR)/bqvec +FD_DIR := $(SILVET_DIR)/flattendynamics + +INCPATH := -I$(SRC_DIR) -I$(CQ_DIR) -I$(CQ_DIR)/cq -I$(KFFT_DIR) -I$(KFFT_DIR)/tools -I$(SILVET_DIR) -I$(FD_DIR) -I$(BQVEC_DIR) + +DEFINES := -Dkiss_fft_scalar=double + +PLUGIN_SOURCES := \ + $(SRC_DIR)/Silvet.cpp \ + $(SRC_DIR)/EM.cpp \ + $(SRC_DIR)/Instruments.cpp \ + $(SRC_DIR)/LiveInstruments.cpp + +BQVEC_SOURCES := \ + $(BQVEC_DIR)/src/Allocators.cpp + +FD_SOURCES := \ + $(FD_DIR)/flattendynamics-ladspa.cpp + +CQ_SOURCES := \ + $(CQSRC_DIR)/CQKernel.cpp \ + $(CQSRC_DIR)/ConstantQ.cpp \ + $(CQSRC_DIR)/CQSpectrogram.cpp \ + $(CQSRC_DIR)/CQInverse.cpp \ + $(CQSRC_DIR)/Chromagram.cpp \ + $(CQSRC_DIR)/Pitch.cpp \ + $(CQSRC_DIR)/dsp/FFT.cpp \ + $(CQSRC_DIR)/dsp/KaiserWindow.cpp \ + $(CQSRC_DIR)/dsp/MathUtilities.cpp \ + $(CQSRC_DIR)/dsp/Resampler.cpp \ + $(CQSRC_DIR)/dsp/SincWindow.cpp \ + $(KFFT_DIR)/kiss_fft.c \ + $(KFFT_DIR)/tools/kiss_fftr.c + +PLUGIN_SOURCES := $(PLUGIN_SOURCES) $(BQVEC_SOURCES) $(FD_SOURCES) $(CQ_SOURCES) + +MODULE_SOURCE := silvet.cpp + +include Makefile.inc.em diff -r 5e6ff69b4209 -r 1a9ba1c08f9e VamPipePluginLibrary.cpp --- a/VamPipePluginLibrary.cpp Thu Sep 08 15:27:48 2016 +0100 +++ b/VamPipePluginLibrary.cpp Wed Sep 14 14:43:37 2016 +0100 @@ -193,6 +193,36 @@ } string +VamPipePluginLibrary::processRawImpl(int pluginHandle, + const float *const *inputBuffers, + int sec, + int nsec) +{ + RequestOrResponse response; + response.direction = RequestOrResponse::Response; + response.type = RRType::Process; + + try { + if (!m_mapper.isConfigured(pluginHandle)) { + throw runtime_error("plugin has not been configured"); + } + + Vamp::Plugin *plugin = m_mapper.handleToPlugin(pluginHandle); + Vamp::RealTime timestamp(sec, nsec); + + response.processResponse.features = plugin->process(inputBuffers, timestamp); + response.success = true; + + m_useBase64 = true; + + return writeResponse(response); + + } catch (const std::exception &e) { + return VampJson::fromException(e, RRType::Process).dump(); + } +} + +string VamPipePluginLibrary::requestJsonImpl(string req) { RequestOrResponse request; @@ -200,7 +230,6 @@ try { request = readRequest(req); } catch (const std::exception &e) { - std::cerr << "FAILURE" << std::endl; return VampJson::fromException(e, RRType::NotValid).dump(); } @@ -254,7 +283,7 @@ if (channels != m_mapper.getChannelCount(h)) { throw runtime_error("wrong number of channels supplied to process"); } - + const float **fbuffers = new const float *[channels]; for (int i = 0; i < channels; ++i) { if (int(preq.inputBuffers[i].size()) != m_mapper.getBlockSize(h)) { diff -r 5e6ff69b4209 -r 1a9ba1c08f9e VamPipePluginLibrary.h --- a/VamPipePluginLibrary.h Thu Sep 08 15:27:48 2016 +0100 +++ b/VamPipePluginLibrary.h Wed Sep 14 14:43:37 2016 +0100 @@ -58,12 +58,18 @@ return strdup(requestJsonImpl(request).c_str()); } + const char *processRaw(int handle, const float *const *inputBuffers, + int sec, int nsec) { + return strdup(processRawImpl(handle, inputBuffers, sec, nsec).c_str()); + } + void freeJson(const char *json) { free(const_cast(json)); } private: std::string requestJsonImpl(std::string req); + std::string processRawImpl(int, const float *const *, int, int); RequestOrResponse readRequest(std::string req); std::string writeResponse(const RequestOrResponse &resp) const; diff -r 5e6ff69b4209 -r 1a9ba1c08f9e example.cpp --- a/example.cpp Thu Sep 08 15:27:48 2016 +0100 +++ b/example.cpp Wed Sep 14 14:43:37 2016 +0100 @@ -69,6 +69,13 @@ return library.requestJson(request); } +const char *vampipeProcessRaw(int pluginHandle, + const float *const *inputBuffers, + int sec, + int nsec) { + return library.processRaw(pluginHandle, inputBuffers, sec, nsec); +} + void vampipeFreeJson(const char *json) { return library.freeJson(json); } diff -r 5e6ff69b4209 -r 1a9ba1c08f9e silvet.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/silvet.cpp Wed Sep 14 14:43:37 2016 +0100 @@ -0,0 +1,36 @@ + +#include "VamPipeAdapter.h" +#include "VamPipePluginLibrary.h" + +#include "Silvet.h" + +using vampipe::VamPipeAdapter; +using vampipe::VamPipePluginLibrary; + +static std::string soname("silvet"); + +static VamPipeAdapter silvetAdapter(soname); + +static VamPipePluginLibrary library({ + &silvetAdapter +}); + +extern "C" { + +const char *vampipeRequestJson(const char *request) { + return library.requestJson(request); +} + +const char *vampipeProcessRaw(int pluginHandle, + const float *const *inputBuffers, + int sec, + int nsec) { + return library.processRaw(pluginHandle, inputBuffers, sec, nsec); +} + +void vampipeFreeJson(const char *json) { + return library.freeJson(json); +} + +} + diff -r 5e6ff69b4209 -r 1a9ba1c08f9e vampipe.map --- a/vampipe.map Thu Sep 08 15:27:48 2016 +0100 +++ b/vampipe.map Wed Sep 14 14:43:37 2016 +0100 @@ -1,4 +1,4 @@ { - global: vampipeRequestJson; vampipeFreeJson; + global: vampipeRequestJson; vampipeProcessRaw; vampipeFreeJson; local: *; };