All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PTones Class Reference

This class can be used to generate PCM data for tones (such as telephone calling tones and DTMF) at a sample rate of 8khz. More...

`#include <dtmf.h>`

Inheritance diagram for PTones:

## Public Types

enum | { MaxVolume = 100, DefaultSampleRate = 8000, MinFrequency = 30, MinModulation = 5, SineScale = 1000 }
Public Types inherited from PObject
enum | Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
| Result of the comparison operation performed by the `Compare()` function. More...

## Public Member Functions

| PTones (unsigned masterVolume=MaxVolume, unsigned sampleRate=DefaultSampleRate)
| Create an empty tone buffer. More...
| PTones (const PString &descriptor, unsigned masterVolume=MaxVolume, unsigned sampleRate=DefaultSampleRate)
| Create a filled tone buffer using the specified descriptor. More...
bool | Generate (const PString &descriptor)
| Generate a tone using the specified descriptor. More...
bool | Generate (char operation, unsigned frequency1, unsigned frequency2, unsigned milliseconds, unsigned volume=MaxVolume)
| Generate a tone using the specified values. More...
Public Member Functions inherited from PShortArray
| PShortArray (PINDEX initialSize=0)
| Construct a new dynamic array of shorts. More...
| PShortArray (short const *buffer, PINDEX length, PBoolean dynamic=true)
| Construct a new dynamic array of shorts. More...
Public Member Functions inherited from PBaseArray< T >
| PBaseArray (PINDEX initialSize=0)
| Construct a new dynamic array of elements of the specified type. More...
| PBaseArray (T const *buffer, PINDEX length, PBoolean dynamic=true)
| Construct a new dynamic array of elements of the specified type. More...
virtual PObject * | Clone () const
| Clone the object. More...
PBoolean | SetAt (PINDEX index, T val)
| Set the specific element in the array. More...
T | GetAt (PINDEX index) const
| Get a value from the array. More...
void | Attach (const T *buffer, PINDEX bufferSize)
| Attach a pointer to a static block to the base array type. More...
T * | GetPointer (PINDEX minSize=0)
| Get a pointer to the internal array and assure that it is of at least the specified size. More...
T | operator[] (PINDEX index) const
| Get a value from the array. More...
T & | operator[] (PINDEX index)
| Get a reference to value from the array. More...
| operator T const * () const
| Get a pointer to the internal array. More...
PBoolean | Concatenate (const PBaseArray &array)
| Concatenate one array to the end of this array. More...
Public Member Functions inherited from PAbstractArray
| PAbstractArray (PINDEX elementSizeInBytes, PINDEX initialSize=0)
| Create a new dynamic array of `initalSize` elements of `elementSizeInBytes` bytes each. More...
| PAbstractArray (PINDEX elementSizeInBytes, const void *buffer, PINDEX bufferSizeInElements, PBoolean dynamicAllocation)
| Create a new dynamic array of `bufferSizeInElements` elements of `elementSizeInBytes` bytes each. More...
virtual void | PrintOn (ostream &strm) const
| Output the contents of the object to the stream. More...
virtual void | ReadFrom (istream &strm)
| Input the contents of the object from the stream. More...
virtual Comparison | Compare (const PObject &obj) const
| Get the relative rank of the two arrays. More...
virtual PBoolean | SetSize (PINDEX newSize)
| Set the size of the array in elements. More...
void | Attach (const void *buffer, PINDEX bufferSize)
| Attach a pointer to a static block to the base array type. More...
void * | GetPointer (PINDEX minSize=1)
| Get a pointer to the internal array and assure that it is of at least the specified size. More...
PBoolean | Concatenate (const PAbstractArray &array)
| Concatenate one array to the end of this array. More...
Public Member Functions inherited from PContainer
| PContainer (PINDEX initialSize=0)
| Create a new unique container. More...
| PContainer (const PContainer &cont)
| Create a new refernce to container. More...
PContainer & | operator= (const PContainer &cont)
| Assign one container reference to another. More...
virtual | ~PContainer ()
| Destroy the container class. More...
virtual PINDEX | GetSize () const
| Get the current size of the container. More...
PBoolean | SetMinSize (PINDEX minSize)
| Set the minimum size of container. More...
virtual PBoolean | IsEmpty () const
| Determine if the container is empty. More...
PBoolean | IsUnique () const
| Determine if container is unique reference. More...
virtual PBoolean | MakeUnique ()
| Make this instance to be the one and only reference to the container contents. More...
Public Member Functions inherited from PObject
virtual | ~PObject ()
virtual PINDEX | HashFunction () const
| This function yields a hash value required by the `PDictionary` class. More...
virtual const char * | GetClass (unsigned ancestor=0) const
| Get the current dynamic type of the object instance. More...
PBoolean | IsClass (const char *cls) const
virtual PBoolean | InternalIsDescendant (const char *clsName) const
| Determine if the dynamic type of the current instance is a descendent of the specified class. More...
virtual Comparison | CompareObjectMemoryDirect (const PObject &obj) const
| Determine the byte wise comparison of two objects. More...
bool | operator== (const PObject &obj) const
| Compare the two objects. More...
bool | operator!= (const PObject &obj) const
| Compare the two objects. More...
bool | operator< (const PObject &obj) const
| Compare the two objects. More...
bool | operator> (const PObject &obj) const
| Compare the two objects. More...
bool | operator<= (const PObject &obj) const
| Compare the two objects. More...
bool | operator>= (const PObject &obj) const
| Compare the two objects. More...

