/usr/include/CLAM/Segment.hxx is in libclam-dev 1.4.0-5build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | /*
* Copyright (c) 2001-2004 MUSIC TECHNOLOGY GROUP (MTG)
* UNIVERSITAT POMPEU FABRA
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef _Segment_
#define _Segment_
#include "Frame.hxx"
#include "DataTypes.hxx"
#include "List.hxx"
#include "Search.hxx"
#include "ProcessingData.hxx"
#include "Audio.hxx"
namespace CLAM
{
typedef Search < List < Frame >, Frame> FrameSearch;
/** Processing Data class to encapsulate a CLAM segment. A Segment is basically an ordered
* list of Frames (@see Frame). It also has a BeginTime and EndTime time tags, an associated
* Audio (usually a large audio chunk from which smaller Audio Frames are obtained) and
* a global SamplingRate. Note: time unit is miliseconds.
* Appart from these internal Processing Data, a Segment also holds a list of child segments
* named Children. These are usually smaller segments that result from applying some sort of
* segmentation algorithm to the original Segment. These children do not hold data (namely
* Frames and Audio. The boolean value HoldsData gives account whether the segment has data
* (i.e. is the parent) or not. The Id string may be used for different purposes such as classifying
* different kinds of segments. Finally the child segments also have a pointer to their
* parent to be able to access the data.
* @see Audio, Frame, ProcessingData, List*/
class Segment : public ProcessingData
{
public:
DYNAMIC_TYPE_USING_INTERFACE (Segment, 8, ProcessingData);
/** Begin time in miliseconds*/
DYN_ATTRIBUTE (0, public, TTime, BeginTime);
/** End time in miliseconds */
DYN_ATTRIBUTE (1, public, TTime, EndTime);
DYN_ATTRIBUTE (2, private, bool, prHoldsData);
DYN_ATTRIBUTE (3, private, List<Frame>, prFramesArray);
DYN_ATTRIBUTE (4, public, Audio, Audio);
DYN_ATTRIBUTE (5, public, List<Segment>, Children);
DYN_ATTRIBUTE (6, public, TData, SamplingRate);
DYN_ATTRIBUTE (7, public, std::string, Id);
private:
/** Auxiliary class for performing searches in ordered list of frames*/
FrameSearch mFramesSearch;
/** Pointer to parent segment*/
Segment* pParent;
public:
void AddFramesArray()
{
AddprFramesArray();
}
void RemoveFramesArray()
{
RemoveprFramesArray();
}
void SetFramesArray(const List<Frame>& frames)
{
SetprFramesArray(frames);
GetFramesSearch().Set(GetprFramesArray());
}
const List<Frame>& GetFramesArray() const {return GetprFramesArray();}
List<Frame>& GetFramesArray() {return GetprFramesArray();}
/** Index used when processing for keeeping trace of current location in Frame list*/
TIndex mCurrentFrameIndex;
/** Getter for accessing parent segment*/
Segment* GetpParent(){return pParent;}
/** Setter for parent segment*/
void SetpParent(Segment* newParent){pParent=newParent;}
void DefaultInit();
public:
void CopyInit(const Segment& prototype);
/** Returns the number of frames in segment*/
int GetnFrames() const;
//Interface for accessing and modifying frames
/** Returns a reference to the frame found in a given position. Time in miliseconds
* @see const Frame& GetFrame(TIndex pos) const
* @see GetFrame(TTime time)
*/
Frame& GetFrame(TIndex pos);
/** Returns a constant reference to the frame found in a given position. */
const Frame& GetFrame(TIndex pos) const;
/** Adds a new frame at the end of the segment. Note that this operation copies the frame. */
void AddFrame(Frame& newFrame); // XXX: should really be a const reference as the frame is copied
/** Deletes frame in a given position. */
void DeleteFrame(TIndex pos);
/** Finds frame with center time closest to the one given. Time in miliseconds
* @return position of frame in segment
*/
TIndex FindFrame(TTime time) const;
/** Returns a reference to the frame with center time closest to the one passed. Time in miliseconds.
* @see const Frame& GetFrame(TTime time) const
* @see GetFrame(TIndex pos)
*/
Frame& GetFrame(TTime time);
/** Returns a reference to the frame with center time closest to the one passed. Time in miliseconds.
* @see Frame& GetFrame(TTime time)
*/
const Frame& GetFrame(TTime time) const;
/** Deletes frame with center time closest to the one passed. Time in miliseconds
* @see DeletFrame(TIndex pos)
*/
void DeleteFrame(TTime time);
/** Interface for setting the prHoldData member and
* configuring the Segment accordingly
*/
void SetHoldsData(bool HoldsData);
/** Interface for accessing the prHoldData private
* member
*/
bool GetHoldsData() const {return GetprHoldsData();}
private:
/** Internal convenience method */
void SetFramesSearch (const FrameSearch & frame)
{
mFramesSearch=frame;
}
/** Internal convenience method */
const FrameSearch & GetFramesSearch () const
{
return mFramesSearch;
}
/** Internal convenience method */
FrameSearch & GetFramesSearch ()
{
return mFramesSearch;
}
/** Internal convenience method */
void CopyDataFromParent();
void DefaultValues();
};
} //namespace CLAM
#endif
|