// Reorder | 480 | 620 | Repeat, tones on and off 250 ms +- 25ms
// Busy | 480 | 620 | Repeat, tones on and off 500 ms +- 50ms
// Audible Ring | 480 | 480 | Repeat, tones on 2 +- 0.2sec, tones off 4 +- 0.4sec
// Recall Dial | 350 | 440 | Three bursts tones on and off 100 ms +- 20ms each followed by dial tone
// Special AR | 440 | 480 | Tones on 1 +- 0.2sec, followed by single 440Hz on for 0.2sec on, and silence for 3 +- 0.3sec, repeat
// Intercept | 440 | 620 | Repeat alternating tones, each on for 230ms +- 70ms with total cycle of 500 +- 50ms
// Call Waiting | 440 | Off | One burst 200 +- 100ms
// Busy Verification | 440 | Off | One burst of tone on 1.75 +- 0.25sec before attendant intrudes, followed by burst of tone 0.65 +- 0.15sec on, 8 to 20 sec apart for as long as the call lasts.
// Executive Override | 440 | Off | One burst of tone for 3 +- 1sec before overriding station intrudes.
// Confirmation | 350 | 440 | Three bursts on and off 100ms each or 100ms on, 100ms off, 300 ms on.
#define TONE_DIAL 0
#define TONE_REORDER 1
#define TONE_BUSY 2
#define TONE_AUDIBLE_RING 3
#define TONE_RECALL_DIAL 4
#define TONE_SPECIAL_AR 5
#define TONE_INTERCEPT 6
#define TONE_CALL_WAITING 7
#define TONE_BUSY_VERIFICATION 8
#define TONE_EXECUTIVE_OVERRIDE 9
#define TONE_CONFIRMATION 10
typedef struct
{
DWORD dwToneIndex;
DWORD dwDuration;
DWORD dwToneOnPeriod;
DWORD dwToneOffPeriod;
DWORD dwMasterGain;
} IDLE_TONE;
typedef struct
{
DWORD dwToneIndex; // 1-31, 0 reserved for silence