fazekasgy@0: /* fazekasgy@0: Vamp fazekasgy@0: fazekasgy@0: An API for audio analysis and feature extraction plugins. fazekasgy@0: fazekasgy@0: Centre for Digital Music, Queen Mary, University of London. fazekasgy@0: Copyright 2006 Chris Cannam. fazekasgy@0: fazekasgy@0: Permission is hereby granted, free of charge, to any person fazekasgy@0: obtaining a copy of this software and associated documentation fazekasgy@0: files (the "Software"), to deal in the Software without fazekasgy@0: restriction, including without limitation the rights to use, copy, fazekasgy@0: modify, merge, publish, distribute, sublicense, and/or sell copies fazekasgy@0: of the Software, and to permit persons to whom the Software is fazekasgy@0: furnished to do so, subject to the following conditions: fazekasgy@0: fazekasgy@0: The above copyright notice and this permission notice shall be fazekasgy@0: included in all copies or substantial portions of the Software. fazekasgy@0: fazekasgy@0: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, fazekasgy@0: EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF fazekasgy@0: MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND fazekasgy@0: NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR fazekasgy@0: ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF fazekasgy@0: CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION fazekasgy@0: WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. fazekasgy@0: fazekasgy@0: Except as contained in this notice, the names of the Centre for fazekasgy@0: Digital Music; Queen Mary, University of London; and Chris Cannam fazekasgy@0: shall not be used in advertising or otherwise to promote the sale, fazekasgy@0: use or other dealings in this Software without prior written fazekasgy@0: authorization. fazekasgy@0: */ fazekasgy@0: fazekasgy@0: /** fazekasgy@0: * This plugin abstracts appropriate Python Scripts as a VAMP plugin. fazekasgy@0: */ fazekasgy@0: fazekasgy@0: #ifndef _PYTHON_WRAPPER_PLUGIN_H_ fazekasgy@0: #define _PYTHON_WRAPPER_PLUGIN_H_ fazekasgy@0: fazekasgy@0: #include "vamp-sdk/Plugin.h" fazekasgy@0: #include "/usr/include/python/Python.h" fazekasgy@0: fazekasgy@0: //fields in OutputDescriptor fazekasgy@0: enum eOutDescriptors { fazekasgy@0: not_found, fazekasgy@0: identifier, fazekasgy@0: name, fazekasgy@0: description, fazekasgy@0: unit, fazekasgy@0: hasFixedBinCount, fazekasgy@0: binCount, fazekasgy@0: binNames, fazekasgy@0: hasKnownExtents, fazekasgy@0: minValue, fazekasgy@0: maxValue, fazekasgy@0: isQuantized, fazekasgy@0: quantizeStep, fazekasgy@0: sampleType, fazekasgy@0: sampleRate, fazekasgy@0: endNode fazekasgy@0: }; fazekasgy@0: fazekasgy@0: namespace p { fazekasgy@0: enum eParmDescriptors { fazekasgy@0: not_found, fazekasgy@0: identifier, fazekasgy@0: name, fazekasgy@0: description, fazekasgy@0: unit, fazekasgy@0: minValue, fazekasgy@0: maxValue, fazekasgy@0: defaultValue, fazekasgy@0: isQuantized fazekasgy@0: }; fazekasgy@0: } fazekasgy@0: fazekasgy@0: enum eSampleTypes { fazekasgy@0: OneSamplePerStep, fazekasgy@0: FixedSampleRate, fazekasgy@0: VariableSampleRate fazekasgy@0: }; fazekasgy@0: fazekasgy@0: enum eFeatureFields { fazekasgy@0: unknown, fazekasgy@0: hasTimestamp, fazekasgy@0: timeStamp, fazekasgy@0: values, fazekasgy@0: label fazekasgy@0: }; fazekasgy@0: fazekasgy@0: fazekasgy@0: class PyPlugin : public Vamp::Plugin fazekasgy@0: { fazekasgy@0: public: fazekasgy@0: PyPlugin(std::string plugin,float inputSampleRate, PyObject *pyInstance); fazekasgy@0: virtual ~PyPlugin(); fazekasgy@0: fazekasgy@0: bool initialise(size_t channels, size_t stepSize, size_t blockSize); fazekasgy@0: void reset(); fazekasgy@0: //virtuals: fazekasgy@0: InputDomain getInputDomain() const; fazekasgy@0: size_t getPreferredBlockSize() const; fazekasgy@0: size_t getPreferredStepSize() const; fazekasgy@0: size_t getMinChannelCount() const; fazekasgy@0: size_t getMaxChannelCount() const; fazekasgy@0: fazekasgy@0: std::string getIdentifier() const; fazekasgy@0: std::string getName() const; fazekasgy@0: std::string getDescription() const; fazekasgy@0: std::string getMaker() const; fazekasgy@0: int getPluginVersion() const; fazekasgy@0: std::string getCopyright() const; fazekasgy@0: fazekasgy@0: OutputList getOutputDescriptors() const; fazekasgy@0: ParameterList getParameterDescriptors() const; fazekasgy@0: float getParameter(std::string paramid) const; fazekasgy@0: void setParameter(std::string paramid, float newval); fazekasgy@0: fazekasgy@0: FeatureSet process(const float *const *inputBuffers, fazekasgy@0: Vamp::RealTime timestamp); fazekasgy@0: fazekasgy@0: FeatureSet getRemainingFeatures(); fazekasgy@0: fazekasgy@0: protected: fazekasgy@0: PyObject *m_pyInstance; fazekasgy@0: size_t m_stepSize; fazekasgy@0: float m_previousSample; fazekasgy@0: std::string m_plugin; fazekasgy@0: std::string m_class; fazekasgy@0: std::string m_path; fazekasgy@0: }; fazekasgy@0: fazekasgy@0: fazekasgy@0: #endif