29{
XO(
"Stereo To Mono") };
50 return XO(
"Converts stereo tracks to mono");
88 bool bGoodResult =
true;
94 auto trackRange = outputs.Get().Selected<
WaveTrack>();
95 for (
const auto left : trackRange) {
96 if (left->Channels().size() > 1) {
97 auto start = left->TimeToLongSamples(left->GetStartTime());
98 auto end = left->TimeToLongSamples(left->GetEndTime());
99 totalTime += (
end - start);
105 bool refreshIter =
false;
111 while (trackRange.first != trackRange.second) {
112 auto track = *trackRange.first;
113 if (track->Channels().size() > 1) {
114 if (!
ProcessOne(outputs.Get(), curTime, totalTime, *track))
121 trackRange = outputs.Get().Selected<
WaveTrack>();
162 assert(outTrack->IsLeader());
166 while (
auto blockLen = mixer.Process()) {
167 auto buffer = mixer.GetBuffer();
168 for (
auto i = 0; i < blockLen; i++)
169 ((
float *)buffer)[i] /= denominator;
184 assert(unlinkedTracks.size() == 2);
185 outputs.
Remove(*unlinkedTracks[1]);
188 track.
Paste(start, *outTrack);
std::vector< MixerOptions::StageSpecification > GetEffectStages(const WaveTrack &track)
virtual void SetMessage(const TranslatableString &message)=0
Change an existing dialog's message.
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
const TrackList * inputTracks() const
BasicUI::ProgressDialog * mProgress
std::shared_ptr< TrackList > mTracks
bool TotalProgress(double frac, const TranslatableString &={}) const
Performs effect computation.
Use this object to copy the input tracks to tentative outputTracks.
unsigned GetAudioOutCount() const override
How many output buffers to allocate at once.
bool IsInteractive() const override
Whether the effect needs a dialog for entry of settings.
unsigned GetAudioInCount() const override
How many input buffers to allocate at once.
ComponentInterfaceSymbol GetSymbol() const override
static const ComponentInterfaceSymbol Symbol
bool Process(EffectInstance &instance, EffectSettings &settings) override
TranslatableString GetDescription() const override
bool ProcessOne(TrackList &outputs, sampleCount &curTime, sampleCount totalTime, WaveTrack &track)
bool IsHiddenFromMenus() const override
Default is false.
EffectType GetType() const override
Type determines how it behaves.
virtual ~EffectStereoToMono()
Functions for doing the mixdown of the tracks.
std::vector< Input > Inputs
static RealtimeEffectList & Get(AudacityProject &project)
void Clear()
Use only in the main thread. Sends Remove messages.
std::shared_ptr< Subclass > SharedPointer()
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
void Remove(Track &track)
Remove a channel group, given the leader.
std::vector< Track * > UnlinkChannels(Track &track)
Removes linkage if track belongs to a group.
AudacityProject * GetOwner()
static TrackListHolder Temporary(AudacityProject *pProject, const Track::Holder &left={}, const Track::Holder &right={})
Holds a msgid for the translation catalog; may also bind format arguments.
A Track that contains audio waveform data.
double GetStartTime() const override
Implement WideSampleSequence.
void Clear(double t0, double t1) override
void Paste(double t0, const Track &src) override
double GetEndTime() const override
Implement WideSampleSequence.
double GetRate() const override
float GetChannelGain(int channel) const override
Takes gain and pan into account.
size_t GetMaxBlockSize() const
Holder EmptyCopy(const SampleBlockFactoryPtr &pFactory={}, bool keepLink=true) const
Positions or offsets within audio files need a wide type.
auto end(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
BuiltinEffectsModule::Registration< EffectStereoToMono > reg
Externalized state of a plug-in.
Immutable structure is an argument to Mixer's constructor.