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