diff dsp/segmentation/SavedFeatureSegmenter.h @ 243:dc30e3864ceb

* merge in segmentation code from soundbite plugin/library repository
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 09 Jan 2008 10:46:25 +0000
parents
children 8bdbda7fb893
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dsp/segmentation/SavedFeatureSegmenter.h	Wed Jan 09 10:46:25 2008 +0000
@@ -0,0 +1,61 @@
+/*
+ *  SavedFeatureSegmenter.h
+ *  soundbite
+ *
+ *  Created by Mark Levy on 23/03/2006.
+ *  Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved.
+ *
+ */
+
+#include <vector>
+
+#include "segment.h"
+#include "Segmenter.h"
+#include "hmm.h"
+
+using std::vector;
+
+class SavedFeatureSegmenterParams		
+{
+public:
+	SavedFeatureSegmenterParams() : hopSize(0.2), windowSize(0.6), 
+	nHMMStates(40), nclusters(10), histogramLength(15), neighbourhoodLimit(20) { }
+	double hopSize;		// in secs
+	double windowSize;	// in secs
+	int nHMMStates;
+	int nclusters;
+	int histogramLength;
+	int neighbourhoodLimit;
+};
+
+class SavedFeatureSegmenter : public Segmenter
+{
+public:
+	SavedFeatureSegmenter(SavedFeatureSegmenterParams params);
+	virtual ~SavedFeatureSegmenter();
+	virtual void initialise(int samplerate);
+	virtual int getWindowsize() { return static_cast<int>(windowSize * samplerate); }
+	virtual int getHopsize() { return static_cast<int>(hopSize * samplerate); }
+	virtual void extractFeatures(double* samples, int nsamples) { }
+	void setFeatures(const vector<vector<double> >& f);		// provide the features yourself
+	virtual void segment();		// segment into default number of segment-types
+	void segment(int m);		// segment into m segment-types
+	int getNSegmentTypes() { return nclusters; }
+protected:
+	void makeSegmentation(int* q, int len);
+	
+	model_t* model;				// the HMM
+	int* q;						// the decoded HMM state sequence
+	vector<vector<double> > histograms;	
+	
+	double hopSize;		// in seconds
+	double windowSize;	// in seconds
+	
+	// HMM parameters
+	int nHMMStates;
+	
+	// clustering parameters
+	int nclusters;
+	int histogramLength;
+	int neighbourhoodLimit;
+};
\ No newline at end of file