audacia/src/effects/TwoPassSimpleMono.h

72 lines
2.3 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 EffectTwoPassSimpleMono:public Effect {
public:
virtual bool Process();
private:
bool ProcessOne(WaveTrack * t,
sampleCount start, sampleCount end);
bool ProcessPass();
protected:
// 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().
virtual bool InitPass1();
virtual bool InitPass2();
// 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), sampleCount WXUNUSED(len)) { return false; }
virtual bool ProcessPass2(float * WXUNUSED(buffer), sampleCount 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, sampleCount len1, float * WXUNUSED(buffer2), sampleCount WXUNUSED(len2))
{ if(buffer1 != NULL) return ProcessPass1(buffer1, len1); else return true; }
virtual bool TwoBufferProcessPass2(float *buffer1, sampleCount len1, float * WXUNUSED(buffer2), sampleCount WXUNUSED(len2))
{ if(buffer1 != NULL) return ProcessPass2(buffer1, len1); else return true; }
// 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;
};
#endif