7 |
|
|
8 |
namespace LinuxSampler { |
namespace LinuxSampler { |
9 |
|
|
10 |
static bool bInitialized = false; |
namespace { |
11 |
|
|
12 |
static std::vector<EffectInfo*> vEffectInfos; |
class EffectInfos { |
13 |
|
public: |
14 |
|
EffectInfos(); |
15 |
|
~EffectInfos(); |
16 |
|
void Update(); |
17 |
|
uint Count(); |
18 |
|
EffectInfo* GetEffectInfo(uint index); |
19 |
|
private: |
20 |
|
std::vector<EffectInfo*> infos; |
21 |
|
bool bInitialized; |
22 |
|
}; |
23 |
|
|
24 |
|
EffectInfos::EffectInfos() : bInitialized(false) { |
25 |
|
} |
26 |
|
|
27 |
|
EffectInfos::~EffectInfos() { |
28 |
|
for (int i = 0; i < infos.size(); i++) delete infos[i]; |
29 |
|
} |
30 |
|
|
31 |
|
void EffectInfos::Update() { |
32 |
|
// clear out all old effect infos |
33 |
|
for (int i = 0; i < infos.size(); i++) delete infos[i]; |
34 |
|
|
35 |
|
// scan for LADSPA effects |
36 |
|
infos = LadspaEffect::AvailableEffects(); |
37 |
|
} |
38 |
|
|
39 |
|
uint EffectInfos::Count() { |
40 |
|
if (!bInitialized) { |
41 |
|
Update(); |
42 |
|
bInitialized = true; |
43 |
|
} |
44 |
|
return infos.size(); |
45 |
|
} |
46 |
|
|
47 |
|
EffectInfo* EffectInfos::GetEffectInfo(uint index) { |
48 |
|
if (index >= infos.size()) return NULL; |
49 |
|
return infos[index]; |
50 |
|
} |
51 |
|
|
52 |
|
|
53 |
|
EffectInfos effectInfos; |
54 |
|
|
55 |
|
std::vector<Effect*> vEffectInstances; |
56 |
|
|
57 |
|
} |
58 |
|
|
|
static std::vector<Effect*> vEffectInstances; |
|
59 |
|
|
60 |
//////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////// |
61 |
// class 'EffectFactory' |
// class 'EffectFactory' |
65 |
} |
} |
66 |
|
|
67 |
uint EffectFactory::AvailableEffectsCount() { |
uint EffectFactory::AvailableEffectsCount() { |
68 |
if (!bInitialized) UpdateAvailableEffects(); |
return effectInfos.Count(); |
|
bInitialized = true; |
|
|
return vEffectInfos.size(); |
|
69 |
} |
} |
70 |
|
|
71 |
EffectInfo* EffectFactory::GetEffectInfo(uint index) { |
EffectInfo* EffectFactory::GetEffectInfo(uint index) { |
72 |
if (index >= vEffectInfos.size()) return NULL; |
return effectInfos.GetEffectInfo(index); |
|
return vEffectInfos[index]; |
|
73 |
} |
} |
74 |
|
|
75 |
Effect* EffectFactory::Create(EffectInfo* pEffectInfo) throw (Exception) { |
Effect* EffectFactory::Create(EffectInfo* pEffectInfo) throw (Exception) { |
106 |
} |
} |
107 |
|
|
108 |
void EffectFactory::UpdateAvailableEffects() { |
void EffectFactory::UpdateAvailableEffects() { |
109 |
// clear out all old effect infos |
effectInfos.Update(); |
|
for (int i = 0; i < vEffectInfos.size(); i++) delete vEffectInfos[i]; |
|
|
vEffectInfos.clear(); |
|
|
|
|
|
// scan for LADSPA effects |
|
|
vEffectInfos = LadspaEffect::AvailableEffects(); |
|
110 |
} |
} |
111 |
|
|
112 |
} // namespace LinuxSampler |
} // namespace LinuxSampler |