1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-03 17:39:25 +02:00
audacity/src/effects/TwoPassSimpleMono.h
Paul Licameli ad04187a41 Change sampleCount arguments, variables, return values to size_t...
... whenever they really describe the size of a buffer that fits in memory, or
of a block file (which is never now more than a megabyte and so could be fit in
memory all at once), or a part thereof.
2016-09-15 21:03:17 -04:00

85 lines
2.5 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 /* not final */ : public Effect
{
public:
// Effect implementation
bool Process() override;
protected:
// EffectTwoPassSimpleMono implemetation
// 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;
private:
bool ProcessOne(WaveTrack * t,
sampleCount start, sampleCount end);
bool ProcessPass();
};
#endif