Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
audacity
GitHub Repository: audacity/audacity
Path: blob/master/au3/libraries/lib-ladspa/LadspaInstance.h
10849 views
1
/**********************************************************************
2
3
Audacity: A Digital Audio Editor
4
5
LadspaInstance.h
6
7
Dominic Mazzoni
8
Paul Licameli split from LadspaEffect.cpp
9
10
**********************************************************************/
11
#ifndef __AUDACITY_LADSPA_INSTANCE__
12
#define __AUDACITY_LADSPA_INSTANCE__
13
14
#include "PerTrackEffect.h"
15
#include "ladspa.h"
16
17
struct LadspaEffectSettings {
18
explicit LadspaEffectSettings(size_t nPorts = 0)
19
: controls(nPorts)
20
{}
21
22
// Allocate as many slots as there are ports, although some may correspond
23
// to audio, not control, ports and so rest unused
24
std::vector<float> controls;
25
};
26
27
//! Carry output control port information back to main thread
28
struct LADSPA_API LadspaEffectOutputs : EffectOutputs {
29
~LadspaEffectOutputs() override;
30
std::unique_ptr<EffectOutputs> Clone() const override;
31
32
void Assign(EffectOutputs&& src) override;
33
34
// Allocate as many slots as there are ports, although some may correspond
35
// to input and audio ports and remain unused
36
std::vector<float> controls;
37
};
38
39
struct LADSPA_API LadspaInstance : PerTrackEffect::Instance, EffectInstanceWithBlockSize
40
{
41
//! Get the preference for using latency
42
static bool LoadUseLatency(
43
const EffectDefinitionInterface& effect);
44
//! Set the preference for using latency
45
static bool SaveUseLatency(
46
const EffectDefinitionInterface& effect, bool value);
47
48
//! Assume settings originated from MakeSettings() and copies thereof
49
static inline LadspaEffectSettings& GetSettings(EffectSettings& settings)
50
{
51
auto pSettings = settings.cast<LadspaEffectSettings>();
52
assert(pSettings);
53
return *pSettings;
54
}
55
56
//! Assume settings originated from MakeSettings() and copies thereof
57
static inline const LadspaEffectSettings&
58
GetSettings(const EffectSettings& settings)
59
{
60
return GetSettings(const_cast<EffectSettings&>(settings));
61
}
62
63
LadspaInstance(const PerTrackEffect& processor, const LADSPA_Descriptor* pData, const ArrayOf<unsigned long>& inputPorts,
64
const ArrayOf<unsigned long>& outputPorts, unsigned audioIns, unsigned audioOuts, int latencyPort);
65
bool ProcessInitialize(EffectSettings& settings, double sampleRate, ChannelNames chanMap) override;
66
bool ProcessFinalize() noexcept override;
67
size_t ProcessBlock(EffectSettings& settings, const float* const* inBlock, float* const* outBlock, size_t blockLen)
68
override;
69
70
SampleCount GetLatency(const EffectSettings& settings, double sampleRate)
71
const override;
72
73
bool RealtimeInitialize(EffectSettings& settings, double sampleRate)
74
override;
75
bool RealtimeAddProcessor(EffectSettings& settings, EffectOutputs* pOutputs, unsigned numChannels, float sampleRate)
76
override;
77
bool RealtimeSuspend() override;
78
bool RealtimeResume() override;
79
bool RealtimeProcessStart(MessagePackage& package) override;
80
size_t RealtimeProcess(size_t group, EffectSettings& settings, const float* const* inBuf, float* const* outBuf, size_t numSamples)
81
override;
82
bool RealtimeProcessEnd(EffectSettings& settings) noexcept override;
83
bool RealtimeFinalize(EffectSettings& settings) noexcept override;
84
85
unsigned GetAudioInCount() const override;
86
unsigned GetAudioOutCount() const override;
87
88
LADSPA_Handle InitInstance(
89
float sampleRate, LadspaEffectSettings& settings, LadspaEffectOutputs* pOutputs) const;
90
void FreeInstance(LADSPA_Handle handle) const;
91
92
const LADSPA_Descriptor* const mData;
93
const ArrayOf<unsigned long>& mInputPorts;
94
const ArrayOf<unsigned long>& mOutputPorts;
95
96
bool mReady{ false };
97
LADSPA_Handle mMaster{};
98
99
// Realtime processing
100
std::vector<LADSPA_Handle> mSlaves;
101
102
const unsigned mAudioIns;
103
const unsigned mAudioOuts;
104
const int mLatencyPort;
105
const bool mUseLatency;
106
};
107
108
#endif
109
110