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