cannam@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@0: cannam@0: /* cannam@0: Vamp feature extraction plugins using Jamie Bullock's cannam@0: libxtract audio feature extraction library. cannam@0: cannam@0: Centre for Digital Music, Queen Mary, University of London. cannam@0: This file copyright 2006 Queen Mary, University of London. cannam@0: cannam@0: This program is free software; you can redistribute it and/or cannam@0: modify it under the terms of the GNU General Public License as cannam@0: published by the Free Software Foundation; either version 2 of the cannam@0: License, or (at your option) any later version. See the file cannam@0: COPYING included with this distribution for more information. cannam@0: */ cannam@0: cannam@0: #ifndef _XTRACT_PLUGIN_H_ cannam@0: #define _XTRACT_PLUGIN_H_ cannam@0: cannam@0: #include cannam@1: #include cannam@0: cannam@0: class XTractPlugin : public Vamp::Plugin cannam@0: { cannam@0: public: cannam@0: XTractPlugin(unsigned int xtFeature, float inputSampleRate); cannam@0: virtual ~XTractPlugin(); cannam@0: cannam@0: bool initialise(size_t channels, size_t stepSize, size_t blockSize); cannam@0: void reset(); cannam@0: cannam@0: InputDomain getInputDomain() const; cannam@0: cannam@2: std::string getIdentifier() const; cannam@0: std::string getName() const; cannam@0: std::string getDescription() const; cannam@0: std::string getMaker() const; cannam@0: int getPluginVersion() const; cannam@0: std::string getCopyright() const; cannam@0: cannam@0: ParameterList getParameterDescriptors() const; cannam@0: float getParameter(std::string) const; cannam@0: void setParameter(std::string, float); cannam@0: cannam@0: size_t getMinChannelCount() const; cannam@0: size_t getMaxChannelCount() const; cannam@0: cannam@0: size_t getPreferredStepSize() const; cannam@0: size_t getPreferredBlockSize() const; cannam@0: cannam@0: OutputList getOutputDescriptors() const; cannam@0: cannam@0: FeatureSet process(const float *const *inputBuffers, cannam@0: Vamp::RealTime timestamp); cannam@0: cannam@0: FeatureSet getRemainingFeatures(); cannam@0: cannam@0: protected: cannam@0: bool needPeakThreshold() const; cannam@1: bool needHarmonicThreshold() const; cannam@1: bool needRolloffThreshold() const; cannam@0: cannam@0: mutable OutputList m_outputDescriptors; cannam@0: void setupOutputDescriptors() const; cannam@0: Chris@34: bool processSPF0(const double *data); cannam@0: cannam@0: const unsigned int m_xtFeature; cannam@0: size_t m_channels; cannam@0: size_t m_stepSize; cannam@0: size_t m_blockSize; cannam@0: Chris@34: double *m_resultBuffer; cannam@0: Chris@34: double m_peakThreshold; Chris@34: double m_rolloffThreshold; Chris@34: double m_harmonicThreshold; cannam@0: Chris@34: double m_minFreq; Chris@34: double m_maxFreq; cannam@0: cannam@9: int m_coeffCount; cannam@9: int m_highestCoef; cannam@9: int m_lowestCoef; Chris@34: double **m_mfccFilters; cannam@0: int m_mfccStyle; cannam@0: cannam@14: int m_spectrumType; cannam@14: int m_dc; cannam@14: int m_normalise; cannam@14: cannam@0: int *m_barkBandLimits; cannam@0: cannam@1: static xtract_function_descriptor_t *m_xtDescriptors; cannam@1: static int m_xtDescRefCount; cannam@1: xtract_function_descriptor_t *xtDescriptor() { cannam@1: return &m_xtDescriptors[m_xtFeature]; cannam@1: } cannam@1: const xtract_function_descriptor_t *xtDescriptor() const { cannam@1: return &m_xtDescriptors[m_xtFeature]; cannam@1: } cannam@1: cannam@0: size_t m_outputBinCount; cannam@0: bool m_initialised; cannam@9: static bool m_anyInitialised; cannam@0: }; cannam@0: cannam@0: cannam@0: #endif