tonezone: Fix congestion tone for Australia
The Congestion tone in Australia must be reduced by 10 to 15 dB at every other cadence and the frequencies for both at cadences are 425 Hz. From: Armen Karlozian <armeniki@hotmail.com> Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
This commit is contained in:
parent
6c40704fec
commit
a109763160
22
tonezone.c
22
tonezone.c
@ -89,18 +89,19 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||||||
int firstnobang = -1;
|
int firstnobang = -1;
|
||||||
int freq1, freq2, time;
|
int freq1, freq2, time;
|
||||||
int modulate = 0;
|
int modulate = 0;
|
||||||
float gain;
|
float db, gain;
|
||||||
int used = 0;
|
int used = 0;
|
||||||
dup = strdup(t->data);
|
dup = strdup(t->data);
|
||||||
s = strtok(dup, ",");
|
s = strtok(dup, ",");
|
||||||
while(s && strlen(s)) {
|
while(s && strlen(s)) {
|
||||||
/* Handle optional ! which signifies don't start here*/
|
/* Handle optional ! which signifies don't start here*/
|
||||||
if (s[0] == '!')
|
if (s[0] == '!') {
|
||||||
s++;
|
s++;
|
||||||
else if (firstnobang < 0) {
|
} else if (firstnobang < 0) {
|
||||||
PRINT_DEBUG("First no bang: %s\n", s);
|
PRINT_DEBUG("First no bang: %s\n", s);
|
||||||
firstnobang = *count;
|
firstnobang = *count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &time) == 3) {
|
if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &time) == 3) {
|
||||||
/* f1+f2/time format */
|
/* f1+f2/time format */
|
||||||
PRINT_DEBUG("f1+f2/time format: %d, %d, %d\n", freq1, freq2, time);
|
PRINT_DEBUG("f1+f2/time format: %d, %d, %d\n", freq1, freq2, time);
|
||||||
@ -111,18 +112,31 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||||||
} else if (sscanf(s, "%d+%d", &freq1, &freq2) == 2) {
|
} else if (sscanf(s, "%d+%d", &freq1, &freq2) == 2) {
|
||||||
PRINT_DEBUG("f1+f2 format: %d, %d\n", freq1, freq2);
|
PRINT_DEBUG("f1+f2 format: %d, %d\n", freq1, freq2);
|
||||||
time = 0;
|
time = 0;
|
||||||
|
db = 1.0;
|
||||||
} else if (sscanf(s, "%d*%d", &freq1, &freq2) == 2) {
|
} else if (sscanf(s, "%d*%d", &freq1, &freq2) == 2) {
|
||||||
PRINT_DEBUG("f1+f2 format: %d, %d\n", freq1, freq2);
|
PRINT_DEBUG("f1+f2 format: %d, %d\n", freq1, freq2);
|
||||||
modulate = 1;
|
modulate = 1;
|
||||||
time = 0;
|
time = 0;
|
||||||
|
db = 1.0;
|
||||||
} else if (sscanf(s, "%d/%d", &freq1, &time) == 2) {
|
} else if (sscanf(s, "%d/%d", &freq1, &time) == 2) {
|
||||||
PRINT_DEBUG("f1/time format: %d, %d\n", freq1, time);
|
PRINT_DEBUG("f1/time format: %d, %d\n", freq1, time);
|
||||||
freq2 = 0;
|
freq2 = 0;
|
||||||
|
db = 1.0;
|
||||||
|
} else if (sscanf(s, "%d@/%d", &freq1, &time) == 2) {
|
||||||
|
/* The "@" character has been added to enable an
|
||||||
|
* approximately -20db tone generation of any frequency This has been done
|
||||||
|
* primarily to generate the Australian congestion tone.
|
||||||
|
* Example: "425/375,0/375,425@/375,0/375"
|
||||||
|
*/
|
||||||
|
PRINT_DEBUG("f1 reduced amplitude/time format: %d, %d\n", freq1,time);
|
||||||
|
db = 0.3;
|
||||||
|
freq2 = 0;
|
||||||
} else if (sscanf(s, "%d", &freq1) == 1) {
|
} else if (sscanf(s, "%d", &freq1) == 1) {
|
||||||
PRINT_DEBUG("f1 format: %d\n", freq1);
|
PRINT_DEBUG("f1 format: %d\n", freq1);
|
||||||
firstnobang = *count;
|
firstnobang = *count;
|
||||||
freq2 = 0;
|
freq2 = 0;
|
||||||
time = 0;
|
time = 0;
|
||||||
|
db = 1.0;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "tone component '%s' of '%s' is a syntax error\n", s,t->data);
|
fprintf(stderr, "tone component '%s' of '%s' is a syntax error\n", s,t->data);
|
||||||
return -1;
|
return -1;
|
||||||
@ -137,7 +151,7 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||||||
td = data;
|
td = data;
|
||||||
|
|
||||||
/* Bring it down -8 dbm */
|
/* Bring it down -8 dbm */
|
||||||
gain = pow(10.0, (LEVEL - 3.14) / 20.0) * 65536.0 / 2.0;
|
gain = db*(pow(10.0, (LEVEL - 3.14) / 20.0) * 65536.0 / 2.0);
|
||||||
|
|
||||||
td->fac1 = 2.0 * cos(2.0 * M_PI * (freq1 / 8000.0)) * 32768.0;
|
td->fac1 = 2.0 * cos(2.0 * M_PI * (freq1 / 8000.0)) * 32768.0;
|
||||||
td->init_v2_1 = sin(-4.0 * M_PI * (freq1 / 8000.0)) * gain;
|
td->init_v2_1 = sin(-4.0 * M_PI * (freq1 / 8000.0)) * gain;
|
||||||
|
13
zonedata.c
13
zonedata.c
@ -59,11 +59,18 @@ struct tone_zone builtin_zones[] =
|
|||||||
.description = "Australia",
|
.description = "Australia",
|
||||||
.ringcadence = { 400, 200, 400, 2000 },
|
.ringcadence = { 400, 200, 400, 2000 },
|
||||||
.tones = {
|
.tones = {
|
||||||
{ DAHDI_TONE_DIALTONE, "413+438" },
|
|
||||||
|
{ DAHDI_TONE_DIALTONE, "415+440" },
|
||||||
{ DAHDI_TONE_BUSY, "425/375,0/375" },
|
{ DAHDI_TONE_BUSY, "425/375,0/375" },
|
||||||
{ DAHDI_TONE_RINGTONE, "413+438/400,0/200,413+438/400,0/2000" },
|
{ DAHDI_TONE_RINGTONE, "413+438/400,0/200,413+438/400,0/2000" },
|
||||||
/* XXX Congestion: Should reduce by 10 db every other cadence XXX */
|
/* The Australian congestion tone is 425Hz, 375ms On, 375ms Off, with the
|
||||||
{ DAHDI_TONE_CONGESTION, "425/375,0/375,420/375,0/375" },
|
* second cadence being half the amplitude of the first; so the first cadence
|
||||||
|
* is approximately -10dB with the second one being -20dB. Using the update
|
||||||
|
* ToneZone.c file, this can be accomplished by adding the "@" symbol in front
|
||||||
|
* of the frequency to reduce amplification, as in the following entry for
|
||||||
|
* Congestion:
|
||||||
|
*/
|
||||||
|
{ DAHDI_TONE_CONGESTION, "425/375,0/375,425@/375,0/375" },
|
||||||
{ DAHDI_TONE_CALLWAIT, "425/100,0/200,425/200,0/4400" },
|
{ DAHDI_TONE_CALLWAIT, "425/100,0/200,425/200,0/4400" },
|
||||||
{ DAHDI_TONE_DIALRECALL, "413+428" },
|
{ DAHDI_TONE_DIALRECALL, "413+428" },
|
||||||
{ DAHDI_TONE_RECORDTONE, "!425/1000,!0/15000,425/360,0/15000" },
|
{ DAHDI_TONE_RECORDTONE, "!425/1000,!0/15000,425/360,0/15000" },
|
||||||
|
Loading…
Reference in New Issue
Block a user