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