-
Notifications
You must be signed in to change notification settings - Fork 1
/
TGEffectBend.h
82 lines (60 loc) · 1.4 KB
/
TGEffectBend.h
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
#ifndef TG_EFFECT_BEND_H
#define TG_EFFECT_BEND_H
#include "TGFactory.h"
#include <list>
#define TGEffectBend_SEMITONE_LENGTH 1
#define TGEffectBend_MAX_POSITION_LENGTH 12
#define TGEffectBend_MAX_VALUE_LENGTH (SEMITONE_LENGTH * 12)
class BendPoint
{
protected:
int position;
int value;
public:
BendPoint() {
position = 0;
value = 0;
}
BendPoint(int aPosition,int aValue){
position = aPosition;
value = aValue;
}
int getPosition() {
return position;
}
int getValue() {
return value;
}
long getTime(long duration){
return (duration * getPosition() / TGEffectBend_MAX_POSITION_LENGTH);
}
};
typedef std::list<BendPoint, dumb_allocator<BendPoint> > BendPointList;
class TGEffectBend
{
public:
protected:
BendPointList points;
public:
TGEffectBend(){
}
void addPoint(int position,int value){
points.push_back(BendPoint(position,value));
}
void addPoint(BendPoint& aPoint)
{
points.push_back(aPoint);
}
BendPointList* getPoints(){
return &points;
}
TGEffectBend *clone(TGFactory *factory){
TGEffectBend *effect = factory->newEffectBend();
for ( BendPointList::iterator i=points.begin(); i != points.end(); ++i)
{
effect->addPoint( *i );
}
return effect;
}
};
#endif