c@243: #ifndef _SEGMENTER_H c@243: #define _SEGMENTER_H c@243: c@243: /* c@243: * Segmenter.h c@243: * soundbite c@243: * c@243: * Created by Mark Levy on 23/03/2006. c@309: * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. c@309: c@309: This program is free software; you can redistribute it and/or c@309: modify it under the terms of the GNU General Public License as c@309: published by the Free Software Foundation; either version 2 of the c@309: License, or (at your option) any later version. See the file c@309: COPYING included with this distribution for more information. c@243: * c@243: */ c@243: c@243: #include c@243: #include c@243: c@243: using std::vector; c@243: using std::ostream; c@243: c@243: class Segment c@243: { c@243: public: c@243: int start; // in samples c@243: int end; c@243: int type; c@243: }; c@243: c@243: class Segmentation c@243: { c@243: public: c@243: int nsegtypes; // number of segment types, so possible types are {0,1,...,nsegtypes-1} c@243: int samplerate; c@243: vector segments; c@243: }; c@243: c@243: ostream& operator<<(ostream& os, const Segmentation& s); c@243: c@243: class Segmenter c@243: { c@243: public: c@243: Segmenter() {} c@243: virtual ~Segmenter() {} c@243: virtual void initialise(int samplerate) = 0; // must be called before any other methods c@243: virtual int getWindowsize() = 0; // required window size for calls to extractFeatures() c@243: virtual int getHopsize() = 0; // required hop size for calls to extractFeatures() c@249: virtual void extractFeatures(const double* samples, int nsamples) = 0; c@243: virtual void segment() = 0; // call once all the features have been extracted c@243: virtual void segment(int m) = 0; // specify desired number of segment-types c@243: virtual void clear() { features.clear(); } c@243: const Segmentation& getSegmentation() const { return segmentation; } c@243: protected: c@243: vector > features; c@243: Segmentation segmentation; c@243: int samplerate; c@243: }; c@243: c@243: #endif