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@489
|
17 #ifndef QM_DSP_SEGMENTER_H
|
cannam@489
|
18 #define QM_DSP_SEGMENTER_H
|
cannam@484
|
19
|
c@243
|
20 #include <vector>
|
c@243
|
21 #include <iostream>
|
c@243
|
22
|
c@243
|
23 class Segment
|
c@243
|
24 {
|
c@243
|
25 public:
|
cannam@480
|
26 int start; // in samples
|
cannam@480
|
27 int end;
|
cannam@480
|
28 int type;
|
c@243
|
29 };
|
c@243
|
30
|
c@243
|
31 class Segmentation
|
c@243
|
32 {
|
c@243
|
33 public:
|
cannam@480
|
34 int nsegtypes; // number of segment types, so possible types are {0,1,...,nsegtypes-1}
|
cannam@480
|
35 int samplerate;
|
cannam@493
|
36 std::vector<Segment> segments;
|
c@243
|
37 };
|
c@243
|
38
|
cannam@493
|
39 std::ostream& operator<<(std::ostream& os, const Segmentation& s);
|
c@243
|
40
|
c@243
|
41 class Segmenter
|
c@243
|
42 {
|
c@243
|
43 public:
|
cannam@480
|
44 Segmenter() {}
|
cannam@480
|
45 virtual ~Segmenter() {}
|
cannam@480
|
46 virtual void initialise(int samplerate) = 0; // must be called before any other methods
|
cannam@480
|
47 virtual int getWindowsize() = 0; // required window size for calls to extractFeatures()
|
cannam@480
|
48 virtual int getHopsize() = 0; // required hop size for calls to extractFeatures()
|
cannam@480
|
49 virtual void extractFeatures(const double* samples, int nsamples) = 0;
|
cannam@480
|
50 virtual void segment() = 0; // call once all the features have been extracted
|
cannam@480
|
51 virtual void segment(int m) = 0; // specify desired number of segment-types
|
cannam@480
|
52 virtual void clear() { features.clear(); }
|
cannam@480
|
53 const Segmentation& getSegmentation() const { return segmentation; }
|
c@243
|
54 protected:
|
cannam@493
|
55 std::vector<std::vector<double> > features;
|
cannam@480
|
56 Segmentation segmentation;
|
cannam@480
|
57 int samplerate;
|
c@243
|
58 };
|
c@243
|
59
|
c@243
|
60 #endif
|