12#ifndef __AUDACITY_MIX__
13#define __AUDACITY_MIX__
35 using Stages = std::vector<MixerOptions::StageSpecification>;
39 std::shared_ptr<const WideSampleSequence> pSequence = {},
41 ) : pSequence{ move(pSequence) }, stages{ move(stages) }
44 std::shared_ptr<const WideSampleSequence>
pSequence;
67 Inputs inputs, std::optional<Stages>
masterEffects,
bool mayThrow,
68 const WarpOptions& warpOptions,
double startTime,
double stopTime,
69 unsigned numOutChannels,
size_t outBufferSize,
bool outInterleaved,
70 double outRate,
sampleFormat outFormat,
bool highQuality =
true,
73 ApplyGain applyGain = ApplyGain::MapChannels);
94 size_t Process(
size_t maxSamples);
102 void Reposition(
double t,
bool bSkipping =
false);
105 void SetTimesAndSpeed(
106 double t0,
double t1,
double speed,
bool bSkipping =
false);
107 void SetSpeedForKeyboardScrubbing(
double speed,
double startTime);
111 double MixGetCurrentTime();
130 std::optional<size_t>
Acquire(Buffers& data,
size_t bound)
override;
135 std::unique_ptr<EffectStage>& RegisterEffectStage(
147 std::pair<bool, sampleFormat>
148 NeedsDither(
bool needsDither,
double rate)
const;
161 bool mHasMixerSpec{
false};
181 std::vector<std::unique_ptr<EffectStage>>
mStages;
static const AttachedProjectObjects::RegisteredFactory masterEffects
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.
Decorates a source with a non-timewarping effect, which may have latency.
Functions for doing the mixdown of the tracks.
AudioGraph::Buffers mFloatBuffers
const ApplyGain mApplyGain
std::vector< EffectSettings > mSettings
const std::vector< SampleBuffer > mBuffer
std::vector< AudioGraph::Source * > mMasterStages
std::vector< Input > Inputs
std::vector< std::unique_ptr< EffectStage > > mStages
std::vector< Source > mDecoratedSources
const sampleFormat mFormat
AudioGraph::Buffers mTemp
const unsigned mNumChannels
sampleFormat mEffectiveFormat
std::vector< MixerOptions::StageSpecification > Stages
const std::optional< Stages > mMasterEffects
Mixer(const Mixer &)=delete
std::vector< AudioGraph::Buffers > mStageBuffers
std::vector< MixerSource > mSources
size_t BufferSize() const
Mixer & operator=(const Mixer &)=delete
const std::shared_ptr< TimesAndSpeed > mTimesAndSpeed
A matrix of booleans, one row per input channel, column per output.
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
Positions or offsets within audio files need a wide type.
AudioGraph::Source & downstream
Immutable structure is an argument to Mixer's constructor.