annotate dsp/segmentation/Segmenter.h @ 298:255e431ae3d4

* Key detector: when returning key strengths, use the peak value of the three underlying chromagram correlations (from 36-bin chromagram) corresponding to each key, instead of the mean. Rationale: This is the same method as used when returning the key value, and it's nice to have the same results in both returned value and plot. The peak performed better than the sum with a simple test set of triads, so it seems reasonable to change the plot to match the key output rather than the other way around. * FFT: kiss_fftr returns only the non-conjugate bins, synthesise the rest rather than leaving them (perhaps dangerously) undefined. Fixes an uninitialised data error in chromagram that could cause garbage results from key detector. * Constant Q: remove precalculated values again, I reckon they're not proving such a good tradeoff.
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 05 Jun 2009 15:12:39 +0000
parents 18a0dffa5c1a
children e5907ae6de17
rev   line source
c@243 1 #ifndef _SEGMENTER_H
c@243 2 #define _SEGMENTER_H
c@243 3
c@243 4 /*
c@243 5 * Segmenter.h
c@243 6 * soundbite
c@243 7 *
c@243 8 * Created by Mark Levy on 23/03/2006.
c@243 9 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved.
c@243 10 *
c@243 11 */
c@243 12
c@243 13 #include <vector>
c@243 14 #include <iostream>
c@243 15
c@243 16 using std::vector;
c@243 17 using std::ostream;
c@243 18
c@243 19 class Segment
c@243 20 {
c@243 21 public:
c@243 22 int start; // in samples
c@243 23 int end;
c@243 24 int type;
c@243 25 };
c@243 26
c@243 27 class Segmentation
c@243 28 {
c@243 29 public:
c@243 30 int nsegtypes; // number of segment types, so possible types are {0,1,...,nsegtypes-1}
c@243 31 int samplerate;
c@243 32 vector<Segment> segments;
c@243 33 };
c@243 34
c@243 35 ostream& operator<<(ostream& os, const Segmentation& s);
c@243 36
c@243 37 class Segmenter
c@243 38 {
c@243 39 public:
c@243 40 Segmenter() {}
c@243 41 virtual ~Segmenter() {}
c@243 42 virtual void initialise(int samplerate) = 0; // must be called before any other methods
c@243 43 virtual int getWindowsize() = 0; // required window size for calls to extractFeatures()
c@243 44 virtual int getHopsize() = 0; // required hop size for calls to extractFeatures()
c@249 45 virtual void extractFeatures(const double* samples, int nsamples) = 0;
c@243 46 virtual void segment() = 0; // call once all the features have been extracted
c@243 47 virtual void segment(int m) = 0; // specify desired number of segment-types
c@243 48 virtual void clear() { features.clear(); }
c@243 49 const Segmentation& getSegmentation() const { return segmentation; }
c@243 50 protected:
c@243 51 vector<vector<double> > features;
c@243 52 Segmentation segmentation;
c@243 53 int samplerate;
c@243 54 };
c@243 55
c@243 56 #endif