annotate dsp/segmentation/ClusterMeltSegmenter.h @ 245:cdfd0948a852

* First cut at properly integrating the segmenter and making it work right
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 09 Jan 2008 16:50:04 +0000
parents dc30e3864ceb
children 2b74bd60c61f
rev   line source
c@243 1 /*
c@243 2 * ClusterMeltSegmenter.h
c@243 3 * soundbite
c@243 4 *
c@243 5 * Created by Mark Levy on 23/03/2006.
c@243 6 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved.
c@243 7 *
c@243 8 */
c@243 9
c@243 10 #include <vector>
c@243 11
c@243 12 #include "segment.h"
c@243 13 #include "Segmenter.h"
c@245 14 #include "hmm/hmm.h"
c@245 15 #include "base/Window.h"
c@245 16 #include "dsp/chromagram/ConstantQ.h"
c@243 17
c@243 18 using std::vector;
c@243 19
c@243 20 class ClusterMeltSegmenterParams // defaults are sensible for 11025Hz with 0.2 second hopsize
c@243 21 {
c@243 22 public:
c@243 23 ClusterMeltSegmenterParams() : featureType(FEATURE_TYPE_CONSTQ), hopSize(0.2), windowSize(0.6), fmin(62), fmax(16000),
c@243 24 nbins(8), ncomponents(20), nHMMStates(40), nclusters(10), histogramLength(15), neighbourhoodLimit(20) { }
c@243 25 feature_types featureType;
c@243 26 double hopSize; // in secs
c@243 27 double windowSize; // in secs
c@243 28 int fmin;
c@243 29 int fmax;
c@243 30 int nbins;
c@243 31 int ncomponents;
c@243 32 int nHMMStates;
c@243 33 int nclusters;
c@243 34 int histogramLength;
c@243 35 int neighbourhoodLimit;
c@243 36 };
c@243 37
c@243 38 class ClusterMeltSegmenter : public Segmenter
c@243 39 {
c@243 40 public:
c@243 41 ClusterMeltSegmenter(ClusterMeltSegmenterParams params);
c@243 42 virtual ~ClusterMeltSegmenter();
c@243 43 virtual void initialise(int samplerate);
c@245 44 virtual int getWindowsize();
c@245 45 virtual int getHopsize();
c@243 46 virtual void extractFeatures(double* samples, int nsamples);
c@243 47 void setFeatures(const vector<vector<double> >& f); // provide the features yourself
c@243 48 virtual void segment(); // segment into default number of segment-types
c@243 49 void segment(int m); // segment into m segment-types
c@243 50 int getNSegmentTypes() { return nclusters; }
c@243 51 protected:
c@243 52 //void mpeg7ConstQ();
c@243 53 void makeSegmentation(int* q, int len);
c@243 54
c@245 55 Window<double> *window;
c@245 56 // int windowLength; // in samples
c@245 57 ConstantQ* constq;
c@243 58 model_t* model; // the HMM
c@243 59 //vector<int> stateSequence;
c@243 60 //vector<int> segmentTypeSequence;
c@243 61 int* q; // the decoded HMM state sequence
c@243 62 vector<vector<double> > histograms;
c@243 63
c@243 64 feature_types featureType;
c@243 65 double hopSize; // in seconds
c@243 66 double windowSize; // in seconds
c@243 67
c@243 68 // constant-Q parameters
c@243 69 int fmin;
c@243 70 int fmax;
c@243 71 int nbins;
c@243 72 int ncoeff;
c@243 73
c@243 74 // PCA parameters
c@243 75 int ncomponents;
c@243 76
c@243 77 // HMM parameters
c@243 78 int nHMMStates;
c@243 79
c@243 80 // clustering parameters
c@243 81 int nclusters;
c@243 82 int histogramLength;
c@243 83 int neighbourhoodLimit;
c@243 84 };