audacia/src/effects/SoundTouchEffect.h

77 lines
1.7 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
SoundTouchEffect.h
Dominic Mazzoni, Vaughan Johnson
This abstract class contains all of the common code for an
effect that uses SoundTouch to do its processing (ChangeTempo
and ChangePitch).
**********************************************************************/
#include "../Audacity.h"
#if USE_SOUNDTOUCH
#ifndef __AUDACITY_EFFECT_SOUNDTOUCH__
#define __AUDACITY_EFFECT_SOUNDTOUCH__
#include "Effect.h"
// Soundtouch defines these as well, so get rid of them before including
#undef PACKAGE_NAME
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#undef PACKAGE_BUGREPORT
#include "SoundTouch.h"
using namespace soundtouch;
class WaveTrack;
class EffectSoundTouch /* not final */ : public Effect
{
public:
// Effect implementation
bool Process() override;
// EffectSoundTouch implementation
#ifdef USE_MIDI
double mSemitones; // pitch change for NoteTracks
EffectSoundTouch() { mSemitones = 0; }
#endif
protected:
std::unique_ptr<SoundTouch> mSoundTouch;
double mCurT0;
double mCurT1;
private:
bool ProcessLabelTrack(Track *track);
#ifdef USE_MIDI
bool ProcessNoteTrack(Track *track);
#endif
bool ProcessOne(WaveTrack * t, sampleCount start, sampleCount end);
bool ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack,
sampleCount start, sampleCount end);
bool ProcessStereoResults(const unsigned int outputCount,
WaveTrack* outputLeftTrack,
WaveTrack* outputRightTrack);
int mCurTrackNum;
double m_maxNewLength;
};
#endif
#endif