# HG changeset patch # User Chris Cannam # Date 1475258762 -3600 # Node ID 1ab9634703ca9fcf5e51dbedb462185943f62ce5 # Parent 4845fbb1a5161e6b255befabf56beeaf39958477 Add QM Vamp Plugins build, and separate out object file builds (so we can use the C compiler for .c files). Problem is we are now building in the "client project"'s own directory, so conflicting with its own native .o files -- to be revised. diff -r 4845fbb1a516 -r 1ab9634703ca Makefile.inc.em --- a/Makefile.inc.em Tue Sep 27 15:04:59 2016 +0100 +++ b/Makefile.inc.em Fri Sep 30 19:06:02 2016 +0100 @@ -34,26 +34,31 @@ -s EXPORTED_FUNCTIONS="['_vampipeRequestJson','_vampipeProcessRaw','_vampipeFreeJson']" \ $(EMFLAGS) -SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES) +CXX_SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES) LDFLAGS := $(EMFLAGS) CXX := em++ +CC := emcc #OPTFLAGS := -g3 OPTFLAGS := -O3 -ffast-math DEFINES := $(DEFINES) -CXXFLAGS := -std=c++11 -fPIC -fno-exceptions -Wall -Wextra $(DEFINES) $(OPTFLAGS) +INCPATH := -I$(SDK_DIR) -I.. -I../json $(INCPATH) -INCPATH := -I$(SDK_DIR) -I.. -I../json $(INCPATH) +CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) +CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) + +CXX_OBJECTS := $(CXX_SOURCES:.cpp=.o) +C_OBJECTS := $(C_SOURCES:.c=.o) +OBJECTS := $(CXX_OBJECTS) $(C_OBJECTS) all: $(MODULE) -$(MODULE): $(SOURCES) $(ADAPTER_HEADERS) $(SDK_SOURCES) - $(CXX) $(CXXFLAGS) $(EMFLAGS) $(INCPATH) -o $(MODULE) \ - $(SOURCES) $(SDK_SOURCES) $(MODULE_LDFLAGS) && \ +$(MODULE): $(OBJECTS) + $(CXX) $(OBTFLAGS) $(EMFLAGS) -o $(MODULE) $(OBJECTS) $(MODULE_LDFLAGS) && \ ( echo "if (typeof process === 'object') module.exports=$(MODULE_SYMBOL);" >> $(MODULE) ) clean: - rm -f $(MODULE) + rm -f $(MODULE) $(OBJECTS) diff -r 4845fbb1a516 -r 1ab9634703ca Makefile.qm-vamp-plugins.em --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.qm-vamp-plugins.em Fri Sep 30 19:06:02 2016 +0100 @@ -0,0 +1,115 @@ + +MODULE_NAME := QMVampPlugins + +QMV := ../../qm-vamp-plugins +DSP := $(QMV)/qm-dsp +EXT := $(DSP)/ext + +INCPATH := -I$(QMV) -I$(DSP) -I$(EXT)/kissfft -I$(EXT)/kissfft/tools +DEFINES := -DNO_BLAS_WRAP -DADD_ -Dkiss_fft_scalar=double -I$(EXT)/clapack/include -I$(EXT)/cblas/include + +CLAPACK_SOURCES := \ + $(EXT)/clapack/src/dgetrf.c \ + $(EXT)/clapack/src/dgetri.c \ + $(EXT)/clapack/src/dgetf2.c \ + $(EXT)/clapack/src/xerbla.c \ + $(EXT)/clapack/src/dlaswp.c \ + $(EXT)/clapack/src/dtrtri.c \ + $(EXT)/clapack/src/ilaenv.c \ + $(EXT)/clapack/src/iparmq.c \ + $(EXT)/clapack/src/s_cat.c \ + $(EXT)/clapack/src/s_copy.c \ + $(EXT)/clapack/src/s_cmp.c \ + $(EXT)/clapack/src/pow_di.c \ + $(EXT)/clapack/src/ieeeck.c \ + $(EXT)/clapack/src/i_nint.c \ + $(EXT)/clapack/src/dtrti2.c \ + $(EXT)/clapack/src/f77_aloc.c \ + $(EXT)/clapack/src/exit_.c + +CBLAS_SOURCES := \ + $(EXT)/cblas/src/dgemm.c \ + $(EXT)/cblas/src/ddot.c \ + $(EXT)/cblas/src/dgemv.c \ + $(EXT)/cblas/src/dswap.c \ + $(EXT)/cblas/src/dtrsm.c \ + $(EXT)/cblas/src/dger.c \ + $(EXT)/cblas/src/idamax.c \ + $(EXT)/cblas/src/dscal.c \ + $(EXT)/cblas/src/dtrmm.c \ + $(EXT)/cblas/src/lsame.c \ + $(EXT)/cblas/src/dlamch.c \ + $(EXT)/cblas/src/dtrmv.c \ + $(EXT)/cblas/src/cblas_globals.c \ + $(EXT)/cblas/src/cblas_dgemm.c \ + $(EXT)/cblas/src/cblas_ddot.c \ + $(EXT)/cblas/src/cblas_xerbla.c + +DSP_SOURCES := \ + $(DSP)/base/Pitch.cpp \ + $(DSP)/base/KaiserWindow.cpp \ + $(DSP)/base/SincWindow.cpp \ + $(DSP)/dsp/chromagram/Chromagram.cpp \ + $(DSP)/dsp/chromagram/ConstantQ.cpp \ + $(DSP)/dsp/keydetection/GetKeyMode.cpp \ + $(DSP)/dsp/mfcc/MFCC.cpp \ + $(DSP)/dsp/onsets/DetectionFunction.cpp \ + $(DSP)/dsp/onsets/PeakPicking.cpp \ + $(DSP)/dsp/phasevocoder/PhaseVocoder.cpp \ + $(DSP)/dsp/rateconversion/Decimator.cpp \ + $(DSP)/dsp/rateconversion/DecimatorB.cpp \ + $(DSP)/dsp/rateconversion/Resampler.cpp \ + $(DSP)/dsp/rhythm/BeatSpectrum.cpp \ + $(DSP)/dsp/segmentation/ClusterMeltSegmenter.cpp \ + $(DSP)/dsp/segmentation/Segmenter.cpp \ + $(DSP)/dsp/signalconditioning/DFProcess.cpp \ + $(DSP)/dsp/signalconditioning/Filter.cpp \ + $(DSP)/dsp/signalconditioning/FiltFilt.cpp \ + $(DSP)/dsp/signalconditioning/Framer.cpp \ + $(DSP)/dsp/tempotracking/DownBeat.cpp \ + $(DSP)/dsp/tempotracking/TempoTrack.cpp \ + $(DSP)/dsp/tempotracking/TempoTrackV2.cpp \ + $(DSP)/dsp/tonal/ChangeDetectionFunction.cpp \ + $(DSP)/dsp/tonal/TCSgram.cpp \ + $(DSP)/dsp/tonal/TonalEstimator.cpp \ + $(DSP)/dsp/transforms/DCT.cpp \ + $(DSP)/dsp/transforms/FFT.cpp \ + $(DSP)/dsp/wavelet/Wavelet.cpp \ + $(DSP)/maths/Correlation.cpp \ + $(DSP)/maths/CosineDistance.cpp \ + $(DSP)/maths/KLDivergence.cpp \ + $(DSP)/maths/MathUtilities.cpp + +# $(DSP)/thread/Thread.cpp \ + +# $(QMV)/plugins/AdaptiveSpectrogram.cpp \ + +PLUGIN_SOURCES := \ + $(QMV)/plugins/BarBeatTrack.cpp \ + $(QMV)/plugins/BeatTrack.cpp \ + $(QMV)/plugins/DWT.cpp \ + $(QMV)/plugins/OnsetDetect.cpp \ + $(QMV)/plugins/ChromagramPlugin.cpp \ + $(QMV)/plugins/ConstantQSpectrogram.cpp \ + $(QMV)/plugins/KeyDetect.cpp \ + $(QMV)/plugins/MFCCPlugin.cpp \ + $(QMV)/plugins/SegmenterPlugin.cpp \ + $(QMV)/plugins/SimilarityPlugin.cpp \ + $(QMV)/plugins/TonalChangeDetect.cpp \ + $(QMV)/plugins/Transcription.cpp \ + $(DSP_SOURCES) + +C_SOURCES := \ + $(QMV)/g2cstubs.c \ + $(DSP)/dsp/segmentation/cluster_segmenter.c \ + $(DSP)/dsp/segmentation/cluster_melt.c \ + $(DSP)/hmm/hmm.c \ + $(DSP)/maths/pca/pca.c \ + $(DSP)/ext/kissfft/kiss_fft.c \ + $(DSP)/ext/kissfft/tools/kiss_fftr.c \ + $(CLAPACK_SOURCES) \ + $(CBLAS_SOURCES) + +MODULE_SOURCE := qm-vamp-plugins.cpp + +include Makefile.inc.em diff -r 4845fbb1a516 -r 1ab9634703ca qm-vamp-plugins.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qm-vamp-plugins.cpp Fri Sep 30 19:06:02 2016 +0100 @@ -0,0 +1,105 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + VamPipe + + Centre for Digital Music, Queen Mary, University of London. + Copyright 2015-2016 QMUL. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the names of the Centre for + Digital Music; Queen Mary, University of London; and Chris Cannam + shall not be used in advertising or otherwise to promote the sale, + use or other dealings in this Software without prior written + authorization. +*/ + +#include "VamPipeAdapter.h" +#include "VamPipePluginLibrary.h" + +#include "plugins/BeatTrack.h" +#include "plugins/OnsetDetect.h" +#include "plugins/ChromagramPlugin.h" +#include "plugins/ConstantQSpectrogram.h" +#include "plugins/TonalChangeDetect.h" +#include "plugins/KeyDetect.h" +#include "plugins/MFCCPlugin.h" +#include "plugins/SegmenterPlugin.h" +#include "plugins/SimilarityPlugin.h" +#include "plugins/BarBeatTrack.h" +//!!!#include "plugins/AdaptiveSpectrogram.h" +#include "plugins/DWT.h" +#include "plugins/Transcription.h" + +using vampipe::VamPipeAdapter; +using vampipe::VamPipePluginLibrary; + +static std::string soname("qm-vamp-plugins"); + +static VamPipeAdapter beatTrackerAdapter(soname); +static VamPipeAdapter onsetDetectorAdapter(soname); +static VamPipeAdapter chromagramPluginAdapter(soname); +static VamPipeAdapter constantQAdapter(soname); +static VamPipeAdapter tonalChangeDetectorAdapter(soname); +static VamPipeAdapter keyDetectorAdapter(soname); +static VamPipeAdapter mfccPluginAdapter(soname); +static VamPipeAdapter segmenterPluginAdapter(soname); +static VamPipeAdapter similarityPluginAdapter(soname); +static VamPipeAdapter barBeatTrackPluginAdapter(soname); +//!!!static VamPipeAdapter adaptiveSpectrogramAdapter(soname); +static VamPipeAdapter dwtAdapter(soname); +static VamPipeAdapter transcriptionAdapter(soname); + +static VamPipePluginLibrary library({ + &beatTrackerAdapter, + &onsetDetectorAdapter, + &chromagramPluginAdapter, + &constantQAdapter, + &tonalChangeDetectorAdapter, + &keyDetectorAdapter, + &mfccPluginAdapter, + &segmenterPluginAdapter, + &similarityPluginAdapter, + &barBeatTrackPluginAdapter, +//!!! &adaptiveSpectrogramAdapter, + &dwtAdapter, + &transcriptionAdapter + }); + +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); +} + +} +