## Protected Member Functions

void | Construct ()
bool | Juxtapose (unsigned frequency1, unsigned frequency2, unsigned milliseconds, unsigned volume)
bool | Modulate (unsigned frequency, unsigned modulate, unsigned milliseconds, unsigned volume)
bool | PureTone (unsigned frequency, unsigned milliseconds, unsigned volume)
bool | Silence (unsigned milliseconds)
unsigned | CalcSamples (unsigned milliseconds, unsigned frequency1, unsigned frequency2=0)
void | AddSample (int sample, unsigned volume)
Protected Member Functions inherited from PBaseArray< T >
virtual void | PrintElementOn (ostream &stream, PINDEX index) const
| PBaseArray (PContainerReference &reference)
Protected Member Functions inherited from PAbstractArray
PBoolean | InternalSetSize (PINDEX newSize, PBoolean force)
virtual void | ReadElementFrom (istream &stream, PINDEX index)
| PAbstractArray (PContainerReference &reference, PINDEX elementSizeInBytes)
Protected Member Functions inherited from PContainer
| PContainer (int dummy, const PContainer *cont)
| Constructor used in support of the Clone() function. More...
| PContainer (PContainerReference &reference)
| Construct using static PContainerReference. More...
virtual void | DestroyContents ()=0
| Destroy the container contents. More...
virtual void | AssignContents (const PContainer &c)
| Copy the container contents. More...
void | CopyContents (const PContainer &c)
| Copy the container contents. More...
void | CloneContents (const PContainer *src)
| Create a duplicate of the container contents. More...
void | Destruct ()
| Internal function called from container destructors. More...
virtual void | DestroyReference ()
| Destroy the PContainerReference instance. More...
Protected Member Functions inherited from PObject
| PObject ()
| Constructor for PObject, made protected so cannot ever create one on its own. More...

## Protected Attributes

unsigned | m_sampleRate
unsigned | m_maxFrequency
unsigned | m_masterVolume
char | m_lastOperation
unsigned | m_lastFrequency1
unsigned | m_lastFrequency2
int | m_angle1
int | m_angle2
Protected Attributes inherited from PAbstractArray
PINDEX | elementSize
| Size of an element in bytes. More...
char * | theArray
| Pointer to the allocated block of memory. More...
PBoolean | allocatedDynamically
| Flag indicating the array was allocated on the heap. More...
Protected Attributes inherited from PContainer
PContainerReference * | reference

## Detailed Description

This class can be used to generate PCM data for tones (such as telephone calling tones and DTMF) at a sample rate of 8khz.

The class contains a master volume which is applied as well as the individual tone volumes. Thus a master volume ot 50% and a tone voluem of 50% would result in a net volume of 25%.

Tones may be described via a list of descriptor strings based on an ITU-T "semi-standard", one used within various standard documents but not a standard in itself. This format was enhanced to allow for multiple tones and volume indications.

The basic format is:

      [volume % ] frequency ':' cadence [ '/' ... ]

where frequency is one of frequency single frequency tone freq1 '+' freq2 two frequency juxtaposed (simple mixing) freq1 'x' freq2 first frequency modulated by second frequency freq1 '-' freq2 Alternate frequencies, generated tone is freq1 used for compatibility with tone filters and cadence is mintime ontime '-' offtime [ '-' ontime '-' offtime [ ... ] ]

