cannam@18: /* cannam@18: * SavedFeatureSegmenter.h cannam@18: * soundbite cannam@18: * cannam@18: * Created by Mark Levy on 23/03/2006. cannam@18: * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved. cannam@18: * cannam@18: */ cannam@18: cannam@18: #include cannam@18: cannam@18: #include "segment.h" cannam@18: #include "Segmenter.h" cannam@20: #include "hmm/hmm.h" cannam@18: cannam@18: using std::vector; cannam@18: cannam@18: class SavedFeatureSegmenterParams cannam@18: { cannam@18: public: cannam@18: SavedFeatureSegmenterParams() : hopSize(0.2), windowSize(0.6), cannam@18: nHMMStates(40), nclusters(10), histogramLength(15), neighbourhoodLimit(20) { } cannam@18: double hopSize; // in secs cannam@18: double windowSize; // in secs cannam@18: int nHMMStates; cannam@18: int nclusters; cannam@18: int histogramLength; cannam@18: int neighbourhoodLimit; cannam@18: }; cannam@18: cannam@18: class SavedFeatureSegmenter : public Segmenter cannam@18: { cannam@18: public: cannam@18: SavedFeatureSegmenter(SavedFeatureSegmenterParams params); cannam@18: virtual ~SavedFeatureSegmenter(); cannam@18: virtual void initialise(int samplerate); cannam@18: virtual int getWindowsize() { return static_cast(windowSize * samplerate); } cannam@18: virtual int getHopsize() { return static_cast(hopSize * samplerate); } cannam@18: virtual void extractFeatures(double* samples, int nsamples) { } cannam@18: void setFeatures(const vector >& f); // provide the features yourself cannam@18: virtual void segment(); // segment into default number of segment-types cannam@18: void segment(int m); // segment into m segment-types cannam@18: int getNSegmentTypes() { return nclusters; } cannam@18: protected: cannam@18: void makeSegmentation(int* q, int len); cannam@18: cannam@18: model_t* model; // the HMM cannam@18: int* q; // the decoded HMM state sequence cannam@18: vector > histograms; cannam@18: cannam@18: double hopSize; // in seconds cannam@18: double windowSize; // in seconds cannam@18: cannam@18: // HMM parameters cannam@18: int nHMMStates; cannam@18: cannam@18: // clustering parameters cannam@18: int nclusters; cannam@18: int histogramLength; cannam@18: int neighbourhoodLimit; cannam@20: }; cannam@20: