15#ifndef __AUDACITY_EFFECT_STAGE__
16#define __AUDACITY_EFFECT_STAGE__
30 using Factory = std::function<std::shared_ptr<EffectInstance>()>;
50 static std::unique_ptr<EffectStage> Create(
int channel,
51 Source &upstream,
Buffers &inBuffers,
68 std::optional<size_t>
Acquire(
Buffers &data,
size_t bound)
override;
74 {
return std::max<sampleCount>(0, mDelayRemaining); }
84 const Buffers &data,
size_t curBlockSize,
size_t outBufferOffset)
const;
86 [[nodiscard]] std::optional<size_t> FetchProcessAndAdvance(
87 Buffers &data,
size_t bound,
bool doZeros,
size_t outBufferOffset = 0);
92 const std::vector<std::shared_ptr<EffectInstance>>
mInstances;
98 size_t mLastProduced{};
100 bool mLatencyDone{
false };
101 bool mCleared{
false };
MIXER_API unsigned MakeChannelMap(const WideSampleSequence &sequence, int channel, ChannelName map[3])
static Settings & settings()
Accumulates (non-interleaved) data during effect processing.
Upstream producer of sample streams, taking Buffers as external context.
virtual sampleCount Remaining() const =0
Result includes any amount Acquired and not yet Released.
virtual bool AcceptsBlockSize(size_t blockSize) const =0
virtual bool AcceptsBuffers(const Buffers &buffers) const =0
virtual std::optional< size_t > Acquire(Buffers &data, size_t bound)=0
Occupy vacant space in Buffers with some data.
virtual bool Release()=0
Caller is done examining last Acquire()d positions.
Performs effect computation.
Decorates a source with a non-timewarping effect, which may have latency.
const std::vector< std::shared_ptr< EffectInstance > > mInstances
sampleCount mDelayRemaining
EffectStage(const EffectStage &)=delete
std::function< std::shared_ptr< EffectInstance >()> Factory
sampleCount DelayRemaining() const
EffectSettings & mSettings
Positions or offsets within audio files need a wide type.
constexpr auto sampleRate
static RegisteredToolbarFactory factory
Externalized state of a plug-in.