and volume is a percentage of full volume

examples: 300:0.25 300Hz for minimum 250ms 1100:0.4-0.4 1100Hz with cadence 400ms on, 400ms off 900-1300:1.5 900Hz for 1.5 seconds 350+440:1 350Hz superimposed with 440Hz (US dial tone) for 1 second 425x15:0.4-0.2-0.4-2 425Hz modulated with 15Hz (Aus ring back tone) with cadence 400ms on, 200ms off, 400ms on, 2s off 425:0.4-0.1/50%425:0.4-0.1 425Hz with cadence 400ms on, 100ms off, 400ms on, 100ms off, where second tone is reduced in volume by 50%

A database of tones for all contries in the worls is available at: http://www.3amsystems.com/wireline/tone-search.htm

## Member Enumeration Documentation

anonymous enum

Enumerator
MaxVolume |
DefaultSampleRate |
MinFrequency |
MinModulation |
SineScale |

## Constructor & Destructor Documentation

PTones::PTones | ( | unsigned | masterVolume = `MaxVolume`,
|  | unsigned | sampleRate = `DefaultSampleRate`
| ) |  |

Create an empty tone buffer.

Tones added will use the specified master volume.

Parameters

  masterVolume | Percentage volume
  sampleRate | Sample rate of generated data

PTones::PTones | ( | const PString & | descriptor,
|  | unsigned | masterVolume = `MaxVolume`,
|  | unsigned | sampleRate = `DefaultSampleRate`
| ) |  |

Create a filled tone buffer using the specified descriptor.

Parameters

  descriptor | Descriptor string for tone(s). See class notes.
  masterVolume | Percentage volume
  sampleRate | Sample rate of generated data

## Member Function Documentation

void PTones::AddSample | ( | int | sample,
|  | unsigned | volume
| ) |  |

protected

unsigned PTones::CalcSamples | ( | unsigned | milliseconds,
|  | unsigned | frequency1,
|  | unsigned | frequency2 = `0`
| ) |  |

protected

void PTones::Construct | ( |  | ) |

protected

bool PTones::Generate | ( | const PString & | descriptor | ) |

Generate a tone using the specified descriptor.

See class general notes for format of the descriptor string.

Parameters

  descriptor | Descriptor string for tone(s). See class notes.

Referenced by PDTMFEncoder::GenerateBusyTone(), PDTMFEncoder::GenerateDialTone(), and PDTMFEncoder::GenerateRingBackTone().

bool PTones::Generate | ( | char | operation,
|  | unsigned | frequency1,
|  | unsigned | frequency2,
|  | unsigned | milliseconds,
|  | unsigned | volume = `MaxVolume`
| ) |  |

Generate a tone using the specified values.

The operation parameter may be '+', 'x', '-' or ' ' for summing, modulation, pure tone or silence resepctively. The tones duration is always rounded up to the nearest even multiple of the tone cycle to assure correct zero crossing when tones change.

Parameters

  operation | Operation for mixing frequency
  frequency1 | Primary frequency for tone
  frequency2 | Secondary frequency for summing or modulation
  milliseconds | Duration of tone
  volume | Percentage volume

bool PTones::Juxtapose | ( | unsigned | frequency1,
|  | unsigned | frequency2,
|  | unsigned | milliseconds,
|  | unsigned | volume
| ) |  |

protected

bool PTones::Modulate | ( | unsigned | frequency,
|  | unsigned | modulate,
|  | unsigned | milliseconds,
|  | unsigned | volume
| ) |  |

protected

bool PTones::PureTone | ( | unsigned | frequency,
|  | unsigned | milliseconds,
|  | unsigned | volume
| ) |  |

protected

bool PTones::Silence | ( | unsigned | milliseconds | ) |

protected

## Member Data Documentation

int PTones::m_angle1

protected

int PTones::m_angle2

protected

unsigned PTones::m_lastFrequency1

protected

unsigned PTones::m_lastFrequency2

protected

char PTones::m_lastOperation

protected

unsigned PTones::m_masterVolume

protected

unsigned PTones::m_maxFrequency

protected

unsigned PTones::m_sampleRate

protected

The documentation for this class was generated from the following file:

- dtmf.h