PTLib  Version 2.14.3
 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:
Collaboration diagram for PTones:

Public Types

enum  {
  MaxVolume = 100, DefaultSampleRate = 8000, MinFrequency = 30, MinModulation = 5,
  SineScale = 1000
}
 

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, unsigned sampleRate=0, unsigned masterVolume=0)
 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...
 
bool Write (PChannel &channel)
 Write tones to channel. More...
 
unsigned GetSampleRate () const
 
virtual PBoolean SetSize (PINDEX newSize)
 Set the size of the array in elements. More...
 
- Public Member Functions inherited from PScalarArray< T >
 PScalarArray (PINDEX initialSize=0)
 Construct a new dynamic array of elements of the specified type. More...
 
 PScalarArray (T const *buffer, PINDEX length, PBoolean dynamic=true)
 Construct a new dynamic array of elements of the specified type. 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 PObjectClone () const
 Clone the object. More...
 
PBoolean SetAt (PINDEX index, T val)
 Set the specific element in the array. More...
 
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...
 
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...
 
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...
 
PContaineroperator= (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...
 
__inline size_t size () const
 
PBoolean SetMinSize (PINDEX minSize)
 Set the minimum size of container. More...
 
virtual PBoolean IsEmpty () const
 Determine if the container is empty. More...
 
__inline bool empty () const
 
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
unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
void SetTraceContextIdentifier (unsigned id)
 
void GetTraceContextIdentifier (PObject &obj)
 
void GetTraceContextIdentifier (PObject *obj)
 
void SetTraceContextIdentifier (const PObject &obj)
 
void SetTraceContextIdentifier (const PObject *obj)
 
virtual ~PObject ()
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
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...
 
__inline const PObjectPTraceObjectInstance () const
 
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 Reset ()
 
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 PScalarArray< T >
virtual void ReadElementFrom (istream &stream, PINDEX index)
 
- 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)
 
 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
 
PINDEX m_addPosition
 

Additional Inherited Members

- Static Public Member Functions inherited from PObject
static const char * Class ()
 Get the name of the class as a C string. More...
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
- Friends inherited from PObject

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 Af0-G#9 Standard musical note codes, letters A to G followed by optional 'f' or '#' for flat or sharp, then on optional octave number from 0 to 9. A4 == 440Hz

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
masterVolumePercentage volume
sampleRateSample 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
descriptorDescriptor string for tone(s). See class notes.
masterVolumePercentage volume
sampleRateSample 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
bool PTones::Generate ( const PString descriptor,
unsigned  sampleRate = 0,
unsigned  masterVolume = 0 
)

Generate a tone using the specified descriptor.

See class general notes for format of the descriptor string.

Parameters
descriptorDescriptor string for tone(s). See class notes.
sampleRateSample rate of generated data
masterVolumePercentage volume

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
operationOperation for mixing frequency
frequency1Primary frequency for tone
frequency2Secondary frequency for summing or modulation
millisecondsDuration of tone
volumePercentage volume
unsigned PTones::GetSampleRate ( ) const
inline

References m_sampleRate.

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
void PTones::Reset ( )
protected
virtual PBoolean PTones::SetSize ( PINDEX  newSize)
virtual

Set the size of the array in elements.

A new array may be allocated to accomodate the new number of elements. If the array increases in size then the new bytes are initialised to zero. If the array is made smaller then the data beyond the new size is lost.

Returns
true if the memory for the array was allocated successfully.

Reimplemented from PAbstractArray.

bool PTones::Silence ( unsigned  milliseconds)
protected
bool PTones::Write ( PChannel channel)
inline

Write tones to channel.

Get the sample rate for tones

References PBaseArray< T >::GetPointer(), PContainer::GetSize(), and PChannel::Write().

Member Data Documentation

PINDEX PTones::m_addPosition
protected
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

Referenced by GetSampleRate().


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