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 |