audacia/src/effects/TwoPassSimpleMono.h

88 lines
2.6 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
TwoPassSimpleMono.h
Dominic Mazzoni
This bit by Martyn Shaw.
**********************************************************************/
#ifndef __AUDACITY_EFFECT_TWOPASSSIMPLEMONO__
#define __AUDACITY_EFFECT_TWOPASSSIMPLEMONO__
#include "SimpleMono.h"
class WaveTrack;
class AUDACITY_DLL_API EffectTwoPassSimpleMono /* not final */ : public Effect
{
public:
// Effect implementation
bool Process() override;
protected:
// EffectTwoPassSimpleMono implementation
// Override these methods if you need to initialize something
// before each pass. Return None if processing should stop.
// These should not depend on mOutputTracks having been set up via CopyInputTracks().
bool InitPass1() override;
bool InitPass2() override;
// NEW virtuals
// Override these methods if you need to do things
// before every track (including the first one)
virtual bool NewTrackPass1();
virtual bool NewTrackPass2();
// Override this method to actually process audio
virtual bool ProcessPass1
(float * WXUNUSED(buffer), size_t WXUNUSED(len))
{ return false; }
virtual bool ProcessPass2
(float * WXUNUSED(buffer), size_t WXUNUSED(len))
{ return false; }
// Override this method to actually process audio with access to 2 sequential buffers at a time
// Either buffer1 or buffer2 may be modified as needed
// This allows implementation of processing with delays
// The default just calls the one-buffer-at-a-time method
virtual bool TwoBufferProcessPass1
(float *buffer1, size_t len1, float * WXUNUSED(buffer2), size_t WXUNUSED(len2))
{ if(buffer1 != NULL) return ProcessPass1(buffer1, len1); else return true; }
virtual bool TwoBufferProcessPass2
(float *buffer1, size_t len1, float * WXUNUSED(buffer2), size_t WXUNUSED(len2))
{ if(buffer1 != NULL) return ProcessPass2(buffer1, len1); else return true; }
// End of NEW virtuals
// Call this if you know in advance that no second pass will be needed.
// This is used as a hint for the progress bar
void DisableSecondPass() { mSecondPassDisabled = true; }
// Other useful information
int mCurTrackNum;
double mCurRate;
double mCurT0;
double mCurT1;
int mCurChannel;
int mPass;
bool mSecondPassDisabled;
std::shared_ptr<TrackList> mWorkTracks;
std::shared_ptr<TrackList> *mTrackLists[2];
private:
bool ProcessOne(WaveTrack * t, WaveTrack * outTrack,
sampleCount start, sampleCount end);
bool ProcessPass() override;
};
#endif