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@309
|
9 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London.
|
c@309
|
10
|
c@309
|
11 This program is free software; you can redistribute it and/or
|
c@309
|
12 modify it under the terms of the GNU General Public License as
|
c@309
|
13 published by the Free Software Foundation; either version 2 of the
|
c@309
|
14 License, or (at your option) any later version. See the file
|
c@309
|
15 COPYING included with this distribution for more information.
|
c@243
|
16 *
|
c@243
|
17 */
|
c@243
|
18
|
c@243
|
19 #include <vector>
|
c@243
|
20 #include <iostream>
|
c@243
|
21
|
c@243
|
22 using std::vector;
|
c@243
|
23 using std::ostream;
|
c@243
|
24
|
c@243
|
25 class Segment
|
c@243
|
26 {
|
c@243
|
27 public:
|
c@243
|
28 int start; // in samples
|
c@243
|
29 int end;
|
c@243
|
30 int type;
|
c@243
|
31 };
|
c@243
|
32
|
c@243
|
33 class Segmentation
|
c@243
|
34 {
|
c@243
|
35 public:
|
c@243
|
36 int nsegtypes; // number of segment types, so possible types are {0,1,...,nsegtypes-1}
|
c@243
|
37 int samplerate;
|
c@243
|
38 vector<Segment> segments;
|
c@243
|
39 };
|
c@243
|
40
|
c@243
|
41 ostream& operator<<(ostream& os, const Segmentation& s);
|
c@243
|
42
|
c@243
|
43 class Segmenter
|
c@243
|
44 {
|
c@243
|
45 public:
|
c@243
|
46 Segmenter() {}
|
c@243
|
47 virtual ~Segmenter() {}
|
c@243
|
48 virtual void initialise(int samplerate) = 0; // must be called before any other methods
|
c@243
|
49 virtual int getWindowsize() = 0; // required window size for calls to extractFeatures()
|
c@243
|
50 virtual int getHopsize() = 0; // required hop size for calls to extractFeatures()
|
c@249
|
51 virtual void extractFeatures(const double* samples, int nsamples) = 0;
|
c@243
|
52 virtual void segment() = 0; // call once all the features have been extracted
|
c@243
|
53 virtual void segment(int m) = 0; // specify desired number of segment-types
|
c@243
|
54 virtual void clear() { features.clear(); }
|
c@243
|
55 const Segmentation& getSegmentation() const { return segmentation; }
|
c@243
|
56 protected:
|
c@243
|
57 vector<vector<double> > features;
|
c@243
|
58 Segmentation segmentation;
|
c@243
|
59 int samplerate;
|
c@243
|
60 };
|
c@243
|
61
|
c@243
|
62 #endif
|