Binaural synthesis (confbridge): DTMF conference management.

DTMF configuration options for the binaural softmix bridge:
toggle binaural rendering (per channel).

ASTERISK-26292

Change-Id: Ibfe708b9fe26097c1798fcbfcc4dc461267d8af8
changes/25/3525/13
frahaase 9 years ago committed by George Joseph
parent 094c26aa68
commit 5b1796f59d

@ -438,6 +438,10 @@ const char *conf_get_sound(enum conf_sounds sound, struct bridge_profile_sounds
return S_OR(custom_sounds->muted, "conf-muted"); return S_OR(custom_sounds->muted, "conf-muted");
case CONF_SOUND_UNMUTED: case CONF_SOUND_UNMUTED:
return S_OR(custom_sounds->unmuted, "conf-unmuted"); return S_OR(custom_sounds->unmuted, "conf-unmuted");
case CONF_SOUND_BINAURAL_ON:
return S_OR(custom_sounds->binauralon, "confbridge-binaural-on");
case CONF_SOUND_BINAURAL_OFF:
return S_OR(custom_sounds->binauraloff, "confbridge-binaural-off");
case CONF_SOUND_ONLY_ONE: case CONF_SOUND_ONLY_ONE:
return S_OR(custom_sounds->onlyone, "conf-onlyone"); return S_OR(custom_sounds->onlyone, "conf-onlyone");
case CONF_SOUND_THERE_ARE: case CONF_SOUND_THERE_ARE:
@ -2452,6 +2456,20 @@ static int action_toggle_mute(struct confbridge_conference *conference,
conference->b_profile.sounds)) < 0; conference->b_profile.sounds)) < 0;
} }
static int action_toggle_binaural(struct confbridge_conference *conference,
struct confbridge_user *user,
struct ast_bridge_channel *bridge_channel)
{
unsigned int binaural;
ast_bridge_channel_lock_bridge(bridge_channel);
binaural = !bridge_channel->binaural_suspended;
bridge_channel->binaural_suspended = binaural;
ast_bridge_unlock(bridge_channel->bridge);
return play_file(bridge_channel, NULL, (binaural ?
conf_get_sound(CONF_SOUND_BINAURAL_OFF, user->b_profile.sounds) :
conf_get_sound(CONF_SOUND_BINAURAL_ON, user->b_profile.sounds))) < 0;
}
static int action_toggle_mute_participants(struct confbridge_conference *conference, struct confbridge_user *user) static int action_toggle_mute_participants(struct confbridge_conference *conference, struct confbridge_user *user)
{ {
struct confbridge_user *cur_user = NULL; struct confbridge_user *cur_user = NULL;
@ -2670,6 +2688,9 @@ static int execute_menu_entry(struct confbridge_conference *conference,
case MENU_ACTION_TOGGLE_MUTE: case MENU_ACTION_TOGGLE_MUTE:
res |= action_toggle_mute(conference, user, bridge_channel); res |= action_toggle_mute(conference, user, bridge_channel);
break; break;
case MENU_ACTION_TOGGLE_BINAURAL:
action_toggle_binaural(conference, user, bridge_channel);
break;
case MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS: case MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS:
if (!isadmin) { if (!isadmin) {
break; break;

@ -425,6 +425,8 @@
<enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum> <enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum>
<enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum> <enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum>
<enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum> <enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum>
<enum name="sound_binaural_on"><para>The sound played when binaural auudio is turned on.</para></enum>
<enum name="sound_binaural_off"><para>The sound played when the binaural audio is turned off.</para></enum>
<enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum> <enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum>
<enum name="sound_only_one"><para>The sound played to a user when there is only one other <enum name="sound_only_one"><para>The sound played to a user when there is only one other
person is in the conference.</para></enum> person is in the conference.</para></enum>
@ -512,6 +514,9 @@
Toggle turning on and off mute. Mute will make the user silent Toggle turning on and off mute. Mute will make the user silent
to everyone else, but the user will still be able to listen in. to everyone else, but the user will still be able to listen in.
</para></enum> </para></enum>
<enum name="toggle_binaural"><para>
Toggle turning on and off binaural audio processing.
</para></enum>
<enum name="no_op"><para> <enum name="no_op"><para>
This action does nothing (No Operation). Its only real purpose exists for This action does nothing (No Operation). Its only real purpose exists for
being able to reserve a sequence in the config as a menu exit sequence.</para></enum> being able to reserve a sequence in the config as a menu exit sequence.</para></enum>
@ -916,6 +921,10 @@ static int set_sound(const char *sound_name, const char *sound_file, struct brid
ast_string_field_set(sounds, muted, sound_file); ast_string_field_set(sounds, muted, sound_file);
} else if (!strcasecmp(sound_name, "sound_unmuted")) { } else if (!strcasecmp(sound_name, "sound_unmuted")) {
ast_string_field_set(sounds, unmuted, sound_file); ast_string_field_set(sounds, unmuted, sound_file);
} else if (!strcasecmp(sound_name, "sound_binaural_on")) {
ast_string_field_set(sounds, binauralon, sound_file);
} else if (!strcasecmp(sound_name, "sound_binaural_off")) {
ast_string_field_set(sounds, binauraloff, sound_file);
} else if (!strcasecmp(sound_name, "sound_there_are")) { } else if (!strcasecmp(sound_name, "sound_there_are")) {
ast_string_field_set(sounds, thereare, sound_file); ast_string_field_set(sounds, thereare, sound_file);
} else if (!strcasecmp(sound_name, "sound_other_in_party")) { } else if (!strcasecmp(sound_name, "sound_other_in_party")) {
@ -1141,6 +1150,7 @@ static int add_action_to_menu_entry(struct conf_menu_entry *menu_entry, enum con
switch (id) { switch (id) {
case MENU_ACTION_NOOP: case MENU_ACTION_NOOP:
case MENU_ACTION_TOGGLE_MUTE: case MENU_ACTION_TOGGLE_MUTE:
case MENU_ACTION_TOGGLE_BINAURAL:
case MENU_ACTION_INCREASE_LISTENING: case MENU_ACTION_INCREASE_LISTENING:
case MENU_ACTION_DECREASE_LISTENING: case MENU_ACTION_DECREASE_LISTENING:
case MENU_ACTION_INCREASE_TALKING: case MENU_ACTION_INCREASE_TALKING:
@ -1249,6 +1259,8 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *
ast_copy_string(menu_entry->dtmf, dtmf, sizeof(menu_entry->dtmf)); ast_copy_string(menu_entry->dtmf, dtmf, sizeof(menu_entry->dtmf));
if (!strcasecmp(action, "toggle_mute")) { if (!strcasecmp(action, "toggle_mute")) {
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_MUTE, NULL); res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_MUTE, NULL);
} else if (!strcasecmp(action, "toggle_binaural")) {
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_BINAURAL, NULL);
} else if (!strcasecmp(action, "no_op")) { } else if (!strcasecmp(action, "no_op")) {
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_NOOP, NULL); res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_NOOP, NULL);
} else if (!strcasecmp(action, "increase_listening_volume")) { } else if (!strcasecmp(action, "increase_listening_volume")) {
@ -1647,6 +1659,8 @@ static char *handle_cli_confbridge_show_bridge_profile(struct ast_cli_entry *e,
ast_cli(a->fd,"sound_kicked: %s\n", conf_get_sound(CONF_SOUND_KICKED, b_profile.sounds)); ast_cli(a->fd,"sound_kicked: %s\n", conf_get_sound(CONF_SOUND_KICKED, b_profile.sounds));
ast_cli(a->fd,"sound_muted: %s\n", conf_get_sound(CONF_SOUND_MUTED, b_profile.sounds)); ast_cli(a->fd,"sound_muted: %s\n", conf_get_sound(CONF_SOUND_MUTED, b_profile.sounds));
ast_cli(a->fd,"sound_unmuted: %s\n", conf_get_sound(CONF_SOUND_UNMUTED, b_profile.sounds)); ast_cli(a->fd,"sound_unmuted: %s\n", conf_get_sound(CONF_SOUND_UNMUTED, b_profile.sounds));
ast_cli(a->fd,"sound_binaural_on: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_ON, b_profile.sounds));
ast_cli(a->fd,"sound_binaural_off: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_OFF, b_profile.sounds));
ast_cli(a->fd,"sound_there_are: %s\n", conf_get_sound(CONF_SOUND_THERE_ARE, b_profile.sounds)); ast_cli(a->fd,"sound_there_are: %s\n", conf_get_sound(CONF_SOUND_THERE_ARE, b_profile.sounds));
ast_cli(a->fd,"sound_other_in_party: %s\n", conf_get_sound(CONF_SOUND_OTHER_IN_PARTY, b_profile.sounds)); ast_cli(a->fd,"sound_other_in_party: %s\n", conf_get_sound(CONF_SOUND_OTHER_IN_PARTY, b_profile.sounds));
ast_cli(a->fd,"sound_place_into_conference: %s\n", conf_get_sound(CONF_SOUND_PLACE_IN_CONF, b_profile.sounds)); ast_cli(a->fd,"sound_place_into_conference: %s\n", conf_get_sound(CONF_SOUND_PLACE_IN_CONF, b_profile.sounds));
@ -1775,6 +1789,9 @@ static char *handle_cli_confbridge_show_menu(struct ast_cli_entry *e, int cmd, s
case MENU_ACTION_TOGGLE_MUTE: case MENU_ACTION_TOGGLE_MUTE:
ast_cli(a->fd, "toggle_mute"); ast_cli(a->fd, "toggle_mute");
break; break;
case MENU_ACTION_TOGGLE_BINAURAL:
ast_cli(a->fd, "toggle_binaural");
break;
case MENU_ACTION_NOOP: case MENU_ACTION_NOOP:
ast_cli(a->fd, "no_op"); ast_cli(a->fd, "no_op");
break; break;

@ -93,6 +93,7 @@ enum conf_menu_action_id {
MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC, MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC,
MENU_ACTION_PARTICIPANT_COUNT, MENU_ACTION_PARTICIPANT_COUNT,
MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS, MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS,
MENU_ACTION_TOGGLE_BINAURAL,
}; };
/*! The conference menu action contains both /*! The conference menu action contains both
@ -170,6 +171,8 @@ enum conf_sounds {
CONF_SOUND_PARTICIPANTS_MUTED, CONF_SOUND_PARTICIPANTS_MUTED,
CONF_SOUND_PARTICIPANTS_UNMUTED, CONF_SOUND_PARTICIPANTS_UNMUTED,
CONF_SOUND_BEGIN, CONF_SOUND_BEGIN,
CONF_SOUND_BINAURAL_ON,
CONF_SOUND_BINAURAL_OFF,
}; };
struct bridge_profile_sounds { struct bridge_profile_sounds {
@ -197,6 +200,8 @@ struct bridge_profile_sounds {
AST_STRING_FIELD(participantsmuted); AST_STRING_FIELD(participantsmuted);
AST_STRING_FIELD(participantsunmuted); AST_STRING_FIELD(participantsunmuted);
AST_STRING_FIELD(begin); AST_STRING_FIELD(begin);
AST_STRING_FIELD(binauralon);
AST_STRING_FIELD(binauraloff);
); );
}; };

@ -259,6 +259,8 @@ type=bridge
;sound_unlocked_now; The sound played to an admin after toggling the conference to unlocked mode. ;sound_unlocked_now; The sound played to an admin after toggling the conference to unlocked mode.
;sound_error_menu ; The sound played when an invalid menu option is entered. ;sound_error_menu ; The sound played when an invalid menu option is entered.
;sound_begin ; The sound played to the conference when the first marked user enters the conference. ;sound_begin ; The sound played to the conference when the first marked user enters the conference.
;sound_binaural_on ; The sound played when binaural audio is turned on
;sound_binaural_off ; The sound played when binaural audio is turned off
; --- ConfBridge Menu Options --- ; --- ConfBridge Menu Options ---
; The ConfBridge application also has the ability to ; The ConfBridge application also has the ability to
@ -297,6 +299,7 @@ type=bridge
; using the '&' character as a delimiter. ; using the '&' character as a delimiter.
; toggle_mute ; Toggle turning on and off mute. Mute will make the user silent ; toggle_mute ; Toggle turning on and off mute. Mute will make the user silent
; to everyone else, but the user will still be able to listen in. ; to everyone else, but the user will still be able to listen in.
; toggle_binaural ; Toggle on or off binaural audio processing.
; no_op ; This action does nothing (No Operation). Its only real purpose exists for ; no_op ; This action does nothing (No Operation). Its only real purpose exists for
; being able to reserve a sequence in the config as a menu exit sequence. ; being able to reserve a sequence in the config as a menu exit sequence.

Loading…
Cancel
Save