00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef PTLIB_DTMF_H
00020 #define PTLIB_DTMF_H
00021
00022 #ifdef P_USE_PRAGMA
00023 #pragma interface
00024 #endif
00025
00026
00027 class PDTMFDecoder : public PObject
00028 {
00029 PCLASSINFO(PDTMFDecoder, PObject)
00030
00031 public:
00032 PDTMFDecoder();
00033 PString Decode(const short * sampleData, PINDEX numSamples, unsigned mult = 1, unsigned div = 1);
00034
00035 protected:
00036 enum {
00037 NumTones = 10
00038 };
00039
00040
00041 char key[256];
00042
00043
00044 int p1[NumTones];
00045
00046
00047 int h[NumTones], k[NumTones], y[NumTones];
00048 int nn, so, ia;
00049 };
00050
00051
00095 class PTones : public PShortArray
00096 {
00097 PCLASSINFO(PTones, PShortArray)
00098
00099 public:
00100 enum {
00101 MaxVolume = 100,
00102 SampleRate = 8000,
00103 MaxFrequency = (SampleRate/4),
00104 MinFrequency = 30,
00105 MinModulation = 5,
00106 SineScale = 1000
00107 };
00108
00112 PTones(
00113 unsigned masterVolume = MaxVolume
00114 );
00115
00118 PTones(
00119 const PString & descriptor,
00120 unsigned masterVolume = MaxVolume
00121 );
00122
00126 bool Generate(
00127 const PString & descriptor
00128 );
00129
00136 bool Generate(
00137 char operation,
00138 unsigned frequency1,
00139 unsigned frequency2,
00140 unsigned milliseconds,
00141 unsigned volume = MaxVolume
00142 );
00143
00144 protected:
00145 bool Juxtapose(unsigned frequency1, unsigned frequency2, unsigned milliseconds, unsigned volume);
00146 bool Modulate (unsigned frequency, unsigned modulate, unsigned milliseconds, unsigned volume);
00147 bool PureTone (unsigned frequency, unsigned milliseconds, unsigned volume);
00148 bool Silence (unsigned milliseconds);
00149
00150 unsigned CalcSamples(unsigned milliseconds, unsigned frequency1, unsigned frequency2 = 0);
00151
00152 void AddSample(int sample, unsigned volume);
00153
00154 unsigned masterVolume;
00155 char lastOperation;
00156 unsigned unsigned modulate, unsigned milliseconds, unsigned volume);
00147 bool PureTone (unsigned frequency, unsigned milliseconds, unsigned volume);
00148 bool Silence (unsigned milliseconds);
00149
00150 unsigned CalcSamples(unsigned milliseconds, unsigned frequency1, unsigned frequency2 = 0);
00151
00152 void AddSample(int sample, unsigned volume);
00153
00154 unsigned masterVolume;
00155 char lastOperation;
00156 unsigned unsigned modulate, unsigned milliseconds, unsigned volume);
00147 bool PureTone (unsigned frequency, unsigned milliseconds, unsigned volume);
00148 bool Silence (unsigned milliseconds);
00149
00150 unsigned CalcSamples(unsigned milliseconds, unsigned frequency1, unsigned frequency2 = 0);
00151
00152 void AddSample(int sample, unsigned volume);
00153
00154 unsigned masterVolume;
00155 char lastOperation;
00156 unsigned unsigned modulate, unsigned milliseconds, unsigned volume);
00147 bool PureTone (unsigned frequency, unsigned milliseconds, unsigned volume);
00148 bool Silence (unsigned milliseconds);
00149
00150 unsigned CalcSamples(unsigned milliseconds, unsigned frequency1, unsigned frequency2 = 0);
00151
00152 void AddSample(int sample, unsigned volume);
00153
00154 unsigned masterVolume;
00155