1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-08 22:23:59 +01:00
Files
audacity/src/effects/DtmfGen.h
Leland Lucius 8fbfa460c4 Migrating the remaining effects
This brings the builtin, LV2, and VAMP effects inline with the
Audio Units, LADSPA, and VST effects.  All effects now share
a common UI.

This gives all effects (though not implemented for all):

User and factory preset capability
Preset import/export capability
Shared or private configuration options

Builtin effects can now be migrated to RTP, depending on algorithm.
LV2 effects now support graphical interfaces if the plugin supplies one.
Nyquist prompt enhanced to provide some features of the Nyquist Workbench.

It may not look like it, but this was a LOT of work, so trust me, there
WILL be problems and everything effect related should be suspect.  Keep
a sharp eye (or two) open.
2015-04-16 23:36:28 -05:00

99 lines
3.0 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
DtmfGen.h
Salvo Ventura
Dec 2006
An effect that generates DTMF tones
**********************************************************************/
#ifndef __AUDACITY_EFFECT_DTMF__
#define __AUDACITY_EFFECT_DTMF__
#include <wx/event.h>
#include <wx/slider.h>
#include <wx/stattext.h>
#include <wx/string.h>
#include "../ShuttleGui.h"
#include "../widgets/NumericTextCtrl.h"
#include "Effect.h"
#define DTMFTONES_PLUGIN_SYMBOL wxTRANSLATE("DTMF Tones")
class EffectDtmf : public Effect
{
public:
EffectDtmf();
virtual ~EffectDtmf();
// IdentInterface implementation
virtual wxString GetSymbol();
virtual wxString GetDescription();
// EffectIdentInterface implementation
virtual EffectType GetType();
// EffectClientInterface implementation
virtual int GetAudioOutCount();
virtual bool ProcessInitialize(sampleCount totalLen, ChannelNames chanMap = NULL);
virtual sampleCount ProcessBlock(float **inBlock, float **outBlock, sampleCount blockLen);
virtual bool GetAutomationParameters(EffectAutomationParameters & parms);
virtual bool SetAutomationParameters(EffectAutomationParameters & parms);
// Effect implementation
virtual bool Startup();
virtual void PopulateOrExchange(ShuttleGui & S);
virtual bool TransferDataFromWindow();
virtual bool TransferDataToWindow();
private:
// EffectDtmf implementation
bool MakeDtmfTone(float *buffer, sampleCount len, float fs,
wxChar tone, sampleCount last,
sampleCount total, float amplitude);
void Recalculate();
void UpdateUI();
void OnText(wxCommandEvent & evt);
void OnSlider(wxCommandEvent & evt);
private:
sampleCount numSamplesSequence; // total number of samples to generate
sampleCount numSamplesTone; // number of samples in a tone block
sampleCount numSamplesSilence; // number of samples in a silence block
sampleCount diff; // number of extra samples to redistribute
sampleCount numRemaining; // number of samples left to produce in the current block
sampleCount curTonePos; // position in tone to start the wave
bool isTone; // true if block is tone, otherwise silence
int curSeqPos; // index into dtmf tone string
wxString dtmfString; // dtmf tone string
int dtmfNTones; // total number of tones to generate
double dtmfTone; // duration of a single tone in ms
double dtmfSilence; // duration of silence between tones in ms
double dtmfDutyCycle; // ratio of dtmfTone/(dtmfTone+dtmfSilence)
double dtmfAmplitude; // amplitude of dtmf tone sequence, restricted to (0-1)
wxSlider *mDtmfDutyS;
NumericTextCtrl *mDtmfDurationT;
wxStaticText *mDtmfToneT;
wxStaticText *mDtmfSilenceT;
wxStaticText *mDtmfDutyT;
DECLARE_EVENT_TABLE();
};
#endif