blob: c9f646f1fa3a8c9c63f5e1ce4929ff90e550933b (
plain)
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
|
#pragma once
#include <QObject>
#include <QMap>
#include <QList>
#include <QDomDocument>
#include "effects/defs.h"
#include "engine/channelhandle.h"
#include "effects/effect.h"
#include "util/class.h"
class EffectsManager;
class EngineEffectRack;
class EngineEffectChain;
class EffectChain;
typedef QSharedPointer<EffectChain> EffectChainPointer;
// The main-thread representation of an effect chain. This class is NOT
// thread-safe and must only be used from the main thread.
class EffectChain : public QObject {
Q_OBJECT
public:
EffectChain(EffectsManager* pEffectsManager, const QString& id,
EffectChainPointer prototype=EffectChainPointer());
virtual ~EffectChain();
void addToEngine(EngineEffectRack* pRack, int iIndex);
void removeFromEngine(EngineEffectRack* pRack, int iIndex);
void updateEngineState();
// The ID of an EffectChain is a unique ID given to it to help associate it
// with the preset from which it was loaded.
const QString& id() const;
// Whether the chain is enabled (eligible for processing).
bool enabled() const;
void setEnabled(bool enabled);
// Activates EffectChain processing for the provided channel.
void enableForInputChannel(const ChannelHandleAndGroup& handleGroup);
bool enabledForChannel(const ChannelHandleAndGroup& handleGroup) const;
const QSet<ChannelHandleAndGroup>& enabledChannels() const;
void disableForInputChannel(const ChannelHandleAndGroup& handleGroup);
EffectChainPointer prototype() const;
// Get the human-readable name of the EffectChain
const QString& name() const;
void setName(const QString& name);
// Get the human-readable description of the EffectChain
QString description() const;
void setDescription(const QString& description);
double mix() const;
void setMix(const double& dMix);
static QString mixModeToString(EffectChainMixMode type) {
switch (type) {
case EffectChainMixMode::DrySlashWet:
return "DRY/WET";
case EffectChainMixMode::DryPlusWet:
return "DRY+WET";
default:
return "UNKNOWN";
}
}
static EffectChainMixMode mixModeFromString(const QString& typeStr) {
if (typeStr == "DRY/WET") {
return EffectChainMixMode::DrySlashWet;
} else if (typeStr == "DRY+WET") {
return EffectChainMixMode::DryPlusWet;
} else {
return EffectChainMixMode::NumMixModes;
}
}
EffectChainMixMode mixMode() const;
void setMixMode(EffectChainMixMode type);
void addEffect(EffectPointer pEffect);
void replaceEffect(unsigned int effectSlotNumber, EffectPointer pEffect);
void removeEffect(unsigned int effectSlotNumber);
void refreshAllEffects();
const QList<EffectPointer>& effects() const;
unsigned int numEffects() const;
EngineEffectChain* getEngineEffectChain();
static EffectChainPointer createFromXml(EffectsManager* pEffectsManager,
const QDomElement& element);
static EffectChainPointer clone(EffectChainPointer pChain);
signals:
// Signal that indicates that an effect has been added or removed.
void effectChanged(unsigned int effectSlotNumber);
void nameChanged(const QString& name);
void descriptionChanged(const QString& name);
void enabledChanged(bool enabled);
void mixChanged(double v);
void mixModeChanged(EffectChainMixMode type);
void channelStatusChanged(const QString& group, bool enabled);
private:
QString debugString() const {
return QString("EffectChain(%1)").arg(m_id);
}
void sendParameterUpdate();
EffectsManager* m_pEffectsManager;
EffectChainPointer m_pPrototype;
bool m_bEnabled;
QString m_id;
QString m_name;
QString m_description;
EffectChainMixMode m_mixMode;
double m_dMix;
QSet<ChannelHandleAndGroup> m_enabledInputChannels;
QList<EffectPointer> m_effects;
EngineEffectChain* m_pEngineEffectChain;
bool m_bAddedToEngine;
DISALLOW_COPY_AND_ASSIGN(EffectChain);
};
|