Mercurial > hg > qm-dsp
annotate dsp/segmentation/Segmenter.h @ 114:f6ccde089491 pvoc
Tidy real-to-complex FFT -- forward and inverse have different arguments, so make them separate functions; document
| author | Chris Cannam |
|---|---|
| date | Wed, 02 Oct 2013 15:04:38 +0100 |
| parents | e5907ae6de17 |
| children | 175e51ae78eb |
| rev | line source |
|---|---|
| cannam@18 | 1 #ifndef _SEGMENTER_H |
| cannam@18 | 2 #define _SEGMENTER_H |
| cannam@18 | 3 |
| cannam@18 | 4 /* |
| cannam@18 | 5 * Segmenter.h |
| cannam@18 | 6 * soundbite |
| cannam@18 | 7 * |
| cannam@18 | 8 * Created by Mark Levy on 23/03/2006. |
| Chris@84 | 9 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. |
| Chris@84 | 10 |
| Chris@84 | 11 This program is free software; you can redistribute it and/or |
| Chris@84 | 12 modify it under the terms of the GNU General Public License as |
| Chris@84 | 13 published by the Free Software Foundation; either version 2 of the |
| Chris@84 | 14 License, or (at your option) any later version. See the file |
| Chris@84 | 15 COPYING included with this distribution for more information. |
| cannam@18 | 16 * |
| cannam@18 | 17 */ |
| cannam@18 | 18 |
| cannam@18 | 19 #include <vector> |
| cannam@18 | 20 #include <iostream> |
| cannam@18 | 21 |
| cannam@18 | 22 using std::vector; |
| cannam@18 | 23 using std::ostream; |
| cannam@18 | 24 |
| cannam@18 | 25 class Segment |
| cannam@18 | 26 { |
| cannam@18 | 27 public: |
| cannam@18 | 28 int start; // in samples |
| cannam@18 | 29 int end; |
| cannam@18 | 30 int type; |
| cannam@18 | 31 }; |
| cannam@18 | 32 |
| cannam@18 | 33 class Segmentation |
| cannam@18 | 34 { |
| cannam@18 | 35 public: |
| cannam@18 | 36 int nsegtypes; // number of segment types, so possible types are {0,1,...,nsegtypes-1} |
| cannam@18 | 37 int samplerate; |
| cannam@18 | 38 vector<Segment> segments; |
| cannam@18 | 39 }; |
| cannam@18 | 40 |
| cannam@18 | 41 ostream& operator<<(ostream& os, const Segmentation& s); |
| cannam@18 | 42 |
| cannam@18 | 43 class Segmenter |
| cannam@18 | 44 { |
| cannam@18 | 45 public: |
| cannam@18 | 46 Segmenter() {} |
| cannam@18 | 47 virtual ~Segmenter() {} |
| cannam@18 | 48 virtual void initialise(int samplerate) = 0; // must be called before any other methods |
| cannam@18 | 49 virtual int getWindowsize() = 0; // required window size for calls to extractFeatures() |
| cannam@18 | 50 virtual int getHopsize() = 0; // required hop size for calls to extractFeatures() |
| cannam@24 | 51 virtual void extractFeatures(const double* samples, int nsamples) = 0; |
| cannam@18 | 52 virtual void segment() = 0; // call once all the features have been extracted |
| cannam@18 | 53 virtual void segment(int m) = 0; // specify desired number of segment-types |
| cannam@18 | 54 virtual void clear() { features.clear(); } |
| cannam@18 | 55 const Segmentation& getSegmentation() const { return segmentation; } |
| cannam@18 | 56 protected: |
| cannam@18 | 57 vector<vector<double> > features; |
| cannam@18 | 58 Segmentation segmentation; |
| cannam@18 | 59 int samplerate; |
| cannam@18 | 60 }; |
| cannam@18 | 61 |
| cannam@18 | 62 #endif |
