audacia/src/effects/Generator.h

76 lines
2.3 KiB
C
Raw Normal View History

/**********************************************************************
Audacity: A Digital Audio Editor
Generator.h
Two Abstract classes, Generator, and BlockGenerator, that effects which
2014-06-03 20:30:19 +00:00
generate audio should derive from.
Block Generator breaks the synthesis task up into smaller parts.
Dominic Mazzoni
Vaughan Johnson
**********************************************************************/
#ifndef __AUDACITY_GENERATOR__
#define __AUDACITY_GENERATOR__
#include "Effect.h"
// Base class for Generators (effects which fill a given duration)
class Generator /* not final */ : public Effect
{
public:
Generator() { }
protected:
// [ GenerateTrack() must be overridden by the actual generator class ]
// Precondition: mDuration > 0.0
// Postcondition: <tmp> is filled with the data intended for <track>
virtual bool GenerateTrack(WaveTrack *tmp,
const WaveTrack &track,
int ntrack) = 0;
bool Init() override { return true; }
// Actions to perform at the respective points in the generation process
// NEW virtuals
virtual void BeforeGenerate() { };
virtual void BeforeTrack(const WaveTrack & WXUNUSED(track)) { };
// Actions to perform upon respective outcomes
// (For example, Success might save the parameters that were used.)
virtual void Success() { };
virtual void Failure() {};
// Precondition:
// mDuration is set to the amount of time to generate in seconds
// Postcondition:
// If mDuration was valid (>= 0), then the tracks are replaced by the
// generated results and true is returned. Otherwise, return false.
AUDACITY_DLL_API bool Process() override;
};
// Abstract generator which creates the sound in discrete blocks, whilst
// showing a progress bar
class BlockGenerator /* not final */ : public Generator {
public:
BlockGenerator() { }
protected:
// Number of samples to generate
sampleCount numSamples;
// Postcondition: data[0..block) filled with generated samples
virtual void GenerateBlock(float *data,
const WaveTrack &track,
size_t block) = 0;
// Generate the track, one block at a time, & adding the results to tmp
bool GenerateTrack(WaveTrack *tmp, const WaveTrack &track, int ntrack) override;
};
#endif