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:

PShortArray PBaseArray< T > PAbstractArray PContainer PObject PDTMFEncoder List of all members.

Public Types

 MaxVolume = 100
 DefaultSampleRate = 8000
 MinFrequency = 30
 MinModulation = 5
 SineScale = 1000
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.
 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.

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 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

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/50425: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 ( 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::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.

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:
Generated on Fri Oct 14 01:44:14 2011 for PTLib by  doxygen 1.4.7