dtmf.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _DTMF_H
00049 #define _DTMF_H
00050
00051 #ifdef P_USE_PRAGMA
00052 #pragma interface
00053 #endif
00054
00055 #include <ptlib.h>
00056
00057 class PDTMFDecoder : public PObject
00058 {
00059 PCLASSINFO(PDTMFDecoder, PObject)
00060
00061 public:
00062 PDTMFDecoder();
00063 PString Decode(const short * sampleData, PINDEX numSamples);
00064
00065 protected:
00066
00067 char key[256];
00068
00069
00070 int p1[8];
00071
00072
00073 int h[8], k[8], y[8];
00074 int nn, so, ia;
00075 };
00076
00077
00121 class PTones : public PShortArray
00122 {
00123 PCLASSINFO(PTones, PShortArray)
00124
00125 public:
00126 enum {
00127 MaxVolume = 100,
00128 SampleRate = 8000,
00129 MaxFrequency = (SampleRate/4),
00130 MinFrequency = 30,
00131 MinModulation = 5,
00132 SineScale = 1000
00133 };
00134
00138 PTones(
00139 unsigned masterVolume = MaxVolume
00140 );
00141
00144 PTones(
00145 const PString & descriptor,
00146 unsigned masterVolume = MaxVolume
00147 );
00148
00152 bool Generate(
00153 const PString & descriptor
00154 );
00155
00162 bool Generate(
00163 char operation,
00164 unsigned frequency1,
00165 unsigned frequency2,
00166 unsigned milliseconds,
00167 unsigned volume = MaxVolume
00168 );
00169
00170 protected:
00171 bool Juxtapose(unsigned frequency1, unsigned frequency2, unsigned milliseconds, unsigned volume);
00172 bool Modulate (unsigned frequency, unsigned modulate, unsigned milliseconds, unsigned volume);
00173 bool PureTone (unsigned frequency, unsigned milliseconds, unsigned volume);
00174 bool Silence (unsigned milliseconds);
00175
00176 unsigned CalcSamples(unsigned milliseconds, unsigned frequency1, unsigned frequency2 = 0);
00177
00178 void AddSample(int sample, unsigned volume);
00179
00180 unsigned masterVolume;
00181 char lastOperation;
00182 unsigned lastFrequency1, lastFrequency2;
00183 int angle1, angle2;
00184 };
00185
00186
00191 class PDTMFEncoder : public PTones
00192 {
00193 PCLASSINFO(PDTMFEncoder, PTones)
00194
00195 public:
00196 enum { DefaultToneLen = 100 };
00197
00201 PDTMFEncoder(
00202 const char * dtmf = NULL,
00203 unsigned milliseconds = DefaultToneLen
00204 );
00205
00209 PDTMFEncoder(
00210 char key,
00211 unsigned milliseconds = DefaultToneLen
00212 );
00213
00217 void AddTone(
00218 const char * str,
00219 unsigned milliseconds = DefaultToneLen
00220 );
00221
00225 void AddTone(
00226 char ch,
00227 unsigned milliseconds = DefaultToneLen
00228 );
00229
00234 void AddTone(
00235 double frequency1,
00236 double frequency2 = 0,
00237 unsigned milliseconds = DefaultToneLen
00238 );
00239
00244 void GenerateRingBackTone()
00245 {
00246 Generate("440+480:2-4");
00247 }
00248
00253 void GenerateDialTone()
00254 {
00255 Generate("350+440:1");
00256 }
00257
00262 void GenerateBusyTone()
00263 {
00264 Generate("480+620:0.5-0.5");
00265 }
00266
00274 char DtmfChar(
00275 PINDEX i
00276 );
00277
00278 };
00279
00280 #endif