Conference call channel volume control
Posted: Tue Jul 21, 2020 11:00 pm
Hi guys,
We have agents asking for the conference call channel volume control to go down lower, (this is because of 3 way calls with other companies with loud hold music, which makes it hard for client to hear agent). I know this occurs in the MeetMeAdmin application from the extensions.conf. So I have edited the app_meetme.c file and rebuilt (even with a make clean), moved the .so file to the modules directory. /usr/lib/asterisk/modules and /usr/lib64/asterisk/modules. Unloaded/Reloaded and even restarted (whole server) but the changes I've made don't seem to make a difference, it's bizarre. Just wondering if I'm missing something. I tried changing the gain map (even making all the negative values the same) but still observed the original (standard) behaviour, same with adding in extra negative values (and changing the switch statement).
I realise it is pushing on more of an asterisk support question, but figured that there may be some helpful insight around here somewhere. Cheers, thanks in advance. Relevant code below:
CentOS 7
Asterisk 11.22.0
VERSION: 2.14-721a
BUILD: 191015-1620
We have agents asking for the conference call channel volume control to go down lower, (this is because of 3 way calls with other companies with loud hold music, which makes it hard for client to hear agent). I know this occurs in the MeetMeAdmin application from the extensions.conf. So I have edited the app_meetme.c file and rebuilt (even with a make clean), moved the .so file to the modules directory. /usr/lib/asterisk/modules and /usr/lib64/asterisk/modules. Unloaded/Reloaded and even restarted (whole server) but the changes I've made don't seem to make a difference, it's bizarre. Just wondering if I'm missing something. I tried changing the gain map (even making all the negative values the same) but still observed the original (standard) behaviour, same with adding in extra negative values (and changing the switch statement).
I realise it is pushing on more of an asterisk support question, but figured that there may be some helpful insight around here somewhere. Cheers, thanks in advance. Relevant code below:
- Code: Select all
static const char gain_map[] = {
-15,
-13,
-10,
-6,
0,
0,
0,
6,
10,
13,
15,
};
static int set_talk_volume(struct ast_conf_user *user, int volume)
{
char gain_adjust;
/* attempt to make the adjustment in the channel driver;
if successful, don't adjust in the frame reading routine
*/
gain_adjust = gain_map[volume + 5];
return ast_channel_setoption(user->chan, AST_OPTION_RXGAIN, &gain_adjust, sizeof(gain_adjust), 0);
}
static void tweak_volume(struct volume *vol, enum volume_action action)
{
switch (action) {
case VOL_UP:
switch (vol->desired) {
case 5:
break;
case 0:
vol->desired = 2;
break;
case -2:
vol->desired = 0;
break;
default:
vol->desired++;
break;
}
break;
case VOL_DOWN:
switch (vol->desired) {
case -5:
break;
case 2:
vol->desired = 0;
break;
case 0:
vol->desired = -2;
break;
default:
vol->desired--;
break;
}
}
}
static void tweak_talk_volume(struct ast_conf_user *user, enum volume_action action)
{
tweak_volume(&user->talk, action);
/* attempt to make the adjustment in the channel driver;
if successful, don't adjust in the frame reading routine
*/
if (!set_talk_volume(user, user->talk.desired))
user->talk.actual = 0;
else
user->talk.actual = user->talk.desired;
}
CentOS 7
Asterisk 11.22.0
VERSION: 2.14-721a
BUILD: 191015-1620